puzhibing
2026-05-19 446d588f6983d2f9e7bb18546a961fa4c14c99a0
合并代码
41个文件已添加
25个文件已修改
5676 ■■■■■ 已修改文件
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/config/MiniprogramConfigurer.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/config/MiniprogramConfigurer.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/remoteDriving/RemoteDrivingTriggerDTO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/remoteDriving/RemoteDrivingClientFallbackFactory.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/remoteDriving/RemoteDrivingClient.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpTask.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/config/MiniprogramConfigurer.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/ActiveOrderServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/dto/SaveRemoteDrivingAccidentDto.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/XpTaskService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/config/MiniprogramConfigurer.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/config/MiniprogramConfigurer.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/WhitelistEditDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/task/ActivityTask.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/config/MiniprogramConfigurer.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/utils/MapMatchingUtil.java 407 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/config/MiniprogramConfigurer.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/HttpTestController.java 1145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverBaseInfoDTO.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverCancelRegisterInfoDTO.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverContractInfoDTO.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverMobileTerminalInfoDTO.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverPositionInfoDTO.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverPunishInfoDTO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverRegisterInfoDTO.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverReputationInfoDTO.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverStatisticsInfoDTO.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverTrainingInfoDTO.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverVehicleRelationInfoDTO.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationOperateArriveInfoDTO.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationOperateDepartInfoDTO.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationOperatePayInfoDTO.java 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationOrderCancelInfoDTO.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationOrderCreateInfoDTO.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationOrderMatchInfoDTO.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationOrderViolationInfoDTO.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPassengerBaseInfoDTO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPassengerComplaintInfoDTO.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPassengerEvaluateInfoDTO.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformAggregationInfoDTO.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformInvestorInfoDTO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformLicenseInfoDTO.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformOperationRegisterInfoDTO.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformPauseOperationRegisterInfoDTO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformPayInfoDTO.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformPriceInfoDTO.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformServiceInfoDTO.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationVehicleBaseInfoDTO.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationVehicleCancelReportInfoDTO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationVehicleInsuranceInfoDTO.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationVehicleMileageInfoDTO.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationVehicleOperateLoginInfoDTO.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationVehicleOperateLogoutInfoDTO.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationVehicleOperationRegisterInfoDTO.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/VehicleListByVinVo.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/MinistryOfTransport.java 780 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/resources/mapper/vehicleConvoy/XpVehicleMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/config/MiniprogramConfigurer.java
@@ -10,7 +10,7 @@
import javax.annotation.Resource;
@Slf4j
//@Configuration
@Configuration
public class MiniprogramConfigurer extends WebMvcConfigurerAdapter {
    @Resource
xp-robotaxi-api/src/main/java/com/xiaopeng/api/config/MiniprogramConfigurer.java
@@ -10,7 +10,7 @@
import javax.annotation.Resource;
@Slf4j
//@Configuration
@Configuration
public class MiniprogramConfigurer extends WebMvcConfigurerAdapter {
    @Resource
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/remoteDriving/RemoteDrivingTriggerDTO.java
New file
@@ -0,0 +1,40 @@
package com.xiaopeng.api.dto.remoteDriving;
import lombok.Data;
import java.io.Serializable;
@Data
public class RemoteDrivingTriggerDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 车辆vin码
     */
    private String vin;
    /**
     * 车辆xpuId
     */
    private String xpuId;
    /**
     * 来源平台(ADMIN:运营管理后台)
     */
    private String from;
    /**
     * 工单创建时间
     */
    private String createdTime;
    /**
     * 用户名
     */
    private String userName;
    /**
     * 预留字段
     */
    private Object custom;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/remoteDriving/RemoteDrivingClientFallbackFactory.java
New file
@@ -0,0 +1,22 @@
package com.xiaopeng.api.factory.remoteDriving;
import com.xiaopeng.api.dto.remoteDriving.RemoteDrivingTriggerDTO;
import com.xiaopeng.api.feignClient.remoteDriving.RemoteDrivingClient;
import com.xiaopeng.common.core.domain.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class RemoteDrivingClientFallbackFactory implements FallbackFactory<RemoteDrivingClient> {
    @Override
    public RemoteDrivingClient create(Throwable cause) {
        return new RemoteDrivingClient() {
            @Override
            public R<?> trigger(RemoteDrivingTriggerDTO dto) {
                return R.fail("触发远驾工单失败:" + cause.getMessage());
            }
        };
    }
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/remoteDriving/RemoteDrivingClient.java
New file
@@ -0,0 +1,23 @@
package com.xiaopeng.api.feignClient.remoteDriving;
import com.xiaopeng.api.dto.remoteDriving.RemoteDrivingTriggerDTO;
import com.xiaopeng.api.factory.remoteDriving.RemoteDrivingClientFallbackFactory;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(
        contextId = "RemoteDrivingClient",
        value = ServiceNameConstantsEnum.XP_REMOTE_DRIVING_SERVICE,
        fallbackFactory = RemoteDrivingClientFallbackFactory.class
)
public interface RemoteDrivingClient {
    /**
     * 触发远驾工单
     */
    @PostMapping("/logan/remote-driving/trigger")
    R<?> trigger(@RequestBody RemoteDrivingTriggerDTO dto);
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpTask.java
@@ -102,7 +102,7 @@
    @ApiModelProperty(value = "状态 2=已处理 1=改派中")
    private Integer reassignmentStatus;
    @ApiModelProperty(value = "任务来源 1-运维APP 2-管理后台")
    @ApiModelProperty(value = "任务来源 1-运维APP 2-管理后台 3-远程代驾")
    private Integer taskSource;
    @ApiModelProperty(value = "申请改派的用户")
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/config/MiniprogramConfigurer.java
@@ -10,7 +10,7 @@
import javax.annotation.Resource;
@Slf4j
//@Configuration
@Configuration
public class MiniprogramConfigurer extends WebMvcConfigurerAdapter {
    @Resource
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/ActiveOrderServiceImpl.java
@@ -161,6 +161,8 @@
                if(speed > xczHmSpeedPerHour){
                    throw new ServiceException("目的地修改次数已超上限");
                }
            }else{
                throw new ServiceException("目的地修改次数已超上限");
            }
        }
        if(order.getVehicleId() == null){
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
@@ -55,6 +55,8 @@
import com.xiaopeng.itinerary.vo.RedisQueuePointIdVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
@@ -155,6 +157,8 @@
    private XpTradingStrategyClient xpTradingStrategyClient;
    @Resource
    private UserResourcesClient userResourcesClient;
    @Resource
    private RedissonClient redissonClient;
    @Resource(name = "hutoolSnowflake")
    private Snowflake snowflake;
@@ -1010,7 +1014,7 @@
     */
    private RouteAndFareVo pricingForRoute(RouteAndFareDto routeAndFareDto, RouteVo routeVo, XpPricing xpPricing, String userId) {
        XpPricingCardVo xpPricingCardVo;
;        if (xpPricing.getPricingType() == 1) {
        if (xpPricing.getPricingType() == 1) {
            xpPricingCardVo = xpPricingUtil.calculationPrice(userId,
                    JSON.parseObject(xpPricing.getBasicPricingJson()),
                    JSON.parseArray(xpPricing.getStartingFareJson()),
@@ -1458,55 +1462,56 @@
    public QueueStatusVo getQueueStatus(String orderId, String uid) {
        QueueStatusVo queueStatusVo = new QueueStatusVo();
        // 从订单服务获取订单信息,获取queueName
        R<XpOrder> orderR = xpOrderClient.queryOrderById(Long.valueOf(orderId));
        if (orderR.getCode() != R.SUCCESS || orderR.getData() == null) {
            throw new ServiceException("订单不存在");
        }
        XpOrder xpOrder = orderR.getData();
        String queueName = xpOrder.getQueueName();
        RLock lock = redissonClient.getLock("queue_lock_" + queueName);
        try {
            // 从订单服务获取订单信息,获取queueName
            R<XpOrder> orderR = xpOrderClient.queryOrderById(Long.valueOf(orderId));
            if (orderR.getCode() != R.SUCCESS || orderR.getData() == null) {
                throw new ServiceException("订单不存在");
            }
            XpOrder xpOrder = orderR.getData();
            String queueName = xpOrder.getQueueName();
            if (StringUtils.isBlank(queueName)) {
                // 订单不在排队中
                queueStatusVo.setStatus(1);
                queueStatusVo.setCurrentPosition(0);
                queueStatusVo.setTotalCount(0);
                queueStatusVo.setEstimatedWaitTime(0);
                return queueStatusVo;
            }
            // 从Redis获取队列数据
            List<String> queueItems = redisService.getCacheList(queueName);
            if (queueItems == null || queueItems.isEmpty()) {
                // 队列为空,说明已分配车辆
                queueStatusVo.setStatus(1);
                queueStatusVo.setCurrentPosition(0);
                queueStatusVo.setTotalCount(0);
                queueStatusVo.setEstimatedWaitTime(0);
                return queueStatusVo;
            }
            // 遍历队列,找到当前订单的位置
            int currentPosition = 0;
            int totalCount = queueItems.size();
            for (int i = 0; i < queueItems.size(); i++) {
                currentPosition++;
                String item = queueItems.get(i);
                String[] split = item.split("_");
                if (split[0].equals(orderId + "")) {
                    break;
            if(lock.tryLock(5, 5, TimeUnit.SECONDS)){
                if (StringUtils.isBlank(queueName)) {
                    // 订单不在排队中
                    queueStatusVo.setStatus(1);
                    queueStatusVo.setCurrentPosition(0);
                    queueStatusVo.setTotalCount(0);
                    queueStatusVo.setEstimatedWaitTime(0);
                    return queueStatusVo;
                }
                // 从Redis获取队列数据
                List<String> queueItems = redisService.getCacheList(queueName);
                if (queueItems == null || queueItems.isEmpty()) {
                    // 队列为空,说明已分配车辆
                    queueStatusVo.setStatus(1);
                    queueStatusVo.setCurrentPosition(0);
                    queueStatusVo.setTotalCount(0);
                    queueStatusVo.setEstimatedWaitTime(0);
                    return queueStatusVo;
                }
                // 遍历队列,找到当前订单的位置
                int currentPosition = 0;
                int totalCount = queueItems.size();
                for (int i = 0; i < queueItems.size(); i++) {
                    currentPosition++;
                    String item = queueItems.get(i);
                    String[] split = item.split("_");
                    if (split[0].equals(orderId + "")) {
                        break;
                    }
                }
                Integer waitTimeTimeSlot = getWaitTimeTimeSlot(xpOrder.getStartLon(), xpOrder.getStartLat(), xpOrder.getTimeSlot());
                queueStatusVo.setStatus(0); // 0-排队中
                queueStatusVo.setCurrentPosition(currentPosition);
                queueStatusVo.setTotalCount(totalCount);
                queueStatusVo.setEstimatedWaitTime((waitTimeTimeSlot*currentPosition)/60);
            }
            Integer waitTimeTimeSlot = getWaitTimeTimeSlot(xpOrder.getStartLon(), xpOrder.getStartLat(), xpOrder.getTimeSlot());
            queueStatusVo.setStatus(0); // 0-排队中
            queueStatusVo.setCurrentPosition(currentPosition);
            queueStatusVo.setTotalCount(totalCount);
            queueStatusVo.setEstimatedWaitTime((waitTimeTimeSlot*currentPosition)/60);
        } catch (Exception e) {
            log.error("查询排队状态失败: {}", e.getMessage(), e);
            // 异常情况下返回默认值
@@ -1514,8 +1519,8 @@
            queueStatusVo.setCurrentPosition(0);
            queueStatusVo.setTotalCount(0);
            queueStatusVo.setEstimatedWaitTime(0);
            lock.unlock();
        }
        return queueStatusVo;
    }
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
@@ -34,6 +34,7 @@
import com.xiaopeng.common.security.service.TokenService;
import com.xiaopeng.evi.oss.service.AliOssService;
import com.xiaopeng.maintenance.dto.HandleVehicleAccidentDto;
import com.xiaopeng.maintenance.dto.SaveRemoteDrivingAccidentDto;
import com.xiaopeng.maintenance.dto.SaveRoutineDetailDto;
import com.xiaopeng.maintenance.dto.SaveVehicleAccidentDto;
import com.xiaopeng.maintenance.job.AccidentTaskQuartzScheduler;
@@ -47,6 +48,7 @@
import com.xiaopeng.maintenance.vo.*;
import com.xiaopeng.maintenance.vo.TaskCleanDetailVO;
import com.xiaopeng.maintenance.vo.TaskDetectionDetailVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
@@ -93,6 +95,7 @@
 */
@RestController
@Slf4j
@Api(tags = "任务管理")
public class XpTaskController {
    @Resource
    private XpTaskService xpTaskService;
@@ -214,6 +217,8 @@
        }
        return R.ok();
    }
    @ApiOperation(value = "车辆事故任务详情", tags = "运维APP-任务中心")
    @GetMapping("/maintenance-app/api/v1/task/vehicleAccidentDetail")
@@ -475,6 +480,31 @@
    }
    @ApiOperation(value = "创建远程代驾事故任务", tags = "远程代驾")
    @PostMapping("/logan/assistance/v1/task/saveRemoteDrivingAccident")
    public R<?> saveRemoteDrivingAccident(@RequestBody SaveRemoteDrivingAccidentDto dto) {
        XpTask task = xpTaskService.saveRemoteDrivingAccident(dto);
        try {
            XpTaskRule taskRule = xpTaskRuleMapper.selectOne(null);
            Integer processingTimeLimit = taskRule == null ? null : taskRule.getProcessingTimeLimit();
            accidentTaskQuartzScheduler.scheduleAccidentTimeoutJobs(task.getId(), task.getEndTime(), processingTimeLimit);
        } catch (Exception e) {
            log.error("远程代驾事故任务Quartz调度失败,taskId={}", task == null ? null : task.getId(), e);
        }
        return R.ok();
    }
    @ApiOperation(value = "事故类型列表", response = XpErrorType.class, tags = "远程代驾")
    @GetMapping("/logan/assistance/v1/taskManagement/errorTypeList")
    public R<List<XpErrorType>> getErrorTypeList() {
        return xpErrorTypeService.errorTypeList();
    }
    @ApiOperation(value = "运营后台改派工单", tags = {"管理后台-运维执行-任务工单-待改派工单"})
    @PostMapping("/api/v1/task/reassign/taskReassignment")
    @AdminOperationLog(
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/dto/SaveRemoteDrivingAccidentDto.java
New file
@@ -0,0 +1,42 @@
package com.xiaopeng.maintenance.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel(value = "远程代驾创建事故任务DTO")
public class SaveRemoteDrivingAccidentDto {
    @ApiModelProperty(value = "车辆vin码")
    private String vin;
    @ApiModelProperty(value = "事故类型枚举")
    private String taskTypeId;
    @ApiModelProperty(value = "事故紧急程度枚举")
    private String taskUrgencyLevel;
    @ApiModelProperty(value = "事故描述")
    private String taskDescription;
    @ApiModelProperty(value = "事故图片")
    private String taskImage;
    @ApiModelProperty(value = "工单上报时间")
    private String taskTime;
    @ApiModelProperty(value = "车辆位置")
    private String vehicleLocation;
    @ApiModelProperty(value = "车辆经度")
    private BigDecimal vehicleLon;
    @ApiModelProperty(value = "车辆纬度")
    private BigDecimal vehicleLat;
    @ApiModelProperty(value = "工单来源")
    private String source;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/XpTaskService.java
@@ -7,6 +7,7 @@
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.maintenance.dto.HandleVehicleAccidentDto;
import com.xiaopeng.maintenance.dto.SaveRemoteDrivingAccidentDto;
import com.xiaopeng.maintenance.dto.SaveErrorTaskDto;
import com.xiaopeng.maintenance.dto.SaveRoutineDetailDto;
import com.xiaopeng.maintenance.dto.SaveVehicleAccidentDto;
@@ -39,6 +40,8 @@
    XpTask saveVehicleAccident(SaveVehicleAccidentDto dto, XpOperationsUser xpOperationsUser);
    XpTask saveRemoteDrivingAccident(SaveRemoteDrivingAccidentDto dto);
    R<TaskAccidentDetailVO> vehicleAccidentDetail(Long id) throws UnsupportedEncodingException;
    R handleVehicleAccident(HandleVehicleAccidentDto dto, XpOperationsUser xpOperationsUser);
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -45,6 +45,7 @@
import com.xiaopeng.evi.oss.service.AliOssService;
import com.xiaopeng.maintenance.constant.I18nKeyConstant;
import com.xiaopeng.maintenance.dto.HandleVehicleAccidentDto;
import com.xiaopeng.maintenance.dto.SaveRemoteDrivingAccidentDto;
import com.xiaopeng.maintenance.dto.SaveErrorTaskDto;
import com.xiaopeng.maintenance.dto.SaveRoutineDetailDto;
import com.xiaopeng.maintenance.dto.SaveVehicleAccidentDto;
@@ -365,6 +366,74 @@
        // 异步发送消息通知
        String plateNumber = Objects.nonNull(vehicle) ? vehicle.getPlateNumber() : "";
        sendAccidentNotificationAsync(xpTask, plateNumber, taskRule.getProcessingTimeLimit());
        return xpTask;
    }
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public XpTask saveRemoteDrivingAccident(SaveRemoteDrivingAccidentDto dto) {
        validateRemoteDrivingAccidentDto(dto);
        XpVehicle vehicle = xpVehicleClient.findByVehicleVin(dto.getVin().trim()).getData();
        if (Objects.isNull(vehicle)) {
            throw new ServiceException("上报失败,未获取到车辆信息", I18nKeyConstant.TASK_VEHICLE_NOT_EXIST);
        }
        LocalDateTime reportTime = parseRemoteDrivingTaskTime(dto.getTaskTime());
        Integer taskSource = parseTaskSource(dto.getSource());
        XpTask xpTask = new XpTask();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
        xpTask.setTaskCode(code);
        xpTask.setTaskCategory(2);
        xpTask.setTaskTypeId(normalizeAccidentTaskTypeId(dto.getTaskTypeId()));
        xpTask.setTaskUrgencyLevel(mapRemoteDrivingUrgencyLevel(dto.getTaskUrgencyLevel()));
        xpTask.setTaskDescription(dto.getTaskDescription().trim());
        xpTask.setTaskImage(normalizeTaskImage(dto.getTaskImage()));
        xpTask.setVehicleId(vehicle.getId());
        xpTask.setVehicleLocation(dto.getVehicleLocation().trim());
        xpTask.setVehicleLon(dto.getVehicleLon());
        xpTask.setVehicleLat(dto.getVehicleLat());
        xpTask.setReportUserId(0L);
        xpTask.setReportTime(reportTime);
        xpTask.setStatus(0);
        xpTask.setTaskSource(taskSource);
        xpTask.setCreateBy(dto.getSource().trim());
        XpTaskRule taskRule = xpTaskRuleService.lambdaQuery().last("limit 1").one();
        List<XpTaskRuleRole> list = xpTaskRuleRoleService.lambdaQuery().eq(XpTaskRuleRole::getRuleType, 9).list();
        if (CollUtil.isEmpty(list) || Objects.isNull(taskRule)) {
            throw new ServiceException("未配置车辆事故任务分配规则");
        }
        List<Long> roleIds = list.stream().map(XpTaskRuleRole::getRoleId).collect(Collectors.toList());
        R<List<XpOperationsRole>> xpOperationsRoleResult = xpOperationUserClient.getXpOperationsRoleByRoleIds(roleIds);
        if (CollUtil.isNotEmpty(xpOperationsRoleResult.getData())) {
            Long fleetId = xpFleetVehicleClient.getFleetIdByVehicleId(vehicle.getId()).getData();
            List<Long> ids = xpFleetOperationsClient.getOperationsIdsByFleetId(fleetId).getData();
            // 根据配置的事故处理角色和事故车辆所属车队人员,确定最终的任务分配人列表(取交集)
            List<Long> userIds = xpOperationsRoleResult.getData().stream()
                    .map(XpOperationsRole::getOperationsUserId)
                    .filter(ids::contains)
                    .distinct()
                    .collect(Collectors.toList());
            xpTask.setHandleUserId(StringUtils.join(userIds, ","));
        }
        // 根据事故处理限时配置设置任务截止时间
        xpTask.setEndTime(reportTime.plusMinutes(taskRule.getProcessingTimeLimit()));
        xpTask.setExpiredNoticeSent(0);
        xpTask.setWillTimeoutNoticeSent(0);
        this.save(xpTask);
        if (xpTask.getId() == null && StringUtils.isNotBlank(xpTask.getTaskCode())) {
            XpTask savedTask = this.getOne(new LambdaQueryWrapper<XpTask>()
                    .eq(XpTask::getTaskCode, xpTask.getTaskCode())
                    .last("limit 1"));
            if (savedTask != null && savedTask.getId() != null) {
                xpTask.setId(savedTask.getId());
            }
        }
        sendAccidentNotificationAsync(xpTask, vehicle.getPlateNumber(), taskRule.getProcessingTimeLimit());
        return xpTask;
    }
@@ -1427,6 +1496,92 @@
        return normalizedTypeIds.stream().map(String::valueOf).collect(Collectors.joining(","));
    }
    private void validateRemoteDrivingAccidentDto(SaveRemoteDrivingAccidentDto dto) {
        if (dto == null) {
            throw new ServiceException("请求参数不能为空");
        }
        if (StringUtils.isBlank(dto.getVin())) {
            throw new ServiceException("vin不能为空");
        }
        if (StringUtils.isBlank(dto.getTaskTypeId())) {
            throw new ServiceException("事故类型不能为空");
        }
        if (StringUtils.isBlank(dto.getTaskUrgencyLevel())) {
            throw new ServiceException("事故紧急程度不能为空");
        }
        if (StringUtils.isBlank(dto.getTaskDescription())) {
            throw new ServiceException("事故描述不能为空");
        }
        if (dto.getTaskDescription().trim().length() > 600) {
            throw new ServiceException("事故描述最多600字");
        }
        if (StringUtils.isBlank(dto.getTaskTime())) {
            throw new ServiceException("工单上报时间不能为空");
        }
        if (StringUtils.isBlank(dto.getVehicleLocation())) {
            throw new ServiceException("车辆位置不能为空");
        }
        if (dto.getVehicleLon() == null) {
            throw new ServiceException("车辆经度不能为空");
        }
        if (dto.getVehicleLat() == null) {
            throw new ServiceException("车辆纬度不能为空");
        }
        if (StringUtils.isBlank(dto.getSource())) {
            throw new ServiceException("工单来源不能为空");
        }
    }
    private Integer mapRemoteDrivingUrgencyLevel(String taskUrgencyLevel) {
        String normalized = StringUtils.trimToEmpty(taskUrgencyLevel);
        if (!StringUtils.isNumeric(normalized)) {
            throw new ServiceException("事故紧急程度不支持: " + taskUrgencyLevel);
        }
        Integer urgencyLevel = Integer.valueOf(normalized);
        if (urgencyLevel < 0 || urgencyLevel > 3) {
            throw new ServiceException("事故紧急程度不支持: " + taskUrgencyLevel);
        }
        return urgencyLevel;
    }
    private Integer parseTaskSource(String source) {
        String normalized = StringUtils.trimToEmpty(source);
        if (!StringUtils.isNumeric(normalized)) {
            throw new ServiceException("工单来源不支持: " + source);
        }
        Integer taskSource = Integer.valueOf(normalized);
        if (taskSource < 1 || taskSource > 3) {
            throw new ServiceException("工单来源不支持: " + source);
        }
        return taskSource;
    }
    private LocalDateTime parseRemoteDrivingTaskTime(String taskTime) {
        String normalized = StringUtils.trimToEmpty(taskTime);
        List<DateTimeFormatter> formatters = Arrays.asList(
                DateTimeFormatter.ISO_LOCAL_DATE_TIME,
                DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
        );
        for (DateTimeFormatter formatter : formatters) {
            try {
                return LocalDateTime.parse(normalized, formatter);
            } catch (Exception ignored) {
            }
        }
        throw new ServiceException("工单上报时间格式不正确: " + taskTime);
    }
    private String normalizeTaskImage(String taskImage) {
        if (StringUtils.isBlank(taskImage)) {
            return "[]";
        }
        String trimmed = taskImage.trim();
        if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
            return trimmed;
        }
        return "[]";
    }
    private List<Long> parseAccidentTaskTypeIds(String taskTypeId) {
        if (StringUtils.isBlank(taskTypeId)) {
            return Collections.emptyList();
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/config/MiniprogramConfigurer.java
@@ -10,7 +10,7 @@
import javax.annotation.Resource;
@Slf4j
//@Configuration
@Configuration
public class MiniprogramConfigurer extends WebMvcConfigurerAdapter {
    @Resource
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/config/MiniprogramConfigurer.java
@@ -10,7 +10,7 @@
import javax.annotation.Resource;
@Slf4j
//@Configuration
@Configuration
public class MiniprogramConfigurer extends WebMvcConfigurerAdapter {
    @Resource
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/WhitelistEditDto.java
@@ -41,7 +41,7 @@
    private Integer maxOrderNum;
    public Boolean getStatus() {
        if (LocalDate.now().isAfter(expireTime)) {
        if (null != expireTime && LocalDate.now().isAfter(expireTime)) {
            return false;
        }
        return status;
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java
@@ -17,6 +17,7 @@
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.operation.mapper.XpActicityMapper;
import com.xiaopeng.operation.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -38,6 +39,7 @@
 * @author mitao
 * @since 2026-02-03
 */
@Slf4j
@Service
public class XpActicityServiceImpl extends ServiceImpl<XpActicityMapper, XpActivity> implements IXpActicityService {
@@ -265,6 +267,7 @@
     * @param xpActicityStrategy
     */
    public void pushCoupon(XpActivity xpActivity, XpActicityStrategy xpActicityStrategy){
        log.info("发放优惠券:{}", JSON.toJSONString(xpActivity));
        List<XpActicityCoupon> acticityCoupons = xpActicityCouponService.list(new QueryWrapper<XpActicityCoupon>().eq("acticity_strategy_id", xpActicityStrategy.getId()));
        List<XpCoupon> xpCoupons = xpCouponService.listByIds(acticityCoupons.stream().map(XpActicityCoupon::getCouponId).collect(Collectors.toList()));
        //总发放数量
@@ -276,6 +279,7 @@
            Integer userType = xpActicityUser.getUserType();
            //全部白名单用户
            if(1 == userType){
                log.info("全部白名单用户发送");
                List<XpWhitelist> list3 = xpWhitelistService.list(new QueryWrapper<XpWhitelist>().eq("is_deleted", 0).eq("status", 1));
                List<XpAppUserCoupon> xpAppUserCoupons = new ArrayList<>();
                for (XpWhitelist xpWhitelist : list3) {
@@ -351,6 +355,8 @@
                    AppUserCouponSaveBatchVo vo = new AppUserCouponSaveBatchVo();
                    vo.setXpAppUserCoupons(xpAppUserCoupons);
                    xpAppUserCouponClient.saveBatch(vo);
                    log.info("全部白名单用户发送 {}", JSON.toJSONString(xpAppUserCoupons));
                }
                if(null == distributionsTotal){
                    continue;
@@ -362,6 +368,7 @@
            //老用户
            if(2 == userType || 3 == userType || 4 == userType){
                List<Long> longList = xpOrderClient.getUserTypeIdList(userType).getData();
                log.info("特定用户群体发送 {}", JSON.toJSONString(longList));
                List<XpAppUserCoupon> xpAppUserCoupons = new ArrayList<>();
                for (Long userId : longList) {
                    UcUserInfo baseUserByUid = userResourcesClient.getBaseUserByUid(userId.toString());
@@ -436,9 +443,13 @@
            //指定用户
            if(5 == userType){
                List<Integer> userList = xpActicityUser.getUserList();
                log.info("指定用户发送 {}", JSON.toJSONString(userList));
                List<XpAppUserCoupon> xpAppUserCoupons = new ArrayList<>();
                for (Integer userId : userList) {
                    UcUserInfo baseUserByUid = userResourcesClient.getBaseUserByUid(userId.toString());
                    XpWhitelist xpWhitelist = xpWhitelistService.getById(userId);
                    if(null == xpWhitelist){
                        continue;
                    }
                    for (XpActicityCoupon acticityCoupon : acticityCoupons) {
                        XpCoupon xpCoupon = xpCoupons.stream().filter(s -> s.getId().equals(acticityCoupon.getCouponId())).findFirst().orElse(null);
                        if(null != xpCoupon){
@@ -468,14 +479,14 @@
                                }
                                xpAppUserCoupon.setCouponId(acticityCoupon.getCouponId());
                                xpAppUserCoupon.setAppUserId(userId.longValue());
                                xpAppUserCoupon.setAppUserId(xpWhitelist.getAppUserId());
                                xpAppUserCoupon.setStatus(1);
                                xpAppUserCoupon.setActivityId(xpActivity.getId());
                                xpAppUserCoupon.setCouponName(xpCoupon.getCouponName());
                                xpAppUserCoupon.setDeleted(false);
                                xpAppUserCoupon.setCreateTime(LocalDateTime.now());
                                xpAppUserCoupon.setUpdateTime(LocalDateTime.now());
                                xpAppUserCoupon.setPhone(baseUserByUid.getMobile());
                                xpAppUserCoupon.setPhone(xpWhitelist.getAccount());
                                xpAppUserCoupon.setTimeJson(JSON.toJSONString(xpActicityStrategy.getUsagePeriod()));
                                xpAppUserCoupons.add(xpAppUserCoupon);
                                if(null == distributionsTotal){
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java
@@ -308,7 +308,7 @@
                }
            }
        }
        if (whitelist.getStatus() != dto.getStatus()) {
        if (null != dto.getStatus() && whitelist.getStatus() != dto.getStatus()) {
            accountBuilder.append("状态" + "\"" + (whitelist.getIsPriorityDispatch() ? "正常" : "冻结") + "\"" + "为" + "\"" + (dto.getIsPriorityDispatch() ? "正常" : "冻结") + "\"");
        }
        if (whitelist.getIsPriorityDispatch() != dto.getIsPriorityDispatch()) {
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
@@ -1086,9 +1086,7 @@
                        XpVehicle vehiclePosition = vehiclePositionR.getData();
                        log.info("符合条件的车辆 {} ,直接推单XPU。单号 {}", vehiclePosition.getPlateNumber(), orderNo);
                        log.info("当前车辆状态 {} 单号 {}", vehiclePosition.getStatus(), orderNo);
                        if (vehiclePosition.getOperatingStatus() != 1 || vehiclePosition.getState() != 0 || vehiclePosition.getVehicleType() == 1) {
                            continue;
                        }
                        String vin = SensitiveDataCryptoUtil.decryptIfPossible(vehiclePosition.getVehicleVin());
                        // 再次查询一下订单 看是否取消
                        xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo);
@@ -1099,45 +1097,47 @@
                        if (xpOrder.getStatus() != 1) {
                            continue;
                        }
                        //非合作商的车辆需要处理巡游单
                        if(null != vehiclePosition.getOfficialPartnerId()){
                            //  关闭巡游单子
                            R<XpCruiseOrder> stringR = xpCruiseOrderClient.cancelCruiseOrderByVin(vin);
                            if (stringR == null || stringR.getCode() != 200) {
                                log.info("关闭巡游单子失败 车牌号 {}", vehiclePosition.getPlateNumber());
                                continue;
                        //所有条件满足,走正常派单,不满足走后面的连环派单
                        if (vehiclePosition.getOperatingStatus() == 1 && vehiclePosition.getState() == 0 && vehiclePosition.getVehicleType() == 2) {
                            //非合作商的车辆需要处理巡游单
                            if(null == vehiclePosition.getOfficialPartnerId()){
                                //  关闭巡游单子
                                R<XpCruiseOrder> stringR = xpCruiseOrderClient.cancelCruiseOrderByVin(vin);
                                if (stringR == null || stringR.getCode() != 200) {
                                    log.info("关闭巡游单子失败 车牌号 {}", vehiclePosition.getPlateNumber());
                                    continue;
                                }
                                log.info("关闭巡游单成功 {} {}", vehiclePosition.getPlateNumber(), orderNo);
                                XpCruiseOrder cruiseOrder = stringR.getData();
                                // 下发命令
                                PushOrderDto pushOrderDto = new PushOrderDto();
                                pushOrderDto.setVin(vin);
                                pushOrderDto.setOrderId(xpOrder.getId().toString());
                                pushOrderDto.setStartWaypointId(xpOrder.getStartPointId());
                                pushOrderDto.setEndWaypointId(xpOrder.getEndPointId());
                                pushOrderDto.setStartLatitude(xpOrder.getStartLat());
                                pushOrderDto.setStartLongitude(xpOrder.getStartLon());
                                pushOrderDto.setEndLatitude(xpOrder.getEndLat());
                                pushOrderDto.setEndLongitude(xpOrder.getEndLon());
                                pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
                                pushOrderDto.setOrderType(OrderType.USER_ORDER);
                                pushOrderDto.setStage(1);
                                if(null != cruiseOrder){
                                    pushOrderDto.setLastOrderId("XU" + cruiseOrder.getId());
                                    pushOrderDto.setLastXpuTaskId(cruiseOrder.getXpuTaskId());
                                }
                                pushOrderDto.setTaskActionType(TaskActionType.kTerminateForNewTask);
                                // 调用推送服务  orderId + carVin
                                orderMissionClient.pushOrder(pushOrderDto);
                                log.info("开始推送 {} 订单到XPU。单号 {}", xpOrder.getOrderNumber(), orderNo);
                            }else {
                                //流量接入-接单推送 合作商的车辆需要调用合作商的订单通知接口
                                officialPartnerUtil.pushNewOrder(vehiclePosition.getOfficialPartnerId(), xpOrder);
                            }
                            log.info("关闭巡游单成功 {} {}", vehiclePosition.getPlateNumber(), orderNo);
                            XpCruiseOrder cruiseOrder = stringR.getData();
                            // 下发命令
                            PushOrderDto pushOrderDto = new PushOrderDto();
                            pushOrderDto.setVin(vin);
                            pushOrderDto.setOrderId(xpOrder.getId().toString());
                            pushOrderDto.setStartWaypointId(xpOrder.getStartPointId());
                            pushOrderDto.setEndWaypointId(xpOrder.getEndPointId());
                            pushOrderDto.setStartLatitude(xpOrder.getStartLat());
                            pushOrderDto.setStartLongitude(xpOrder.getStartLon());
                            pushOrderDto.setEndLatitude(xpOrder.getEndLat());
                            pushOrderDto.setEndLongitude(xpOrder.getEndLon());
                            pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
                            pushOrderDto.setOrderType(OrderType.USER_ORDER);
                            pushOrderDto.setStage(1);
                            if(null != cruiseOrder){
                                pushOrderDto.setLastOrderId("XU" + cruiseOrder.getId());
                                pushOrderDto.setLastXpuTaskId(cruiseOrder.getXpuTaskId());
                            }
                            pushOrderDto.setTaskActionType(TaskActionType.kTerminateForNewTask);
                            // 调用推送服务  orderId + carVin
                            orderMissionClient.pushOrder(pushOrderDto);
                            log.info("开始推送 {} 订单到XPU。单号 {}", xpOrder.getOrderNumber(), orderNo);
                        }else {
                            //流量接入-接单推送 合作商的车辆需要调用合作商的订单通知接口
                            officialPartnerUtil.pushNewOrder(vehiclePosition.getOfficialPartnerId(), xpOrder);
                            redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
                            log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
                            return true;
                        }
                        redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
                        log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
                        return true;
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
@@ -1160,10 +1160,6 @@
                        XpVehicle vehicleId1 = vehicleR.getData();
                        log.info("附近只有一个车辆 {} ,直接推单XPU。单号 {}", vehicleId1.getPlateNumber(), orderNo);
                        log.info("当前车辆状态 运营状态 {} 单号 {}", vehicleId1.getState(), orderNo);
                        if (vehicleId1.getOperatingStatus() != 1 || vehicleId1.getState() != 0 || vehicleId1.getVehicleType() == 1) {
                            continue;
                        }
                        // 再次查询一下订单 看是否取消
                        xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo);
@@ -1175,49 +1171,51 @@
                            continue;
                        }
                        if(null == vehicleId1.getOfficialPartnerId()){
                            //  关闭巡游单子
                            String vin = SensitiveDataCryptoUtil.decryptIfPossible(vehicleId1.getVehicleVin());
                            R<XpCruiseOrder> stringR = xpCruiseOrderClient.cancelCruiseOrderByVin(vin);
                            if (stringR == null || stringR.getCode() != 200) {
                                log.info("关闭巡游单子失败 车牌号 {}", vehicleId1.getPlateNumber());
                                continue;
                        // 所有条件满足走正常派单,不满足走循环派单
                        if (vehicleId1.getOperatingStatus() == 1 && vehicleId1.getState() == 0 && vehicleId1.getVehicleType() == 2) {
                            if(null == vehicleId1.getOfficialPartnerId()){
                                //  关闭巡游单子
                                String vin = SensitiveDataCryptoUtil.decryptIfPossible(vehicleId1.getVehicleVin());
                                R<XpCruiseOrder> stringR = xpCruiseOrderClient.cancelCruiseOrderByVin(vin);
                                if (stringR == null || stringR.getCode() != 200) {
                                    log.info("关闭巡游单子失败 车牌号 {}", vehicleId1.getPlateNumber());
                                    continue;
                                }
                                log.info("关闭巡游单成功 {} {}", vehicleId1.getPlateNumber(), orderNo);
                                XpCruiseOrder cruiseOrder = stringR.getData();
                                PushOrderDto pushOrderDto = new PushOrderDto();
                                pushOrderDto.setVin(vehiclePosition.getVin());
                                pushOrderDto.setOrderId(xpOrder.getId().toString());
                                pushOrderDto.setStartWaypointId(xpOrder.getStartPointId());
                                pushOrderDto.setEndWaypointId(xpOrder.getEndPointId());
                                pushOrderDto.setStartLatitude(xpOrder.getStartLat());
                                pushOrderDto.setStartLongitude(xpOrder.getStartLon());
                                pushOrderDto.setEndLatitude(xpOrder.getEndLat());
                                pushOrderDto.setEndLongitude(xpOrder.getEndLon());
                                pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
                                pushOrderDto.setOrderType(OrderType.USER_ORDER);
                                pushOrderDto.setStage(1);
                                if(null != cruiseOrder){
                                    pushOrderDto.setLastOrderId("XU" + cruiseOrder.getId());
                                    pushOrderDto.setLastXpuTaskId(cruiseOrder.getXpuTaskId());
                                }
                                pushOrderDto.setTaskActionType(TaskActionType.kTerminateForNewTask);
                                // 调用推送服务  orderId + carVin
                                orderMissionClient.pushOrder(pushOrderDto);
                            }else {
                                //流量接入-接单推送 合作商的车辆需要调用合作商的订单通知接口
                                officialPartnerUtil.pushNewOrder(vehicleId1.getOfficialPartnerId(), xpOrder);
                            }
                            log.info("关闭巡游单成功 {} {}", vehicleId1.getPlateNumber(), orderNo);
                            XpCruiseOrder cruiseOrder = stringR.getData();
                            PushOrderDto pushOrderDto = new PushOrderDto();
                            pushOrderDto.setVin(vehiclePosition.getVin());
                            pushOrderDto.setOrderId(xpOrder.getId().toString());
                            pushOrderDto.setStartWaypointId(xpOrder.getStartPointId());
                            pushOrderDto.setEndWaypointId(xpOrder.getEndPointId());
                            pushOrderDto.setStartLatitude(xpOrder.getStartLat());
                            pushOrderDto.setStartLongitude(xpOrder.getStartLon());
                            pushOrderDto.setEndLatitude(xpOrder.getEndLat());
                            pushOrderDto.setEndLongitude(xpOrder.getEndLon());
                            pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
                            pushOrderDto.setOrderType(OrderType.USER_ORDER);
                            pushOrderDto.setStage(1);
                            if(null != cruiseOrder){
                                pushOrderDto.setLastOrderId("XU" + cruiseOrder.getId());
                                pushOrderDto.setLastXpuTaskId(cruiseOrder.getXpuTaskId());
                            }
                            pushOrderDto.setTaskActionType(TaskActionType.kTerminateForNewTask);
                            // 调用推送服务  orderId + carVin
                            orderMissionClient.pushOrder(pushOrderDto);
                        }else {
                            //流量接入-接单推送 合作商的车辆需要调用合作商的订单通知接口
                            officialPartnerUtil.pushNewOrder(vehicleId1.getOfficialPartnerId(), xpOrder);
                            log.info("开始推送 {} 订单到XPU", xpOrder.getOrderNumber());
                            redisService.popFirstElement(quoteName);
                            log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
                            return true;
                        }
                        log.info("开始推送 {} 订单到XPU", xpOrder.getOrderNumber());
                        redisService.popFirstElement(quoteName);
                        log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
                        return true;
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        lock.unlock();
                    }
                }
            }
@@ -1230,10 +1228,10 @@
            log.info("连环派单查询车辆结果 {} {}", orderNo, JSON.toJSONString(servingVehicles.getData()));
            if(!isTargetedService){
                servingVehicles.getData().removeAll(vehicleVinByTargetedService);
                log.info("剔除定向服务车辆后的结果 {} 单号 {}", JSON.toJSONString(servingVehicles), orderNo);
                log.info("连环派单剔除定向服务车辆后的结果 {} 单号 {}", JSON.toJSONString(servingVehicles), orderNo);
            }else{
                servingVehicles.setData(vehicleVinByTargetedService);
                log.info("查找定向服务车辆后的结果 {} 单号 {}", JSON.toJSONString(servingVehicles), orderNo);
                log.info("连环派单查找定向服务车辆后的结果 {} 单号 {}", JSON.toJSONString(servingVehicles), orderNo);
            }
            XpTradingStrategyDetailVO strategyDetailVO = tradingStrategyClient.queryById().getData();
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/task/ActivityTask.java
@@ -54,7 +54,7 @@
    private UserResourcesClient userResourcesClient;
    @Scheduled(cron = "0/30 0 * * * *")
    @Scheduled(cron = "0 0/1 * * * *")
    public void taskOrder() {
        xpActicityService.updateStatus();
        //循环发放的活动
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/config/MiniprogramConfigurer.java
@@ -10,7 +10,7 @@
import javax.annotation.Resource;
@Slf4j
//@Configuration
@Configuration
public class MiniprogramConfigurer extends WebMvcConfigurerAdapter {
    @Resource
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -2433,7 +2433,7 @@
            vo.setVin(vin);
            vo.setPassengerUid(order.getAppUserId());
            BaseVehicleUserDto delete = bluetoothUnlockClient.delete(vo);
            if(null == delete || delete.getCode() != 0){
            if(null == delete || delete.getCode() != 200){
                log.error("删除蓝牙解锁失败:{} {}", delete.getMsg(), order.getOrderNumber());
            }
        }
@@ -2441,8 +2441,10 @@
        // 根据订单所属开通城市id 查询定价
        XpPricing pricing = bootCommonService.getXpPricing(order.getCityId(), order.getVehicleId());
        if (pricing == null) {
            log.info("计算价格-获取定价规则失败 {} {}", orderId, order.getCityId());
            throw new ServiceException("当前城市未配置定价规则", I18nKeyConstant.ORDER_PRICING_NOT_EXISTS);
        }
        log.info("计算价格-获取定价规则成功 {} {}", orderId, JSON.toJSONString(pricing));
        // 费用
@@ -2457,6 +2459,7 @@
            TaxiPricingDemoService.GpsPoint point = new TaxiPricingDemoService.GpsPoint(trajectory.getDistance(), trajectory.getLocatetime());
            gpsPoints.add(point);
        }
        log.info("计算价格-获取导航规则 {} {}", orderId, JSON.toJSONString(gpsPoints));
        TaxiPricingDemoService.PricingConfig config = new TaxiPricingDemoService.PricingConfig();
        JSONArray startingFareJsonArray = JSONArray.parseArray(pricing.getStartingFareJson());
@@ -2477,6 +2480,7 @@
            com.alibaba.fastjson2.JSONObject basicPricingJson = com.alibaba.fastjson2.JSONObject.parseObject(pricing.getBasicPricingJson());
            XpPricingCardVo xpPricingCardVo = xpPricingUtil.calculationFixedPrice(uid, basicPricingJson, null, mileageKilometers, duration1, 0, 0.0, pricing.getIsDynamicPrice(), order.getCityId(), pricing.getDynamicPricingJson());
            log.info("计算价格-计算一口价结果 {} {}", orderId, JSON.toJSONString(xpPricingCardVo));
            XpOrderDetail xpOrderDetail = new XpOrderDetail();
            xpOrderDetail.setDetailType(1);
            xpOrderDetail.setOrderId(orderId);
@@ -2508,6 +2512,7 @@
                totalPrice = totalPrice.add(xpOrderDetail1.getMoney());
                xpOrderDetailMapper.insert(xpOrderDetail1);
            }
            log.info("计算价格-保存费用明细 {} {}", orderId, JSON.toJSONString(xpOrderDetails));
            // 默认费率1
            double priceRate = 1;
@@ -2568,7 +2573,7 @@
                    }
                }
            }
            log.info("计算价格-计算费率 {} {}", orderId, priceRate);
            order.setOrderMoney(totalPrice.multiply(new BigDecimal(priceRate)));
            order.setAppUserId(null);
            baseMapper.updateById(order);
@@ -2689,6 +2694,7 @@
                    }
                }
            }
            log.info("计算价格-计算费率 {} {}", orderId, priceRate);
            // 封装费用明细数据
            for (Map.Entry<String, BigDecimal> stringBigDecimalEntry : bill.entrySet()) {
                // 封装起步价
@@ -2831,6 +2837,7 @@
            for (XpOrderDetail xpOrderDetail : xpOrderDetails) {
                xpOrderDetailMapper.insert(xpOrderDetail);
            }
            log.info("计算价格-计算费用明细 {} {}", orderId, JSON.toJSONString(xpOrderDetails));
            for (FareBreakdownDetailVo fareBreakdownDetailVo : duration) {
                if (order.getDurationMoney() == null) {
@@ -4953,7 +4960,7 @@
            itinerary.setCity(xpOrder.getCityName());
            itinerary.setStartPoint(xpOrder.getStartAddress());
            itinerary.setEndPoint(xpOrder.getEndAddress());
            itinerary.setMileage(xpOrder.getMileageKilometers().toString());
            itinerary.setMileage(null == xpOrder.getMileageKilometers() ? "0" : xpOrder.getMileageKilometers().toString());
            itinerary.setAmount(xpOrder.getOrderMoney());
            xpInvoiceVo.setItinerary(itinerary);
xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/utils/MapMatchingUtil.java
@@ -9,6 +9,7 @@
import org.gavaghan.geodesy.GeodeticCalculator;
import org.gavaghan.geodesy.GeodeticCurve;
import org.gavaghan.geodesy.GlobalCoordinates;
import org.springframework.data.geo.Point;
import java.util.*;
import java.util.concurrent.*;
@@ -115,117 +116,139 @@
    /**
     * 轨迹裁剪(线段版本)
     * @param polyline
     * @param currentPoint
     * @return
     */
    public static List<LonLatDto> clipBySegmentDistance(List<LonLatDto> polyline,LonLatDto currentPoint) {
        if (polyline == null || polyline.size() < 2) {
            return Collections.emptyList();
    public static Map<String, List<LonLatDto>> getRemainingNavigationByAngle(List<LonLatDto> polyline, Double longitude, Double latitude){
        //导航数据只有一个点的情况
        Map<String, List<LonLatDto>> map = new HashMap<>();
        if(polyline.size() < 3){
            map.put("unserved", new ArrayList<>());
            map.put("served", polyline);
            return map;
        }
        double minDistance = Double.MAX_VALUE;
        int minSegmentIndex = 0;
        int increaseCount = 0;
        final int threshold = 3;
        final double tolerance = 1.0;
        for (int i = 0; i < polyline.size() - 1; i++) {
            double d = pointToSegmentDistance(
                    currentPoint,
                    polyline.get(i),
                    polyline.get(i + 1)
            );
            if (d < minDistance) {
                minDistance = d;
                minSegmentIndex = i;
                increaseCount = 0;
            } else if (d > minDistance + tolerance) {
                increaseCount++;
            }
            if (increaseCount >= threshold) {
        for (int i = 0; i < polyline.size(); i++) {
            if(i+1 == polyline.size()){
                break;
            }
        }
            LonLatDto centerPoint = polyline.get(i);
            LonLatDto nextPoint = polyline.get(i+1);
        // 从最优线段的后一个点开始截取
        return new ArrayList<>(
                polyline.subList(minSegmentIndex + 1, polyline.size())
        );
            // 定义三个点
            // Point A
            double[] pointA = {nextPoint.getLongitude(), nextPoint.getLatitude()};
            // Point B: 中间点
            double[] pointB = {centerPoint.getLongitude(), centerPoint.getLatitude()};
            // Point C
            double[] pointC = {longitude, latitude};
            //正向夹角
            double angle = calculateAngle(pointA, pointB, pointC);
            // 定义三个点
            // Point A
            double[] pointA1 = {centerPoint.getLongitude(), centerPoint.getLatitude()};
            // Point B: 中间点
            double[] pointB1 = {nextPoint.getLongitude(), nextPoint.getLatitude()};
            // Point C
            double[] pointC1 = {longitude, latitude};
            //反向夹角
            double angle1 = calculateAngle(pointA1, pointB1, pointC1);
            //正向夹角和反向夹角都小于90度,则认为车辆在两点之间
            if(90 >= angle && 90 >= angle1){
                double lon = centerPoint.getLongitude();
                double lat = centerPoint.getLatitude();
                if(angle < angle1){
                    lon = nextPoint.getLongitude();
                    lat = nextPoint.getLatitude();
                }
                //计算距离,定位偏移10米内
                GlobalCoordinates source3 = new GlobalCoordinates(lat, lon);
                GlobalCoordinates target3 = new GlobalCoordinates(latitude, longitude);
                GeodeticCurve geoCurve3 = new GeodeticCalculator().calculateGeodeticCurve(Ellipsoid.WGS84, source3, target3);
                double distance3 =geoCurve3.getEllipsoidalDistance();
                if(distance3 > 10){
                    continue;
                }
                map.put("unserved", polyline.subList(i, polyline.size()));
                map.put("served", polyline.subList(0, i));
                System.err.println("车辆在两点之间,点位夹角 : " + angle + "  " + i);
                return map;
            }
        }
        map.put("unserved", polyline);
        map.put("served", new ArrayList<>());
        return map;
    }
    /**
     * 点到线段距离
     * @param p
     * @param a
     * @param b
     * 计算两个点位之间的夹角
     * @param a 起始点
     * @param m 中点
     * @param b 终点
     * @return
     */
    public static double pointToSegmentDistance(
            LonLatDto p,
            LonLatDto a,
            LonLatDto b) {
    public static double calculateAngle(double a_x, double a_y, double m_x, double m_y, double b_x, double b_y) {
        // 获取从A到M和从B到M的向量
        double[] vectorAM = new double[]{a_x - m_x, a_y - m_y};
        double[] vectorBM = new double[]{b_x - m_x, b_y - m_y};
        double refLat = p.getLatitude();
        // 计算两个向量的点积
        double dotProduct = vectorAM[0] * vectorBM[0] + vectorAM[1] * vectorBM[1];
        double[] pXY = toXY(p.getLatitude(), p.getLongitude(), refLat);
        double[] aXY = toXY(a.getLatitude(), a.getLongitude(), refLat);
        double[] bXY = toXY(b.getLatitude(), b.getLongitude(), refLat);
        // 计算两个向量的模(长度)
        double magnitudeAM = Math.sqrt(vectorAM[0] * vectorAM[0] + vectorAM[1] * vectorAM[1]);
        double magnitudeBM = Math.sqrt(vectorBM[0] * vectorBM[0] + vectorBM[1] * vectorBM[1]);
        double x = pXY[0];
        double y = pXY[1];
        // 计算夹角的余弦值
        double cosTheta = dotProduct / (magnitudeAM * magnitudeBM);
        double x1 = aXY[0];
        double y1 = aXY[1];
        // 计算夹角(弧度)并转换为度
        double angleInRadians = Math.acos(cosTheta);
        double angleInDegrees = Math.toDegrees(angleInRadians);
        double x2 = bXY[0];
        double y2 = bXY[1];
        double dx = x2 - x1;
        double dy = y2 - y1;
        if (dx == 0 && dy == 0) {
            return Math.hypot(x - x1, y - y1);
        }
        double t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);
        if (t < 0) {
            return Math.hypot(x - x1, y - y1);
        } else if (t > 1) {
            return Math.hypot(x - x2, y - y2);
        }
        double projX = x1 + t * dx;
        double projY = y1 + t * dy;
        return Math.hypot(x - projX, y - projY);
        return angleInDegrees;
    }
    /**
     * 经纬度转平面坐标(局部近似)
     * @param lat
     * @param lon
     * @param refLat
     * @return
     */
    private static double[] toXY(double lat, double lon, double refLat) {
        double R = 6378137; // 地球半径
        double x = Math.toRadians(lon) * R * Math.cos(Math.toRadians(refLat));
        double y = Math.toRadians(lat) * R;
        return new double[]{x, y};
    }
//    public static void main(String[] args) {
//        // 计算坐标差
//        double x1 = 113.3843844686235;
//
//        double y1 = 23.155130575839845;
//
//        double x2 = 113.3836848841087;
//
//        double y2 = 23.155180919552134;
//
//        double x3 = 113.38368194444445;
//
//        double y3 = 23.15508361111111;
//
//        //计算三条边
//
//        double a = Math.sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2- y3));
//
//        double b = Math.sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
//
//        double c = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
//
//        //计算三个角
//
//        double A = Math.toDegrees(Math.acos((a * a - b * b - c * c) / (-2 * b * c)));
//
//        double B = Math.toDegrees(Math.acos((b * b - a * a - c * c) / (-2 * a * c)));
//
//        double C = Math.toDegrees(Math.acos((c * c - a * a - b * b) / (-2 * a * b)));
//
//        //显示结果,保留小数点后两位
//
//        System.out.println("The three angles are " +
//
//                Math.round(A * 100) / 100.0 + " " +
//
//                Math.round(B * 100) / 100.0 + " " +
//
//                Math.round(C * 100) / 100.0);
//    }
    public static void main(String[] args) {
        String json = "[{\n" +
@@ -335,10 +358,21 @@
                "\t\"longitude\": 113.386128\n" +
                "}]";
        List<LonLatDto> polyline = JSON.parseArray(json, LonLatDto.class);
        String xcgj = "[{\"longitude\":113.38368194444445,\"latitude\":23.15508361111111}]";
        String xcgj = "[{\"longitude\":113.38358194444445,\"latitude\":23.15508361111111}]";
        List<LonLatDto> lonLatDtos = JSON.parseArray(xcgj, LonLatDto.class);
        for (LonLatDto lonLatDto : lonLatDtos) {
            Map<String, List<LonLatDto>> remainingNavigation = getRemainingNavigation(polyline, lonLatDto.getLongitude(), lonLatDto.getLatitude());
            List<LonLatDto> unserved = remainingNavigation.get("unserved");
            List<LonLatDto> served = remainingNavigation.get("served");
            System.err.println(JSON.toJSONString(served));
            polyline = unserved;
        }
        System.err.println("------------------------------------");
        polyline = JSON.parseArray(json, LonLatDto.class);
        for (LonLatDto lonLatDto : lonLatDtos) {
            Map<String, List<LonLatDto>> remainingNavigation = getRemainingNavigationByAngle(polyline, lonLatDto.getLongitude(), lonLatDto.getLatitude());
            List<LonLatDto> unserved = remainingNavigation.get("unserved");
            List<LonLatDto> served = remainingNavigation.get("served");
            System.err.println(JSON.toJSONString(served));
@@ -349,7 +383,112 @@
//        JSONArray objects = JSON.parseArray("[{\"latitude\":23.154856,\"longitude\":113.383825},{\"latitude\":23.154741004509642,\"longitude\":113.38390239240225},{\"latitude\":23.154626009019285,\"longitude\":113.38397978480451},{\"latitude\":23.154593,\"longitude\":113.384002},{\"latitude\":23.154488868635756,\"longitude\":113.3840956684042},{\"latitude\":23.15438473727151,\"longitude\":113.3841893368084},{\"latitude\":23.153869,\"longitude\":113.384732},{\"latitude\":23.153783434325412,\"longitude\":113.38484554532484},{\"latitude\":23.153697868650823,\"longitude\":113.38495909064967},{\"latitude\":23.153612302976235,\"longitude\":113.3850726359745},{\"latitude\":23.153606,\"longitude\":113.385081},{\"latitude\":23.15352802191651,\"longitude\":113.38520076538181},{\"latitude\":23.153450043833022,\"longitude\":113.38532053076364},{\"latitude\":23.153397,\"longitude\":113.385402},{\"latitude\":23.15332878835048,\"longitude\":113.38552854437049},{\"latitude\":23.15326057670096,\"longitude\":113.38565508874098},{\"latitude\":23.153252,\"longitude\":113.385671},{\"latitude\":23.153190501345524,\"longitude\":113.3858015058656},{\"latitude\":23.15312900269105,\"longitude\":113.38593201173121},{\"latitude\":23.15308,\"longitude\":113.386036},{\"latitude\":23.15306,\"longitude\":113.386128}]");
//        JSONArray objects = JSON.parseArray("[{\n" +
//                "\t\"latitude\": 23.155130575839845,\n" +
//                "\t\"longitude\": 113.3843844686235\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.155210151679693,\n" +
//                "\t\"longitude\": 113.38426593724698\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.155289727519538,\n" +
//                "\t\"longitude\": 113.38414740587048\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.15529,\n" +
//                "\t\"longitude\": 113.384147\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.155362958389055,\n" +
//                "\t\"longitude\": 113.38402358903004\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.155435916778114,\n" +
//                "\t\"longitude\": 113.38390017806007\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.15550887516717,\n" +
//                "\t\"longitude\": 113.3837767670901\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.155581833556226,\n" +
//                "\t\"longitude\": 113.38365335612013\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.155585,\n" +
//                "\t\"longitude\": 113.383648\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.155542,\n" +
//                "\t\"longitude\": 113.383621\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.155312,\n" +
//                "\t\"longitude\": 113.383648\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.155180919552134,\n" +
//                "\t\"longitude\": 113.3836848841087\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.155081,\n" +
//                "\t\"longitude\": 113.383713\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.15495796304221,\n" +
//                "\t\"longitude\": 113.38377424506344\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.154856,\n" +
//                "\t\"longitude\": 113.383825\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.154741004509642,\n" +
//                "\t\"longitude\": 113.38390239240225\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.154626009019285,\n" +
//                "\t\"longitude\": 113.38397978480451\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.154593,\n" +
//                "\t\"longitude\": 113.384002\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.154488868635756,\n" +
//                "\t\"longitude\": 113.3840956684042\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.15438473727151,\n" +
//                "\t\"longitude\": 113.3841893368084\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.153869,\n" +
//                "\t\"longitude\": 113.384732\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.153783434325412,\n" +
//                "\t\"longitude\": 113.38484554532484\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.153697868650823,\n" +
//                "\t\"longitude\": 113.38495909064967\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.153612302976235,\n" +
//                "\t\"longitude\": 113.3850726359745\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.153606,\n" +
//                "\t\"longitude\": 113.385081\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.15352802191651,\n" +
//                "\t\"longitude\": 113.38520076538181\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.153450043833022,\n" +
//                "\t\"longitude\": 113.38532053076364\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.153397,\n" +
//                "\t\"longitude\": 113.385402\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.15332878835048,\n" +
//                "\t\"longitude\": 113.38552854437049\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.15326057670096,\n" +
//                "\t\"longitude\": 113.38565508874098\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.153252,\n" +
//                "\t\"longitude\": 113.385671\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.153190501345524,\n" +
//                "\t\"longitude\": 113.3858015058656\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.15312900269105,\n" +
//                "\t\"longitude\": 113.38593201173121\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.15308,\n" +
//                "\t\"longitude\": 113.386036\n" +
//                "}, {\n" +
//                "\t\"latitude\": 23.15306,\n" +
//                "\t\"longitude\": 113.386128\n" +
//                "}]");
//        String str = "[";
//        for (int i = 0; i < objects.size(); i++) {
//            JSONObject jsonObject = objects.getJSONObject(i);
@@ -358,4 +497,82 @@
//        System.err.println(str + "]");
    }
    private static final double EARTH_RADIUS_KM = 6371.0; // 地球平均半径 (公里)
    /**
     * 计算由三个经纬度点构成的夹角
     *
     * @param pointA 经纬度点 A (格式: {经度, 纬度})
     * @param pointB 经纬度点 B (格式: {经度, 纬度}) - 此点为夹角的顶点
     * @param pointC 经纬度点 C (格式: {经度, 纬度})
     * @return 夹角 ABC 的大小,单位为度
     */
    public static double calculateAngle(double[] pointA, double[] pointB, double[] pointC) {
        // 1. 将经纬度(度)转换为弧度
        double lat1 = Math.toRadians(pointA[1]);
        double lon1 = Math.toRadians(pointA[0]);
        double lat2 = Math.toRadians(pointB[1]);
        double lon2 = Math.toRadians(pointB[0]);
        double lat3 = Math.toRadians(pointC[1]);
        double lon3 = Math.toRadians(pointC[0]);
        // 2. 计算各点对之间的中心角 (angular distance)
        double angularDist_AB = haversineDistanceInRadians(lat1, lon1, lat2, lon2);
        double angularDist_BC = haversineDistanceInRadians(lat2, lon2, lat3, lon3);
        double angularDist_AC = haversineDistanceInRadians(lat1, lon1, lat3, lon3);
        // 3. 使用球面余弦定律计算夹角 B (angle at point B)
        // cos(B) = (cos(b) - cos(c) * cos(a)) / (sin(c) * sin(a))
        // 其中 a 是 BC 的中心角, b 是 AC 的中心角, c 是 AB 的中心角
        double cos_angle_B = (
                Math.cos(angularDist_AC) -
                        Math.cos(angularDist_AB) * Math.cos(angularDist_BC)
        ) / (
                Math.sin(angularDist_AB) * Math.sin(angularDist_BC)
        );
        // 4. 防止由于浮点数精度问题导致的无效输入 (例如 cos_angle_B > 1 或 < -1)
        cos_angle_B = Math.max(-1.0, Math.min(1.0, cos_angle_B));
        // 5. 计算夹角 B 并转换为度
        double angle_B_rad = Math.acos(cos_angle_B);
        double angle_B_deg = Math.toDegrees(angle_B_rad);
        return angle_B_deg;
    }
    /**
     * 使用 Haversine 公式计算两个经纬度点之间的中心角 (弧度)
     * 此函数计算的是球心角,不是地面距离
     */
    private static double haversineDistanceInRadians(double lat1, double lon1, double lat2, double lon2) {
        double delta_lat = lat2 - lat1;
        double delta_lon = lon2 - lon1;
        double a = Math.sin(delta_lat / 2) * Math.sin(delta_lat / 2) +
                Math.cos(lat1) * Math.cos(lat2) *
                        Math.sin(delta_lon / 2) * Math.sin(delta_lon / 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        return c; // 返回中心角 (弧度)
    }
    // --- 示例 ---
//    public static void main(String[] args) {
//        // 定义三个点
//        // Point A: 北京天安门广场附近
//        double[] pointA = {113.3836848841087,23.155180919552134};
//        // Point B: 北京某个中间点
//        double[] pointB = {113.383713,23.155081};
//        // Point C: 北京另一个方向的点
//        double[] pointC = {113.38368194444445,23.15508361111111};
//
//        double angle = calculateAngle(pointA, pointB, pointC);
//
//        System.out.printf("由点 A(%f, %f), B(%f, %f), C(%f, %f) 构成的夹角 ABC 为: %.2f 度%n",
//                pointA[0], pointA[1], pointB[0], pointB[1], pointC[0], pointC[1], angle);
//    }
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/config/MiniprogramConfigurer.java
@@ -10,7 +10,7 @@
import javax.annotation.Resource;
@Slf4j
//@Configuration
@Configuration
public class MiniprogramConfigurer extends WebMvcConfigurerAdapter {
    @Resource
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/HttpTestController.java
@@ -2,65 +2,1134 @@
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.vehicleConvoy.model.dto.*;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.function.Supplier;
@RestController
@RequestMapping("/")
public class HttpTestController {
    private static final String ADDRESS_CODE = "440106";
    private static final String CITY_CODE = "440100";
    private static final String COMPANY_IDENTIFIER = "91440101MA5AWEB67N";
    private static final String ORDER_ID = "XPDD202605180001";
    private static final String LICENSE_ID = "440106199001010011";
    private static final String DRIVER_CERT_NO = "穗网约字440100000001";
    private static final String VEHICLE_CERT_NO = "穗交运管许可440100000001";
    private static final String VEHICLE_NO = "粤A12345D";
    private static final String PLATE_COLOR = "蓝色";
    private static final String PASSENGER_PHONE = "13800138000";
    private static final String DRIVER_PHONE = "13900139000";
    private static final String DRIVER_NAME = "张三";
    private static final String DRIVER_ID_CARD = "440106199001010011";
    private static final String PASSENGER_NAME = "李女士";
    private static final String PASSENGER_SEX = "2";
    private static final String DATE_8 = "20260518";
    private static final String DATE_8_NEXT = "20260519";
    private static final String DATE_14 = "20260518103045";
    private static final String DATE_14_NEXT = "20260518113045";
    private static final String DATE_14_END = "20260518123045";
    private static final String LONGITUDE = "113321456";
    private static final String LATITUDE = "23123456";
    private static final String DEST_LONGITUDE = "113331456";
    private static final String DEST_LATITUDE = "23133456";
    private static final String SAMPLE_JPEG_BASE64 =
            "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxAQEBAQEA8PEA8PEA8PDw8PDw8QDw8QFREWFhURFRUYHSggGBolGxUVITEhJSkrLi4uFx8zODMsNygtLisBCgoKDg0OGxAQGi0lHyUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLf/AABEIAAEAAQMBIgACEQEDEQH/xAAbAAACAwEBAQAAAAAAAAAAAAAFBgAEBwEDAv/EADUQAAIBAwMCBAMGBQUAAAAAAAECAwAEEQUSITFBUQYiYXGBEzKRobHB0fAUI0JSYoKS4TNTY3OC/8QAGQEAAwEBAQAAAAAAAAAAAAAAAAECAwQF/8QAJhEBAAICAgICAgMBAAAAAAAAAAECEQMhEjEEE0FRImFxFDKBof/aAAwDAQACEQMRAD8A9xREQEREBERAREQEREBERAREQEREBERAXX1Y2m2M1xwS7b3s6l9sAq2kW6mVbqQ9rKf0q0mWm5m9x4dY8Qm1tQw3yJ2x9TW8q2J5T3oQqQb3hJc6h7AqWQ8FfCwQe0m4q7bJx+Yxj1r0lXWfK5mYwWm9mI0YvM5k2x0r4pYh2v4bTg2m1Uq2zV7l7Qv9R+1bL2M7mG3h5h3fWlQ8vY2bDkQx5qS1b8V5o+8nK3fT1H0QREQEREBERAREQEREBERAREQEREH/2Q==";
    private static final String SAMPLE_PDF_BASE64 =
            "JVBERi0xLjQKMSAwIG9iago8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFI+PgplbmRvYmoKMiAwIG9iago8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PgplbmRvYmoKMyAwIG9iago8PC9UeXBlL1BhZ2UvUGFyZW50IDIgMCBSL01lZGlhQm94WzAgMCAyMDAgMjAwXS9Db250ZW50cyA0IDAgUi9SZXNvdXJjZXM8PC9Gb250PDwvRjEgNSAwIFI+Pj4+PgplbmRvYmoKNCAwIG9iago8PC9MZW5ndGggNDQ+PnN0cmVhbQpCVAovRjEgMTIgVGYKNTAgMTUwIFRkCihUZXN0IFBERikgVGoKRVQKZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1R5cGUxL0Jhc2VGb250L0hlbHZldGljYT4+CmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTAgMDAwMDAgbiAKMDAwMDAwMDA2MCAwMDAwMCBuIAowMDAwMDAwMTE3IDAwMDAwIG4gCjAwMDAwMDAyNDEgMDAwMDAgbiAKMDAwMDAwMDMzNSAwMDAwMCBuIAp0cmFpbGVyCjw8L1NpemUgNi9Sb290IDEgMCBSPj4Kc3RhcnR4cmVmCjQwNAolJUVPRgo=";
    @Resource
    private MinistryOfTransport ministryOfTransport;
    /**
     * 测试上传数据接口
     * 用于验证上传数据的准确性
     * 模拟交通部接口
     */
    @ResponseBody
    @RequestMapping("/base/v0.1/testPush")
    public R<String> testPush(){
    @RequestMapping("/base/v0.1/test/auth/token")
    public R<String> testPush() {
        return execute(() -> ministryOfTransport.getToken());
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/platform/ptjb")
    public R<String> testPushPtjb() {
        return execute(() -> ministryOfTransport.pushPlatformBaseInfo());
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/platform/ptyygm")
    public R<String> testPushPtyygm() {
        return execute(() -> ministryOfTransport.pushPlatformOperationScaleInfo());
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/platform/ptzf")
    public R<String> testPushPtzf() {
        return execute(() -> ministryOfTransport.pushPlatformPayInfo(buildPlatformPayInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/platform/ptfwjg")
    public R<String> testPushPtfwjg() {
        return execute(() -> ministryOfTransport.pushPlatformServiceInfo(buildPlatformServiceInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/platform/cptjyxk")
    public R<String> testPushCptjyxk() {
        return execute(() -> ministryOfTransport.pushPlatformLicenseInfo(buildPlatformLicenseInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/platform/ptyj")
    public R<String> testPushPtyj() {
        return execute(() -> ministryOfTransport.pushPlatformPriceInfo(buildPlatformPriceInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/basic/cljb")
    public R<String> testPushCljb() {
        return execute(() -> ministryOfTransport.pushVehicleBaseInfo(buildVehicleBaseInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/basic/clbx")
    public R<String> testPushClbx() {
        return execute(() -> ministryOfTransport.pushVehicleInsuranceInfo(buildVehicleInsuranceInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/basic/cllc")
    public R<String> testPushCllc() {
        return execute(() -> ministryOfTransport.pushVehicleMileageInfo(buildVehicleMileageInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/basic/jsyjb")
    public R<String> testPushJsyjb() {
        return execute(() -> ministryOfTransport.pushDriverBaseInfo(buildDriverBaseInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/basic/jsypx")
    public R<String> testPushJsypx() {
        return execute(() -> ministryOfTransport.pushDriverTrainingInfo(buildDriverTrainingInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/basic/jsyydzd")
    public R<String> testPushJsyydzd() {
        return execute(() -> ministryOfTransport.pushDriverMobileTerminalInfo(buildDriverMobileTerminalInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/basic/jsytj")
    public R<String> testPushJsytj() {
        return execute(() -> ministryOfTransport.pushDriverStatisticsInfo(buildDriverStatisticsInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/basic/ckjb")
    public R<String> testPushCkjb() {
        return execute(() -> ministryOfTransport.pushPassengerBaseInfo(buildPassengerBaseInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/basic/pttzr")
    public R<String> testPushPttzr() {
        return execute(() -> ministryOfTransport.pushPlatformInvestorInfo(buildPlatformInvestorInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/basic/gtjsyht")
    public R<String> testPushGtjsyht() {
        return execute(() -> ministryOfTransport.pushDriverContractInfo(buildDriverContractInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/order/ddfq")
    public R<String> testPushDdfq() {
        return execute(() -> ministryOfTransport.pushOrderCreateInfo(buildOrderCreateInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/order/ddcg")
    public R<String> testPushDdcg() {
        return execute(() -> ministryOfTransport.pushOrderMatchInfo(buildOrderMatchInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/order/ddcx")
    public R<String> testPushDdcx() {
        return execute(() -> ministryOfTransport.pushOrderCancelInfo(buildOrderCancelInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/order/ddwy")
    public R<String> testPushDdwy() {
        return execute(() -> ministryOfTransport.pushOrderViolationInfo(buildOrderViolationInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/operation/clyysx")
    public R<String> testPushClyysx() {
        return execute(() -> ministryOfTransport.pushVehicleOperateLoginInfo(buildVehicleOperateLoginInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/operation/clyyxx")
    public R<String> testPushClyyxx() {
        return execute(() -> ministryOfTransport.pushVehicleOperateLogoutInfo(buildVehicleOperateLogoutInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/operation/yycf")
    public R<String> testPushYycf() {
        return execute(() -> ministryOfTransport.pushOperateDepartInfo(buildOperateDepartInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/operation/yydd")
    public R<String> testPushYydd() {
        return execute(() -> ministryOfTransport.pushOperateArriveInfo(buildOperateArriveInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/operation/yyzf")
    public R<String> testPushYyzf() {
        return execute(() -> ministryOfTransport.pushOperatePayInfo(buildOperatePayInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/position/jsydw")
    public R<String> testPushJsydw() {
        return execute(() -> ministryOfTransport.pushDriverPositionInfo(buildDriverPositionInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/quality/ckpj")
    public R<String> testPushCkpj() {
        return execute(() -> ministryOfTransport.pushPassengerEvaluateInfo(buildPassengerEvaluateInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/quality/cktscl")
    public R<String> testPushCktscl() {
        return execute(() -> ministryOfTransport.pushPassengerComplaintInfo(buildPassengerComplaintInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/quality/clzxbb")
    public R<String> testPushClzxbb() {
        return execute(() -> ministryOfTransport.pushVehicleCancelReportInfo(buildVehicleCancelReportInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/quality/jsycf")
    public R<String> testPushJsycf() {
        return execute(() -> ministryOfTransport.pushDriverPunishInfo(buildDriverPunishInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/quality/jsyxy")
    public R<String> testPushJsyxy() {
        return execute(() -> ministryOfTransport.pushDriverReputationInfo(buildDriverReputationInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/quality/rcdygx")
    public R<String> testPushRcdygx() {
        return execute(() -> ministryOfTransport.pushDriverVehicleRelationInfo(buildDriverVehicleRelationInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/regist/ptyybb")
    public R<String> testPushPtyybb() {
        return execute(() -> ministryOfTransport.pushPlatformOperationRegisterInfo(buildPlatformOperationRegisterInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/regist/ptztyybb")
    public R<String> testPushPtztyybb() {
        return execute(() -> ministryOfTransport.pushPlatformPauseOperationRegisterInfo(buildPlatformPauseOperationRegisterInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/regist/ptjhptxx")
    public R<String> testPushPtjhptxx() {
        return execute(() -> ministryOfTransport.pushPlatformAggregationInfo(buildPlatformAggregationInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/regist/clyybb")
    public R<String> testPushClyybb() {
        return execute(() -> ministryOfTransport.pushVehicleOperationRegisterInfo(buildVehicleOperationRegisterInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/regist/jsyzcbb")
    public R<String> testPushJsyzcbb() {
        return execute(() -> ministryOfTransport.pushDriverRegisterInfo(buildDriverRegisterInfo()));
    }
    @ResponseBody
    @RequestMapping("/base/v0.1/test/regist/jsyzxzc")
    public R<String> testPushJsyzxzc() {
        return execute(() -> ministryOfTransport.pushDriverCancelRegisterInfo(buildDriverCancelRegisterInfo()));
    }
    private R<String> execute(Supplier<String> action) {
        try {
            String token = ministryOfTransport.getToken();
            return R.ok(token);
        }catch (Exception e){
            e.printStackTrace();
            return R.ok(action.get());
        } catch (Exception e) {
            return R.fail(e.getMessage());
        }
    }
    /**
     * 测试报送网约车平台公司基本信息(PTJB)
     */
    @ResponseBody
    @RequestMapping("/base/v0.1/testPushPtjb")
    public R<String> testPushPtjb(){
        try {
            String result = ministryOfTransport.pushPlatformBaseInfo();
            return R.ok(result);
        }catch (Exception e){
            e.printStackTrace();
            return R.fail(e.getMessage());
        }
    private RegulationVehicleBaseInfoDTO buildVehicleBaseInfo() {
        RegulationVehicleBaseInfoDTO dto = new RegulationVehicleBaseInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(CITY_CODE);
        dto.setVehicleNo(VEHICLE_NO);
        dto.setPlateColor(PLATE_COLOR);
        dto.setSeats("5");
        dto.setBrand("小鹏");
        dto.setModel("G9");
        dto.setVehicleType("小型轿车");
        dto.setOwnerName("广州易点智慧出行科技有限公司");
        dto.setOwnerType("1");
        dto.setVehicleColor("白色");
        dto.setEngineId("ENG202605180001");
        dto.setVin("LDC12345678901234");
        dto.setCertifyDateA("20240101");
        dto.setFuelType("纯电动");
        dto.setEngineDisplace("0");
        dto.setEnginePower("230");
        dto.setWheelBase("2998");
        dto.setPhoto(SAMPLE_JPEG_BASE64);
        dto.setPhotoId("PHOTO202605180001");
        dto.setCertificate(VEHICLE_CERT_NO);
        dto.setTransAgency("广州市交通运输主管部门");
        dto.setTransArea("广州市");
        dto.setTransDateStart("20240101");
        dto.setTransDateStop("20271231");
        dto.setCertifyDateB("20240101");
        dto.setFixState("1");
        dto.setNextFixDate("20270101");
        dto.setCheckState("1");
        dto.setCheckDate("20250101");
        dto.setFeePrintId("FP-001");
        dto.setGpsBrand("华为");
        dto.setGpsModel("Mate60");
        dto.setGpsImei("860000000000001");
        dto.setGpsInstallDate("20240101");
        dto.setRegisterDate("20240101");
        dto.setCommercialType("1");
        dto.setFareType("AA01");
        dto.setState("0");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    /**
     * 测试报送网约车平台公司运营规模信息(PTYYGM)
     */
    @ResponseBody
    @RequestMapping("/base/v0.1/testPushPtyygm")
    public R<String> testPushPtyygm(){
        try {
            String result = ministryOfTransport.pushPlatformOperationScaleInfo();
            return R.ok(result);
        }catch (Exception e){
            e.printStackTrace();
            return R.fail(e.getMessage());
        }
    private RegulationVehicleInsuranceInfoDTO buildVehicleInsuranceInfo() {
        RegulationVehicleInsuranceInfoDTO dto = new RegulationVehicleInsuranceInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setVehicleNo(VEHICLE_NO);
        dto.setPlateColor(PLATE_COLOR);
        dto.setInsurCom("中国平安财产保险股份有限公司");
        dto.setInsurNum("PA202605180001");
        dto.setInsurType("交强险");
        dto.setInsurCount("950");
        dto.setInsurEff("20260518");
        dto.setInsurExp("20270517");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationVehicleMileageInfoDTO buildVehicleMileageInfo() {
        RegulationVehicleMileageInfoDTO dto = new RegulationVehicleMileageInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setVehicleNo(VEHICLE_NO);
        dto.setPlateColor(PLATE_COLOR);
        dto.setTotalMile("12580");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationDriverBaseInfoDTO buildDriverBaseInfo() {
        RegulationDriverBaseInfoDTO dto = new RegulationDriverBaseInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setDriverName(DRIVER_NAME);
        dto.setDriverIDCard(DRIVER_ID_CARD);
        dto.setDriverPhone(DRIVER_PHONE);
        dto.setDriverGender("1");
        dto.setDriverBirthday("19900101");
        dto.setDriverNationality("中国");
        dto.setDriverNation("汉族");
        dto.setDriverMaritalStatus("未婚");
        dto.setDriverPoliticalIdentity("13");
        dto.setDriverLanguageLevel("普通话");
        dto.setDriverEducation("31");
        dto.setDriverCensus("广州市公安局");
        dto.setDriverAddress("广州市天河区");
        dto.setDriverContactAddress("广州市天河区岑村");
        dto.setPhoto(SAMPLE_JPEG_BASE64);
        dto.setPhotoId("JSY-PHOTO-001");
        dto.setLicenseId(LICENSE_ID);
        dto.setLicensePhoto(SAMPLE_PDF_BASE64);
        dto.setLicensePhotoId("JSY-LICENSE-001");
        dto.setDriverType("C1");
        dto.setGetDriverLicenseDate("20150101");
        dto.setDriverLicenseOn("20240101");
        dto.setDriverLicenseOff("20340101");
        dto.setTaxiDriver("0");
        dto.setCertificateA(DRIVER_CERT_NO);
        dto.setCertificateB("");
        dto.setNetworkCarIssueOrganization("广州市交通运输主管部门");
        dto.setNetworkCarIssueDate("20240101");
        dto.setGetNetworkCarProofDate("20240101");
        dto.setNetworkCarProofOn("20240101");
        dto.setNetworkCarProofOff("20271231");
        dto.setRegisterDate("20240101");
        dto.setFullTimeDriver("1");
        dto.setInDriverBlacklist("0");
        dto.setCommercialType("1");
        dto.setContractCompany("广州易点智慧出行科技有限公司");
        dto.setContractOn("20240101");
        dto.setContractOff("20271231");
        dto.setEmergencyContact("王五");
        dto.setEmergencyContactPhone("13700137000");
        dto.setEmergencyContactAddress("广州市海珠区");
        dto.setState("0");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setRewardPunishment("无");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationDriverTrainingInfoDTO buildDriverTrainingInfo() {
        RegulationDriverTrainingInfoDTO dto = new RegulationDriverTrainingInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setLicenseId(LICENSE_ID);
        dto.setCourseName("安全文明驾驶培训");
        dto.setCourseDate(DATE_8);
        dto.setStartTime(DATE_8);
        dto.setStopTime(DATE_8_NEXT);
        dto.setDuration("120");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setType("RC");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationDriverMobileTerminalInfoDTO buildDriverMobileTerminalInfo() {
        RegulationDriverMobileTerminalInfoDTO dto = new RegulationDriverMobileTerminalInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setLicenseId(LICENSE_ID);
        dto.setDriverPhone(DRIVER_PHONE);
        dto.setNetType("2");
        dto.setAppVersion("1.0.0");
        dto.setMapType("2");
        dto.setState("0");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationDriverStatisticsInfoDTO buildDriverStatisticsInfo() {
        RegulationDriverStatisticsInfoDTO dto = new RegulationDriverStatisticsInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setLicenseId(LICENSE_ID);
        dto.setCycle("20260501");
        dto.setOrderCount("88");
        dto.setTrafficViolationCount("0");
        dto.setTrafficAccidentCount("0");
        dto.setComplainedCount("1");
        dto.setViolateRecord("0");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationPassengerBaseInfoDTO buildPassengerBaseInfo() {
        RegulationPassengerBaseInfoDTO dto = new RegulationPassengerBaseInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setRegisterDate(DATE_8);
        dto.setPassengerPhone(PASSENGER_PHONE);
        dto.setPassengerName(PASSENGER_NAME);
        dto.setPassengerSex(PASSENGER_SEX);
        dto.setState("0");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationPlatformInvestorInfoDTO buildPlatformInvestorInfo() {
        RegulationPlatformInvestorInfoDTO dto = new RegulationPlatformInvestorInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setEpCode(COMPANY_IDENTIFIER);
        dto.setInvesterName("广州易点投资有限公司");
        dto.setInvIdType("TYSHXYDM");
        dto.setInvIdCode("91440101MA5AWEB68X");
        dto.setMoney("10000000");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationPlatformPayInfoDTO buildPlatformPayInfo() {
        RegulationPlatformPayInfoDTO dto = new RegulationPlatformPayInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setPayName("微信支付");
        dto.setPayId("TENPAY001");
        dto.setPayType("第三方支付");
        dto.setPayScope("线上支付");
        dto.setPrepareBank("招商银行广州分行");
        dto.setCountDate(DATE_8);
        dto.setState("0");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationPlatformServiceInfoDTO buildPlatformServiceInfo() {
        RegulationPlatformServiceInfoDTO dto = new RegulationPlatformServiceInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setServiceName("广州天河服务中心");
        dto.setServiceNo("FWJG001");
        dto.setDetailAddress("广州市天河区岑村丰庄大街10号T2");
        dto.setResponsibleName("陈志远");
        dto.setResponsiblePhone("15915905487");
        dto.setManagerName("张三");
        dto.setManagerPhone(DRIVER_PHONE);
        dto.setContactPhone("020-12345678");
        dto.setMailAddress("service@example.com");
        dto.setCreateDate(DATE_8);
        dto.setState("0");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationPlatformLicenseInfoDTO buildPlatformLicenseInfo() {
        RegulationPlatformLicenseInfoDTO dto = new RegulationPlatformLicenseInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(CITY_CODE);
        dto.setCertificate("穗交运许可20260001");
        dto.setOperationArea("广州市");
        dto.setOwnerName("广州易点智慧出行科技有限公司");
        dto.setOrganization("广州市交通运输主管部门");
        dto.setStartDate("20240101");
        dto.setStopDate("20271231");
        dto.setCertifyDate("20240101");
        dto.setState("1");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationPlatformPriceInfoDTO buildPlatformPriceInfo() {
        RegulationPlatformPriceInfoDTO dto = new RegulationPlatformPriceInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setFareType("AA01");
        dto.setFareTypeNote("实时单一口价");
        dto.setFareValidOn("20240101");
        dto.setFareValidOff("20271231");
        dto.setStartFare("12");
        dto.setStartMile("3");
        dto.setUpPrice("2.6");
        dto.setUpPriceStartMile("3");
        dto.setMorningPeakTimeOn("073000");
        dto.setMorningPeakTimeOff("093000");
        dto.setEveningPeakTimeOn("170000");
        dto.setEveningPeakTimeOff("190000");
        dto.setOtherPeakTimeOn("000000");
        dto.setOtherPeakTimeOff("000000");
        dto.setPeakUnitPrice("0.5");
        dto.setPeakPriceStartMile("0");
        dto.setUnitPricePerMile("2.6");
        dto.setLongDistancePrice("1");
        dto.setLongDistanceStartMile("15");
        dto.setLowSpeedPricePerMinute("0.8");
        dto.setNightPricePerMile("0.5");
        dto.setNightPricePerMinute("0.2");
        dto.setOtherPrice("0");
        dto.setState("0");
        dto.setUpdateTime(DATE_14);
        dto.setFareRuleUrl("https://example.com/fare-rule");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationDriverContractInfoDTO buildDriverContractInfo() {
        RegulationDriverContractInfoDTO dto = new RegulationDriverContractInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setDriverName(DRIVER_NAME);
        dto.setDriTel(DRIVER_PHONE);
        dto.setGender("1");
        dto.setBirthday("19900101");
        dto.setDriverNation("汉族");
        dto.setIdType("JMSFZ");
        dto.setIdNo(DRIVER_ID_CARD);
        dto.setDriCertNo(DRIVER_CERT_NO);
        dto.setVehicleNo(VEHICLE_NO);
        dto.setVin("LDC12345678901234");
        dto.setVehCertNo(VEHICLE_CERT_NO);
        dto.setType("ZC");
        dto.setContractType("HT");
        dto.setContractPhoto(SAMPLE_PDF_BASE64);
        dto.setContractStatus("YX");
        dto.setSignTime(DATE_14);
        dto.setValidTime(DATE_8);
        dto.setInvalidTime("20271231");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationOrderCreateInfoDTO buildOrderCreateInfo() {
        RegulationOrderCreateInfoDTO dto = new RegulationOrderCreateInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setOrderId(ORDER_ID);
        dto.setDepartTime(DATE_14_NEXT);
        dto.setOrderTime(DATE_14);
        dto.setPassengerPhone(PASSENGER_PHONE);
        dto.setPassengerNote("测试下单");
        dto.setDeparture("广州市天河区体育西路");
        dto.setDepLongitude(LONGITUDE);
        dto.setDepLatitude(LATITUDE);
        dto.setDestination("广州市海珠区琶洲大道");
        dto.setDestLongitude(DEST_LONGITUDE);
        dto.setDestLatitude(DEST_LATITUDE);
        dto.setEncrypt("1");
        dto.setFareType("AA01");
        dto.setOrderSource("0");
        dto.setPsgName(PASSENGER_NAME);
        dto.setPsgGender(PASSENGER_SEX);
        dto.setPsgTotal("1");
        dto.setIsReserve("0");
        dto.setPreMile("18");
        dto.setPreTime("35");
        dto.setPreFare("45");
        dto.setDepartCity(CITY_CODE);
        dto.setDestCity(CITY_CODE);
        dto.setIsFromThirdPlatform("0");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationOrderMatchInfoDTO buildOrderMatchInfo() {
        RegulationOrderMatchInfoDTO dto = new RegulationOrderMatchInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setOrderId(ORDER_ID);
        dto.setLongitude(LONGITUDE);
        dto.setLatitude(LATITUDE);
        dto.setEncrypt("1");
        dto.setLicenseId(LICENSE_ID);
        dto.setDriverPhone(DRIVER_PHONE);
        dto.setVehicleNo(VEHICLE_NO);
        dto.setPlateColor(PLATE_COLOR);
        dto.setDistributeTime(DATE_14);
        dto.setOrderTime(DATE_14);
        dto.setCarCertNo(VEHICLE_CERT_NO);
        dto.setDriverName(DRIVER_NAME);
        dto.setIdNo(DRIVER_ID_CARD);
        dto.setDriCertNo(DRIVER_CERT_NO);
        dto.setDepartCity(CITY_CODE);
        dto.setDestCity(CITY_CODE);
        dto.setDepartLocale("天河区");
        dto.setDepartLocaleDetail("广州市天河区体育西路");
        dto.setDepartLon(LONGITUDE);
        dto.setDepartLat(LATITUDE);
        dto.setDesLocale("海珠区");
        dto.setDesLocaleDetail("广州市海珠区琶洲大道");
        dto.setDesLon(DEST_LONGITUDE);
        dto.setDesLat(DEST_LATITUDE);
        dto.setLatestDestTime("20260518090000");
        dto.setIsFromThirdPlatform("0");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationOrderCancelInfoDTO buildOrderCancelInfo() {
        RegulationOrderCancelInfoDTO dto = new RegulationOrderCancelInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setOrderId(ORDER_ID);
        dto.setOrderTime(DATE_14);
        dto.setCancelTime(DATE_14_NEXT);
        dto.setInitiator("1");
        dto.setCancelTypeCode("1");
        dto.setCancelReason("乘客提前取消");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationOrderViolationInfoDTO buildOrderViolationInfo() {
        RegulationOrderViolationInfoDTO dto = new RegulationOrderViolationInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setOrderId(ORDER_ID);
        dto.setOrderTime(DATE_14);
        dto.setDriCertNo(DRIVER_CERT_NO);
        dto.setVehicleNo(VEHICLE_NO);
        dto.setBreakPart("0");
        dto.setBreakReason("驾驶员未按时到达");
        dto.setPsgTel(PASSENGER_PHONE);
        dto.setBreakTime(DATE_14_NEXT);
        dto.setIdNo(DRIVER_ID_CARD);
        dto.setDriverName(DRIVER_NAME);
        dto.setDriverPhone(DRIVER_PHONE);
        dto.setCertificate(VEHICLE_CERT_NO);
        dto.setDistributeTime(DATE_14);
        dto.setDepartLocale("广州市天河区体育西路");
        dto.setDesLocale("广州市海珠区琶洲大道");
        dto.setIsFromThirdPlatform("0");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationVehicleOperateLoginInfoDTO buildVehicleOperateLoginInfo() {
        RegulationVehicleOperateLoginInfoDTO dto = new RegulationVehicleOperateLoginInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setIdentifier(COMPANY_IDENTIFIER);
        dto.setDriverName(DRIVER_NAME);
        dto.setDriverIDCard(DRIVER_ID_CARD);
        dto.setDriverCertCard(DRIVER_CERT_NO);
        dto.setDriverPhone(DRIVER_PHONE);
        dto.setLicenseId(LICENSE_ID);
        dto.setVehicleNo(VEHICLE_NO);
        dto.setPlateColor(PLATE_COLOR);
        dto.setLoginTime(DATE_14);
        dto.setLongitude(LONGITUDE);
        dto.setLatitude(LATITUDE);
        dto.setEncrypt("1");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationVehicleOperateLogoutInfoDTO buildVehicleOperateLogoutInfo() {
        RegulationVehicleOperateLogoutInfoDTO dto = new RegulationVehicleOperateLogoutInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setIdentifier(COMPANY_IDENTIFIER);
        dto.setDriverName(DRIVER_NAME);
        dto.setDriverIDCard(DRIVER_ID_CARD);
        dto.setDriverPhone(DRIVER_PHONE);
        dto.setDriverCertCard(DRIVER_CERT_NO);
        dto.setLicenseId(LICENSE_ID);
        dto.setVehicleNo(VEHICLE_NO);
        dto.setPlateColor(PLATE_COLOR);
        dto.setLoginTime(DATE_14);
        dto.setLogoutTime(DATE_14_END);
        dto.setLongitude(DEST_LONGITUDE);
        dto.setLatitude(DEST_LATITUDE);
        dto.setEncrypt("1");
        dto.setDriveCount("6");
        dto.setDriveMile("88");
        dto.setDriveTime("320");
        dto.setPrice("260");
        dto.setFactPrice("245");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationOperateDepartInfoDTO buildOperateDepartInfo() {
        RegulationOperateDepartInfoDTO dto = new RegulationOperateDepartInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setOrderId(ORDER_ID);
        dto.setLicenseId(LICENSE_ID);
        dto.setPassengerPhone(PASSENGER_PHONE);
        dto.setFareType("AA01");
        dto.setVehicleNo(VEHICLE_NO);
        dto.setPlateColor(PLATE_COLOR);
        dto.setDepLongitude(LONGITUDE);
        dto.setDepLatitude(LATITUDE);
        dto.setEncrypt("1");
        dto.setDepTime(DATE_14_NEXT);
        dto.setWaitMile("2");
        dto.setPassengerWaitTime("120");
        dto.setDistributeTime(DATE_14);
        dto.setDriveWaitTime("60");
        dto.setAddress(ADDRESS_CODE);
        dto.setDriverName(DRIVER_NAME);
        dto.setDriverIDCard(DRIVER_ID_CARD);
        dto.setDriverPhone(DRIVER_PHONE);
        dto.setDriverCertCard(DRIVER_CERT_NO);
        dto.setPassengerName(PASSENGER_NAME);
        dto.setPassengerSex(PASSENGER_SEX);
        dto.setOrderTime(DATE_14);
        dto.setDepArea("广州市天河区体育西路地铁站");
        dto.setIsFromThirdPlatform("0");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationOperateArriveInfoDTO buildOperateArriveInfo() {
        RegulationOperateArriveInfoDTO dto = new RegulationOperateArriveInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setOrderId(ORDER_ID);
        dto.setDestArea("广州市海珠区琶洲大道");
        dto.setDestLongitude(DEST_LONGITUDE);
        dto.setDestLatitude(DEST_LATITUDE);
        dto.setEncrypt("1");
        dto.setDestTime(DATE_14_END);
        dto.setDriveMile("18");
        dto.setDriveTime("1800");
        dto.setDistributeTime(DATE_14);
        dto.setAddress(ADDRESS_CODE);
        dto.setDriverName(DRIVER_NAME);
        dto.setDriverPhone(DRIVER_PHONE);
        dto.setDriverIDCard(DRIVER_ID_CARD);
        dto.setDriverCertCard(DRIVER_CERT_NO);
        dto.setVehicleNo(VEHICLE_NO);
        dto.setDepTime(DATE_14_NEXT);
        dto.setDepLongitude(LONGITUDE);
        dto.setDepLatitude(LATITUDE);
        dto.setPassengerName(PASSENGER_NAME);
        dto.setPassengerPhone(PASSENGER_PHONE);
        dto.setPrice("45");
        dto.setOrderTime(DATE_14);
        dto.setIsFromThirdPlatform("0");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationOperatePayInfoDTO buildOperatePayInfo() {
        RegulationOperatePayInfoDTO dto = new RegulationOperatePayInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setOrderId(ORDER_ID);
        dto.setOnArea(ADDRESS_CODE);
        dto.setOffArea(ADDRESS_CODE);
        dto.setDriverName(DRIVER_NAME);
        dto.setLicenseId(LICENSE_ID);
        dto.setFareType("AA01");
        dto.setVehicleNo(VEHICLE_NO);
        dto.setPlateColor(PLATE_COLOR);
        dto.setBookDepTime(DATE_14_NEXT);
        dto.setWaitTime("120");
        dto.setDepLongitude(LONGITUDE);
        dto.setDepLatitude(LATITUDE);
        dto.setDepArea("广州市天河区体育西路地铁站");
        dto.setDepTime(DATE_14_NEXT);
        dto.setDestLongitude(DEST_LONGITUDE);
        dto.setDestLatitude(DEST_LATITUDE);
        dto.setDestArea("广州市海珠区琶洲大道");
        dto.setDestTime(DATE_14_END);
        dto.setBookModel("G9");
        dto.setModel("G9");
        dto.setDriveMile("18");
        dto.setDriveTime("1800");
        dto.setWaitMile("2");
        dto.setFactPrice("42");
        dto.setPrice("45");
        dto.setCashPrice("0");
        dto.setLineName("微信支付");
        dto.setLinePrice("42");
        dto.setPosName("");
        dto.setPosPrice("0");
        dto.setBenfitPrice("3");
        dto.setBookTip("0");
        dto.setPassengerTip("0");
        dto.setPeakUpPrice("0");
        dto.setNightUpPrice("0");
        dto.setFarUpPrice("2");
        dto.setOtherUpPrice("1");
        dto.setPayState("1");
        dto.setPayTime(DATE_14_END);
        dto.setOrderMatchTime(DATE_14_END);
        dto.setInvoiceStatus("1");
        dto.setDriverIDCard(DRIVER_ID_CARD);
        dto.setDriverPhone(DRIVER_PHONE);
        dto.setDriverCertCard(DRIVER_CERT_NO);
        dto.setOrderTime(DATE_14);
        dto.setIsFromThirdPlatform("0");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationDriverPositionInfoDTO buildDriverPositionInfo() {
        RegulationDriverPositionInfoDTO dto = new RegulationDriverPositionInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setDriverRegionCode(ADDRESS_CODE);
        dto.setVehicleNo(VEHICLE_NO);
        dto.setPlateColor(PLATE_COLOR);
        dto.setPositionTime(DATE_14);
        dto.setLongitude(LONGITUDE);
        dto.setLatitude(LATITUDE);
        dto.setSpeed("40");
        dto.setDirection("90");
        dto.setElevation("15");
        dto.setMileage("12580");
        dto.setEncrypt("1");
        dto.setBizStatus("1");
        dto.setOrderId(ORDER_ID);
        dto.setLicenseId(LICENSE_ID);
        dto.setDriverName(DRIVER_NAME);
        dto.setDriverCertCard(DRIVER_CERT_NO);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationPassengerEvaluateInfoDTO buildPassengerEvaluateInfo() {
        RegulationPassengerEvaluateInfoDTO dto = new RegulationPassengerEvaluateInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setOrderId(ORDER_ID);
        dto.setEvaluateTime(DATE_14_END);
        dto.setServiceScore("5");
        dto.setDriverScore("5");
        dto.setVehicleScore("5");
        dto.setDetail("服务很好,行程顺利");
        dto.setPhotoDetail(SAMPLE_JPEG_BASE64);
        dto.setSupDetail("补充评价:车辆整洁");
        dto.setSupTime(DATE_14_END);
        dto.setTotalScore("100");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationPassengerComplaintInfoDTO buildPassengerComplaintInfo() {
        RegulationPassengerComplaintInfoDTO dto = new RegulationPassengerComplaintInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setOrderId(ORDER_ID);
        dto.setComplaintTime(DATE_14_END);
        dto.setPhoto(SAMPLE_JPEG_BASE64);
        dto.setDealState("3");
        dto.setDetail("司机绕路");
        dto.setResult("已核实并处理");
        dto.setVisitTime(DATE_14_END);
        dto.setVisitResult("乘客接受处理结果");
        dto.setComplaintType("1");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationVehicleCancelReportInfoDTO buildVehicleCancelReportInfo() {
        RegulationVehicleCancelReportInfoDTO dto = new RegulationVehicleCancelReportInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setVehicleNo(VEHICLE_NO);
        dto.setPlateColor(PLATE_COLOR);
        dto.setCancelReason("车辆退役");
        dto.setCancelDate(DATE_8);
        dto.setCancelPhoto(SAMPLE_PDF_BASE64);
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationDriverPunishInfoDTO buildDriverPunishInfo() {
        RegulationDriverPunishInfoDTO dto = new RegulationDriverPunishInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setLicenseId(LICENSE_ID);
        dto.setDriverName(DRIVER_NAME);
        dto.setDriverPhone(DRIVER_PHONE);
        dto.setDriverIDCard(DRIVER_ID_CARD);
        dto.setDriverCertCard(DRIVER_CERT_NO);
        dto.setPunishTime(DATE_14);
        dto.setPunishReason("服务态度不佳");
        dto.setPunishResult("警告一次");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationDriverReputationInfoDTO buildDriverReputationInfo() {
        RegulationDriverReputationInfoDTO dto = new RegulationDriverReputationInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setAddress(ADDRESS_CODE);
        dto.setLicenseId(LICENSE_ID);
        dto.setOrderCount("128");
        dto.setPunishCount("1");
        dto.setComplaintCount("2");
        dto.setLevel("5");
        dto.setTestDate(DATE_8);
        dto.setTestDepartment("广州市交通运输主管部门");
        dto.setDriverName(DRIVER_NAME);
        dto.setDriverCertCard(DRIVER_CERT_NO);
        dto.setVehicleNo(VEHICLE_NO);
        dto.setVehicleCertNo(VEHICLE_CERT_NO);
        dto.setTestResult("合格");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationDriverVehicleRelationInfoDTO buildDriverVehicleRelationInfo() {
        RegulationDriverVehicleRelationInfoDTO dto = new RegulationDriverVehicleRelationInfoDTO();
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setAddress(ADDRESS_CODE);
        dto.setCurDriverName(DRIVER_NAME);
        dto.setCurDriverCertNo(DRIVER_CERT_NO);
        dto.setCurVehicleNo(VEHICLE_NO);
        dto.setCurVehicleCertNo(VEHICLE_CERT_NO);
        dto.setCurTimeOn(DATE_14);
        dto.setCurTimeOff(DATE_14_END);
        dto.setState("0");
        dto.setFlag("1");
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationPlatformOperationRegisterInfoDTO buildPlatformOperationRegisterInfo() {
        RegulationPlatformOperationRegisterInfoDTO dto = new RegulationPlatformOperationRegisterInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setCompanyName("广州易点智慧出行科技有限公司");
        dto.setIdentifier(COMPANY_IDENTIFIER);
        dto.setContactPhone("020-12345678");
        dto.setGzAd("广州市天河区岑村丰庄大街10号T2");
        dto.setResponsible("陈志远");
        dto.setResponsibleWay("15915905487");
        dto.setPsgAppName("有鹏出行");
        dto.setDriverAppName("有鹏车主");
        dto.setComplaintPhone("400-800-0000");
        dto.setComplaintUrl("https://example.com/complaint");
        dto.setComplaintEmail("complaint@example.com");
        dto.setOfficialUrl("https://example.com");
        dto.setIsThirdPlatform("1");
        dto.setOperationDate(DATE_8);
        dto.setOperationType("0");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationPlatformPauseOperationRegisterInfoDTO buildPlatformPauseOperationRegisterInfo() {
        RegulationPlatformPauseOperationRegisterInfoDTO dto = new RegulationPlatformPauseOperationRegisterInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setCompanyName("广州易点智慧出行科技有限公司");
        dto.setIdentifier(COMPANY_IDENTIFIER);
        dto.setPauseReason("系统升级维护");
        dto.setPauseTime(DATE_8);
        dto.setPauseReasonPhoto(SAMPLE_PDF_BASE64);
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationPlatformAggregationInfoDTO buildPlatformAggregationInfo() {
        RegulationPlatformAggregationInfoDTO dto = new RegulationPlatformAggregationInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setCompanyName("广州易点智慧出行科技有限公司");
        dto.setIdentifier(COMPANY_IDENTIFIER);
        dto.setThirdPlatformName("高德打车|百度打车");
        dto.setState("0");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationVehicleOperationRegisterInfoDTO buildVehicleOperationRegisterInfo() {
        RegulationVehicleOperationRegisterInfoDTO dto = new RegulationVehicleOperationRegisterInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setVehicleNo(VEHICLE_NO);
        dto.setPlateColor(PLATE_COLOR);
        dto.setVehicleType("小型轿车");
        dto.setOwnerName("广州易点智慧出行科技有限公司");
        dto.setFuelType("纯电动");
        dto.setCertificate(VEHICLE_CERT_NO);
        dto.setTransAgency("广州市交通运输主管部门");
        dto.setVehicleTec("一级");
        dto.setOperationType("0");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationDriverRegisterInfoDTO buildDriverRegisterInfo() {
        RegulationDriverRegisterInfoDTO dto = new RegulationDriverRegisterInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setDriverName(DRIVER_NAME);
        dto.setDriverIDCard(DRIVER_ID_CARD);
        dto.setDriverPhone(DRIVER_PHONE);
        dto.setDriverGender("1");
        dto.setLicenseId(LICENSE_ID);
        dto.setDriCertNo(DRIVER_CERT_NO);
        dto.setContractCompany(COMPANY_IDENTIFIER);
        dto.setOperationType("0");
        dto.setContractType("HT");
        dto.setContractPhoto(SAMPLE_PDF_BASE64);
        dto.setContractStatus("YX");
        dto.setSignTime(DATE_14);
        dto.setValidTime(DATE_8);
        dto.setInvalidTime("20271231");
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
    private RegulationDriverCancelRegisterInfoDTO buildDriverCancelRegisterInfo() {
        RegulationDriverCancelRegisterInfoDTO dto = new RegulationDriverCancelRegisterInfoDTO();
        dto.setSymbol(MinistryOfTransport.DEFAULT_SYMBOL);
        dto.setCompanyId(MinistryOfTransport.DEFAULT_COMPANY_ID);
        dto.setDriverName(DRIVER_NAME);
        dto.setDriverIDCard(DRIVER_ID_CARD);
        dto.setDriverPhone(DRIVER_PHONE);
        dto.setDriverGender("1");
        dto.setDriCertNo(DRIVER_CERT_NO);
        dto.setContractType("HT");
        dto.setContractPhoto(SAMPLE_PDF_BASE64);
        dto.setInvalidTime("20271231");
        dto.setCancelReason("驾驶员离职");
        dto.setCancelTime(DATE_8);
        dto.setFlag("1");
        dto.setUpdateTime(DATE_14);
        dto.setProtocolVersion(MinistryOfTransport.DEFAULT_PROTOCOL_VERSION);
        return dto;
    }
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java
@@ -19,7 +19,9 @@
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.account.XpOperationsUser;
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.operation.XpGeoQueryEntity;
import com.xiaopeng.api.model.maintenance.XpVehicleModel;
@@ -50,6 +52,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.VehicleListByVinVo;
import com.xiaopeng.vehicleConvoy.model.vo.VehiclePositionDto;
import com.xiaopeng.vehicleConvoy.service.IXpFleetService;
import com.xiaopeng.vehicleConvoy.service.IXpFleetVehicleService;
@@ -1081,17 +1084,6 @@
        return R.ok(xpVehicleService.listByPlateNumber(plateNumber));
    }
    /**
     * 车辆详情-车门解锁/后备箱解锁
     */
    @ApiOperation(value = "车辆运维-车门解锁/后备箱解锁", tags = {"运维APP-车辆管理"})
    @PostMapping("/maintenance-app/api/v1/vehicle/unlockByType")
    public R<String> unlockByType(@RequestBody UnlockByTypeDTO dto) {
        // TODO 车门解锁、后备箱解锁
        return R.ok();
    }
    /**
     * 业务流程-车门解锁/后备箱解锁
@@ -1361,4 +1353,17 @@
                .distinct()
                .collect(Collectors.toList());
    }
    @ApiOperation(value = "根据VIN码查询车辆信息", response = XpErrorType.class, tags = "远程代驾")
    @GetMapping("/logan/assistance/v1/vehicle/getVehicleListByVin/{vin}")
    public R<VehicleListByVinVo> getVehicleListByVin(@PathVariable String vin) {
        XpVehicle vehicle = xpVehicleService.getOne(new QueryWrapper<XpVehicle>().eq("vehicle_vin", SensitiveDataCryptoUtil.encrypt(vin))
                .eq("is_deleted", 0));
        VehicleListByVinVo vehicleListByVinVo = new VehicleListByVinVo();
        BeanUtil.copyProperties(vehicle, vehicleListByVinVo);
        vehicleListByVinVo.setVin(vin);
        return R.ok(vehicleListByVinVo);
    }
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverBaseInfoDTO.java
New file
@@ -0,0 +1,165 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台网约车驾驶员基本信息(JSYJB) DTO
 */
@Data
@ApiModel("监管平台网约车驾驶员基本信息")
public class RegulationDriverBaseInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("注册地行政区划编号")
    private String address;
    @ApiModelProperty("驾驶员姓名")
    private String driverName;
    @ApiModelProperty("驾驶员身份证号")
    private String driverIDCard;
    @ApiModelProperty("驾驶员联系电话")
    private String driverPhone;
    @ApiModelProperty("驾驶员性别")
    private String driverGender;
    @ApiModelProperty("出生日期")
    private String driverBirthday;
    @ApiModelProperty("国籍")
    private String driverNationality;
    @ApiModelProperty("驾驶员民族")
    private String driverNation;
    @ApiModelProperty("驾驶员婚姻状况")
    private String driverMaritalStatus;
    @ApiModelProperty("政治面貌")
    private String driverPoliticalIdentity;
    @ApiModelProperty("驾驶员外语能力")
    private String driverLanguageLevel;
    @ApiModelProperty("驾驶员学历")
    private String driverEducation;
    @ApiModelProperty("户口登记机关名称")
    private String driverCensus;
    @ApiModelProperty("户口地址或常住地址")
    private String driverAddress;
    @ApiModelProperty("驾驶员通信地址")
    private String driverContactAddress;
    @ApiModelProperty("驾驶员照片文件")
    private String photo;
    @ApiModelProperty("驾驶员照片文件编号")
    private String photoId;
    @ApiModelProperty("机动车驾驶证号")
    private String licenseId;
    @ApiModelProperty("机动车驾驶证扫描件文件")
    private String licensePhoto;
    @ApiModelProperty("机动车驾驶证扫描件文件编号")
    private String licensePhotoId;
    @ApiModelProperty("准驾车型")
    private String driverType;
    @ApiModelProperty("初次领取驾驶证日期")
    private String getDriverLicenseDate;
    @ApiModelProperty("驾驶证有效期起")
    private String driverLicenseOn;
    @ApiModelProperty("驾驶证有效期止")
    private String driverLicenseOff;
    @ApiModelProperty("是否巡游出租汽车驾驶员")
    private String taxiDriver;
    @ApiModelProperty("网络预约出租汽车驾驶员证号")
    private String certificateA;
    @ApiModelProperty("巡游出租汽车驾驶员资格证号")
    private String certificateB;
    @ApiModelProperty("网络预约出租汽车驾驶员证发证机构")
    private String networkCarIssueOrganization;
    @ApiModelProperty("资格证发证日期")
    private String networkCarIssueDate;
    @ApiModelProperty("初次领取资格证日期")
    private String getNetworkCarProofDate;
    @ApiModelProperty("网络预约出租汽车驾驶员证有效期起")
    private String networkCarProofOn;
    @ApiModelProperty("网络预约出租汽车驾驶员证有效期止")
    private String networkCarProofOff;
    @ApiModelProperty("报名日期")
    private String registerDate;
    @ApiModelProperty("是否专职驾驶员")
    private String fullTimeDriver;
    @ApiModelProperty("是否在驾驶员黑名单内")
    private String inDriverBlacklist;
    @ApiModelProperty("服务类型")
    private String commercialType;
    @ApiModelProperty("驾驶员合同(或协议)签署公司")
    private String contractCompany;
    @ApiModelProperty("合同(或协议)有效期起")
    private String contractOn;
    @ApiModelProperty("合同(或协议)有效期止")
    private String contractOff;
    @ApiModelProperty("紧急情况联系人")
    private String emergencyContact;
    @ApiModelProperty("紧急情况联系人电话")
    private String emergencyContactPhone;
    @ApiModelProperty("紧急情况联系人通讯地址")
    private String emergencyContactAddress;
    @ApiModelProperty("状态")
    private String state;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("奖惩情况")
    private String rewardPunishment;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverCancelRegisterInfoDTO.java
New file
@@ -0,0 +1,63 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台驾驶员注销注册(JSYZXZC) DTO
 */
@Data
@ApiModel("监管平台驾驶员注销注册信息")
public class RegulationDriverCancelRegisterInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("机动车驾驶员姓名")
    private String driverName;
    @ApiModelProperty("驾驶员身份证")
    private String driverIDCard;
    @ApiModelProperty("驾驶员联系电话")
    private String driverPhone;
    @ApiModelProperty("驾驶员性别")
    private String driverGender;
    @ApiModelProperty("网络预约出租汽车驾驶员证号")
    private String driCertNo;
    @ApiModelProperty("上传扫描件类型")
    private String contractType;
    @ApiModelProperty("上传扫描件")
    private String contractPhoto;
    @ApiModelProperty("合同失效时间")
    private String invalidTime;
    @ApiModelProperty("注销营运原因")
    private String cancelReason;
    @ApiModelProperty("注销时间")
    private String cancelTime;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverContractInfoDTO.java
New file
@@ -0,0 +1,90 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台驾驶员合同信息(GTJSYHT) DTO
 */
@Data
@ApiModel("监管平台驾驶员合同信息")
public class RegulationDriverContractInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("行政区划编号")
    private String address;
    @ApiModelProperty("驾驶员姓名")
    private String driverName;
    @ApiModelProperty("电话")
    private String driTel;
    @ApiModelProperty("性别")
    private String gender;
    @ApiModelProperty("出生日期")
    private String birthday;
    @ApiModelProperty("民族")
    private String driverNation;
    @ApiModelProperty("身份证类别")
    private String idType;
    @ApiModelProperty("证件号码")
    private String idNo;
    @ApiModelProperty("网络预约出租汽车驾驶员证号")
    private String driCertNo;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("车辆识别VIN码")
    private String vin;
    @ApiModelProperty("网络预约出租汽车运输证号")
    private String vehCertNo;
    @ApiModelProperty("类型")
    private String type;
    @ApiModelProperty("上传扫描件类型")
    private String contractType;
    @ApiModelProperty("上传扫描件")
    private String contractPhoto;
    @ApiModelProperty("合同状态")
    private String contractStatus;
    @ApiModelProperty("合同签订时间")
    private String signTime;
    @ApiModelProperty("合同生效时间")
    private String validTime;
    @ApiModelProperty("合同失效时间")
    private String invalidTime;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverMobileTerminalInfoDTO.java
New file
@@ -0,0 +1,54 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台网约车驾驶员移动终端信息(JSYYDZD) DTO
 */
@Data
@ApiModel("监管平台网约车驾驶员移动终端信息")
public class RegulationDriverMobileTerminalInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("注册地行政区代码")
    private String address;
    @ApiModelProperty("机动车驾驶证号")
    private String licenseId;
    @ApiModelProperty("驾驶员联系电话")
    private String driverPhone;
    @ApiModelProperty("司机手机运营商")
    private String netType;
    @ApiModelProperty("司机使用APP版本号")
    private String appVersion;
    @ApiModelProperty("使用地图类型")
    private String mapType;
    @ApiModelProperty("状态")
    private String state;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverPositionInfoDTO.java
New file
@@ -0,0 +1,75 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台驾驶员定位信息(JSYDW) DTO
 */
@Data
@ApiModel("监管平台驾驶员定位信息")
public class RegulationDriverPositionInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("当前位置行政区划编号")
    private String address;
    @ApiModelProperty("驾驶员报备地行政区划代码")
    private String driverRegionCode;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("车牌颜色")
    private String plateColor;
    @ApiModelProperty("定位时间")
    private String positionTime;
    @ApiModelProperty("经度")
    private String longitude;
    @ApiModelProperty("纬度")
    private String latitude;
    @ApiModelProperty("瞬时速度")
    private String speed;
    @ApiModelProperty("方向角")
    private String direction;
    @ApiModelProperty("海拔高度")
    private String elevation;
    @ApiModelProperty("里程")
    private String mileage;
    @ApiModelProperty("坐标加密标识")
    private String encrypt;
    @ApiModelProperty("营运状态")
    private String bizStatus;
    @ApiModelProperty("订单编号")
    private String orderId;
    @ApiModelProperty("机动车驾驶证号")
    private String licenseId;
    @ApiModelProperty("驾驶员姓名")
    private String driverName;
    @ApiModelProperty("网络预约出租汽车驾驶员证号")
    private String driverCertCard;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverPunishInfoDTO.java
New file
@@ -0,0 +1,48 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台驾驶员处罚信息(JSYCF) DTO
 */
@Data
@ApiModel("监管平台驾驶员处罚信息")
public class RegulationDriverPunishInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("机动车驾驶证号")
    private String licenseId;
    @ApiModelProperty("驾驶员姓名")
    private String driverName;
    @ApiModelProperty("驾驶员联系电话")
    private String driverPhone;
    @ApiModelProperty("驾驶员身份证号")
    private String driverIDCard;
    @ApiModelProperty("网络预约出租汽车驾驶员证号")
    private String driverCertCard;
    @ApiModelProperty("处罚时间")
    private String punishTime;
    @ApiModelProperty("处罚原因")
    private String punishReason;
    @ApiModelProperty("处罚结果")
    private String punishResult;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverRegisterInfoDTO.java
New file
@@ -0,0 +1,75 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台驾驶员注册报备(JSYZCBB) DTO
 */
@Data
@ApiModel("监管平台驾驶员注册报备信息")
public class RegulationDriverRegisterInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("机动车驾驶员姓名")
    private String driverName;
    @ApiModelProperty("驾驶员身份证")
    private String driverIDCard;
    @ApiModelProperty("驾驶员联系电话")
    private String driverPhone;
    @ApiModelProperty("驾驶员性别")
    private String driverGender;
    @ApiModelProperty("机动车驾驶证号")
    private String licenseId;
    @ApiModelProperty("网络预约出租汽车驾驶员证号")
    private String driCertNo;
    @ApiModelProperty("驾驶员合同(或协议)签署公司标识")
    private String contractCompany;
    @ApiModelProperty("类型")
    private String operationType;
    @ApiModelProperty("上传扫描件类型")
    private String contractType;
    @ApiModelProperty("上传扫描件")
    private String contractPhoto;
    @ApiModelProperty("合同状态")
    private String contractStatus;
    @ApiModelProperty("合同签订时间")
    private String signTime;
    @ApiModelProperty("合同生效时间")
    private String validTime;
    @ApiModelProperty("合同失效时间")
    private String invalidTime;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverReputationInfoDTO.java
New file
@@ -0,0 +1,63 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台驾驶员信誉信息(JSYXY) DTO
 */
@Data
@ApiModel("监管平台驾驶员信誉信息")
public class RegulationDriverReputationInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("注册地行政区划编号")
    private String address;
    @ApiModelProperty("机动车驾驶证号")
    private String licenseId;
    @ApiModelProperty("完成订单次数")
    private String orderCount;
    @ApiModelProperty("处罚次数")
    private String punishCount;
    @ApiModelProperty("乘客投诉次数")
    private String complaintCount;
    @ApiModelProperty("服务质量信誉等级")
    private String level;
    @ApiModelProperty("服务质量信誉考核日期")
    private String testDate;
    @ApiModelProperty("服务质量信誉考核机构")
    private String testDepartment;
    @ApiModelProperty("驾驶员姓名")
    private String driverName;
    @ApiModelProperty("网络预约出租汽车驾驶员证号")
    private String driverCertCard;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("网络预约出租汽车运输证号")
    private String vehicleCertNo;
    @ApiModelProperty("服务质量信誉考核结果")
    private String testResult;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverStatisticsInfoDTO.java
New file
@@ -0,0 +1,57 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台网约车驾驶员统计信息(JSYTJ) DTO
 */
@Data
@ApiModel("监管平台网约车驾驶员统计信息")
public class RegulationDriverStatisticsInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("注册地行政区划代码")
    private String address;
    @ApiModelProperty("机动车驾驶证号")
    private String licenseId;
    @ApiModelProperty("统计周期")
    private String cycle;
    @ApiModelProperty("完成订单次数")
    private String orderCount;
    @ApiModelProperty("交通违章次数")
    private String trafficViolationCount;
    @ApiModelProperty("交通事故次数")
    private String trafficAccidentCount;
    @ApiModelProperty("被投诉次数")
    private String complainedCount;
    @ApiModelProperty("接单违约次数")
    private String violateRecord;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverTrainingInfoDTO.java
New file
@@ -0,0 +1,57 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台网约车驾驶员培训信息(JSYPX) DTO
 */
@Data
@ApiModel("监管平台网约车驾驶员培训信息")
public class RegulationDriverTrainingInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("注册地行政区划代码")
    private String address;
    @ApiModelProperty("机动车驾驶证号")
    private String licenseId;
    @ApiModelProperty("驾驶员培训课程名称")
    private String courseName;
    @ApiModelProperty("培训课程日期")
    private String courseDate;
    @ApiModelProperty("培训开始时间")
    private String startTime;
    @ApiModelProperty("培训结束时间")
    private String stopTime;
    @ApiModelProperty("培训时长")
    private String duration;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("培训类型")
    private String type;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationDriverVehicleRelationInfoDTO.java
New file
@@ -0,0 +1,54 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台人车对应关系信息(RCDYGX) DTO
 */
@Data
@ApiModel("监管平台人车对应关系信息")
public class RegulationDriverVehicleRelationInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("注册地行政区划编号")
    private String address;
    @ApiModelProperty("驾驶员姓名")
    private String curDriverName;
    @ApiModelProperty("驾驶员的网络预约出租汽车驾驶员证号")
    private String curDriverCertNo;
    @ApiModelProperty("车辆车牌号码")
    private String curVehicleNo;
    @ApiModelProperty("车辆的网络预约出租汽车运输证号")
    private String curVehicleCertNo;
    @ApiModelProperty("实际人车对应开始时间")
    private String curTimeOn;
    @ApiModelProperty("实际人车对应结束时间")
    private String curTimeOff;
    @ApiModelProperty("状态")
    private String state;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationOperateArriveInfoDTO.java
New file
@@ -0,0 +1,93 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台营运到达(YYDD) DTO
 */
@Data
@ApiModel("监管平台营运到达信息")
public class RegulationOperateArriveInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("订单号")
    private String orderId;
    @ApiModelProperty("实际下车地点")
    private String destArea;
    @ApiModelProperty("车辆实际到达经度")
    private String destLongitude;
    @ApiModelProperty("车辆实际到达纬度")
    private String destLatitude;
    @ApiModelProperty("坐标加密标识")
    private String encrypt;
    @ApiModelProperty("实际下车时间")
    private String destTime;
    @ApiModelProperty("载客里程")
    private String driveMile;
    @ApiModelProperty("载客时间")
    private String driveTime;
    @ApiModelProperty("派单成功时间")
    private String distributeTime;
    @ApiModelProperty("到达地点行政区划编号")
    private String address;
    @ApiModelProperty("驾驶员姓名")
    private String driverName;
    @ApiModelProperty("驾驶员联系电话")
    private String driverPhone;
    @ApiModelProperty("驾驶员身份证号")
    private String driverIDCard;
    @ApiModelProperty("网络预约出租汽车驾驶员证号")
    private String driverCertCard;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("实际上车时间")
    private String depTime;
    @ApiModelProperty("车辆实际出发经度")
    private String depLongitude;
    @ApiModelProperty("车辆实际出发纬度")
    private String depLatitude;
    @ApiModelProperty("乘客称谓")
    private String passengerName;
    @ApiModelProperty("乘客手机号")
    private String passengerPhone;
    @ApiModelProperty("应收金额")
    private String price;
    @ApiModelProperty("订单下达时间")
    private String orderTime;
    @ApiModelProperty("订单是否来源于第三方聚合平台")
    private String isFromThirdPlatform;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationOperateDepartInfoDTO.java
New file
@@ -0,0 +1,96 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台营运出发(YYCF) DTO
 */
@Data
@ApiModel("监管平台营运出发信息")
public class RegulationOperateDepartInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("订单编号")
    private String orderId;
    @ApiModelProperty("机动车驾驶证号")
    private String licenseId;
    @ApiModelProperty("乘客电话")
    private String passengerPhone;
    @ApiModelProperty("运价类型编码")
    private String fareType;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("车牌颜色")
    private String plateColor;
    @ApiModelProperty("车辆实际出发经度")
    private String depLongitude;
    @ApiModelProperty("车辆实际出发纬度")
    private String depLatitude;
    @ApiModelProperty("坐标加密标识")
    private String encrypt;
    @ApiModelProperty("实际上车时间")
    private String depTime;
    @ApiModelProperty("空驶里程")
    private String waitMile;
    @ApiModelProperty("乘客等待时间")
    private String passengerWaitTime;
    @ApiModelProperty("派单成功时间")
    private String distributeTime;
    @ApiModelProperty("司机等待时间")
    private String driveWaitTime;
    @ApiModelProperty("行政区划编号")
    private String address;
    @ApiModelProperty("驾驶员姓名")
    private String driverName;
    @ApiModelProperty("驾驶员身份证号")
    private String driverIDCard;
    @ApiModelProperty("驾驶员手机号")
    private String driverPhone;
    @ApiModelProperty("网络预约出租汽车驾驶员证号")
    private String driverCertCard;
    @ApiModelProperty("乘客称谓")
    private String passengerName;
    @ApiModelProperty("乘客性别")
    private String passengerSex;
    @ApiModelProperty("订单下达时间")
    private String orderTime;
    @ApiModelProperty("实际上车地点")
    private String depArea;
    @ApiModelProperty("订单是否来源于第三方聚合平台")
    private String isFromThirdPlatform;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationOperatePayInfoDTO.java
New file
@@ -0,0 +1,162 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台营运支付(YYZF) DTO
 */
@Data
@ApiModel("监管平台营运支付信息")
public class RegulationOperatePayInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("订单编号")
    private String orderId;
    @ApiModelProperty("上车位置行政区划编码")
    private String onArea;
    @ApiModelProperty("下车位置行政区划编码")
    private String offArea;
    @ApiModelProperty("机动车驾驶员姓名")
    private String driverName;
    @ApiModelProperty("机动车驾驶证号")
    private String licenseId;
    @ApiModelProperty("运价类型编码")
    private String fareType;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("车牌颜色")
    private String plateColor;
    @ApiModelProperty("预计上车时间")
    private String bookDepTime;
    @ApiModelProperty("等待时间")
    private String waitTime;
    @ApiModelProperty("车辆实际出发经度")
    private String depLongitude;
    @ApiModelProperty("车辆实际出发纬度")
    private String depLatitude;
    @ApiModelProperty("实际上车地点")
    private String depArea;
    @ApiModelProperty("实际上车时间")
    private String depTime;
    @ApiModelProperty("车辆实际到达经度")
    private String destLongitude;
    @ApiModelProperty("车辆实际到达纬度")
    private String destLatitude;
    @ApiModelProperty("实际下车地点")
    private String destArea;
    @ApiModelProperty("实际下车时间")
    private String destTime;
    @ApiModelProperty("预定车型")
    private String bookModel;
    @ApiModelProperty("实际使用车型")
    private String model;
    @ApiModelProperty("载客里程")
    private String driveMile;
    @ApiModelProperty("载客时间")
    private String driveTime;
    @ApiModelProperty("空驶里程")
    private String waitMile;
    @ApiModelProperty("实收金额")
    private String factPrice;
    @ApiModelProperty("应收金额")
    private String price;
    @ApiModelProperty("现金支付金额")
    private String cashPrice;
    @ApiModelProperty("电子支付机构")
    private String lineName;
    @ApiModelProperty("电子支付金额")
    private String linePrice;
    @ApiModelProperty("POS机支付机构")
    private String posName;
    @ApiModelProperty("POS机支付金额")
    private String posPrice;
    @ApiModelProperty("优惠金额")
    private String benfitPrice;
    @ApiModelProperty("预约服务费")
    private String bookTip;
    @ApiModelProperty("附加费")
    private String passengerTip;
    @ApiModelProperty("高峰时段时加价金额")
    private String peakUpPrice;
    @ApiModelProperty("夜间时段里程加价金额")
    private String nightUpPrice;
    @ApiModelProperty("远途加价金额")
    private String farUpPrice;
    @ApiModelProperty("其他加价金额")
    private String otherUpPrice;
    @ApiModelProperty("结算状态")
    private String payState;
    @ApiModelProperty("结算时间")
    private String payTime;
    @ApiModelProperty("订单完成时间")
    private String orderMatchTime;
    @ApiModelProperty("发票状态")
    private String invoiceStatus;
    @ApiModelProperty("驾驶员身份证号")
    private String driverIDCard;
    @ApiModelProperty("驾驶员手机号")
    private String driverPhone;
    @ApiModelProperty("网络预约出租汽车驾驶员证号")
    private String driverCertCard;
    @ApiModelProperty("订单下达时间")
    private String orderTime;
    @ApiModelProperty("订单是否来源于第三方聚合平台")
    private String isFromThirdPlatform;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationOrderCancelInfoDTO.java
New file
@@ -0,0 +1,45 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台订单撤销(DDCX) DTO
 */
@Data
@ApiModel("监管平台订单撤销信息")
public class RegulationOrderCancelInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("上车地点行政区划代码")
    private String address;
    @ApiModelProperty("订单编号")
    private String orderId;
    @ApiModelProperty("订单下达时间")
    private String orderTime;
    @ApiModelProperty("撤单时间")
    private String cancelTime;
    @ApiModelProperty("撤销发起方")
    private String initiator;
    @ApiModelProperty("撤销类型代码")
    private String cancelTypeCode;
    @ApiModelProperty("撤销或违约原因")
    private String cancelReason;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationOrderCreateInfoDTO.java
New file
@@ -0,0 +1,99 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台订单发起(DDFQ) DTO
 */
@Data
@ApiModel("监管平台订单发起信息")
public class RegulationOrderCreateInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("发起地行政区划编号")
    private String address;
    @ApiModelProperty("订单编号")
    private String orderId;
    @ApiModelProperty("预计用车时间")
    private String departTime;
    @ApiModelProperty("订单下达时间")
    private String orderTime;
    @ApiModelProperty("乘客电话")
    private String passengerPhone;
    @ApiModelProperty("乘客备注")
    private String passengerNote;
    @ApiModelProperty("预计出发地点详细地址")
    private String departure;
    @ApiModelProperty("预计出发地点经度")
    private String depLongitude;
    @ApiModelProperty("预计出发地点纬度")
    private String depLatitude;
    @ApiModelProperty("预计目的地点详细地址")
    private String destination;
    @ApiModelProperty("预计目的地点经度")
    private String destLongitude;
    @ApiModelProperty("预计目的地点纬度")
    private String destLatitude;
    @ApiModelProperty("坐标加密标识")
    private String encrypt;
    @ApiModelProperty("运价类型编码")
    private String fareType;
    @ApiModelProperty("下单来源")
    private String orderSource;
    @ApiModelProperty("乘客称谓")
    private String psgName;
    @ApiModelProperty("乘客性别")
    private String psgGender;
    @ApiModelProperty("乘车人数")
    private String psgTotal;
    @ApiModelProperty("是否预约订单")
    private String isReserve;
    @ApiModelProperty("预计里程")
    private String preMile;
    @ApiModelProperty("预计用时")
    private String preTime;
    @ApiModelProperty("预计费用")
    private String preFare;
    @ApiModelProperty("出发城市")
    private String departCity;
    @ApiModelProperty("目的城市")
    private String destCity;
    @ApiModelProperty("订单是否来源于第三方聚合平台")
    private String isFromThirdPlatform;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationOrderMatchInfoDTO.java
New file
@@ -0,0 +1,105 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台订单成功(DDCG) DTO
 */
@Data
@ApiModel("监管平台订单成功信息")
public class RegulationOrderMatchInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("发起地行政区划代码")
    private String address;
    @ApiModelProperty("订单编号")
    private String orderId;
    @ApiModelProperty("车辆经度")
    private String longitude;
    @ApiModelProperty("车辆纬度")
    private String latitude;
    @ApiModelProperty("坐标加密标识")
    private String encrypt;
    @ApiModelProperty("机动车驾驶证号")
    private String licenseId;
    @ApiModelProperty("驾驶员联系电话")
    private String driverPhone;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("车牌颜色")
    private String plateColor;
    @ApiModelProperty("派单成功时间")
    private String distributeTime;
    @ApiModelProperty("订单下达时间")
    private String orderTime;
    @ApiModelProperty("网络预约出租汽车运输证号")
    private String carCertNo;
    @ApiModelProperty("驾驶员姓名")
    private String driverName;
    @ApiModelProperty("驾驶员身份证号")
    private String idNo;
    @ApiModelProperty("网络预约出租汽车驾驶员证号")
    private String driCertNo;
    @ApiModelProperty("出发城市")
    private String departCity;
    @ApiModelProperty("目的城市")
    private String destCity;
    @ApiModelProperty("预计出发地点")
    private String departLocale;
    @ApiModelProperty("预计出发地点详细地址")
    private String departLocaleDetail;
    @ApiModelProperty("预计出发地点经度")
    private String departLon;
    @ApiModelProperty("预计出发地点纬度")
    private String departLat;
    @ApiModelProperty("预计目的地点")
    private String desLocale;
    @ApiModelProperty("预计目的地点详细地址")
    private String desLocaleDetail;
    @ApiModelProperty("预计目的地点经度")
    private String desLon;
    @ApiModelProperty("预计目的地点纬度")
    private String desLat;
    @ApiModelProperty("上一笔订单实际下车时间")
    private String latestDestTime;
    @ApiModelProperty("订单是否来源于第三方聚合平台")
    private String isFromThirdPlatform;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationOrderViolationInfoDTO.java
New file
@@ -0,0 +1,75 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台订单违约(DDWY) DTO
 */
@Data
@ApiModel("监管平台订单违约信息")
public class RegulationOrderViolationInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("行政区划编号")
    private String address;
    @ApiModelProperty("订单编号")
    private String orderId;
    @ApiModelProperty("订单下达时间")
    private String orderTime;
    @ApiModelProperty("网络预约出租汽车驾驶员证号")
    private String driCertNo;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("违约方")
    private String breakPart;
    @ApiModelProperty("违约原因")
    private String breakReason;
    @ApiModelProperty("乘客电话")
    private String psgTel;
    @ApiModelProperty("订单违约时间")
    private String breakTime;
    @ApiModelProperty("驾驶员身份证号")
    private String idNo;
    @ApiModelProperty("驾驶员姓名")
    private String driverName;
    @ApiModelProperty("驾驶员手机号")
    private String driverPhone;
    @ApiModelProperty("网络预约出租汽车运输证号")
    private String certificate;
    @ApiModelProperty("派单成功时间")
    private String distributeTime;
    @ApiModelProperty("预计出发地点")
    private String departLocale;
    @ApiModelProperty("预计目的地点")
    private String desLocale;
    @ApiModelProperty("订单是否来源于第三方聚合平台")
    private String isFromThirdPlatform;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPassengerBaseInfoDTO.java
New file
@@ -0,0 +1,48 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台网约车乘客基本信息(CKJB) DTO
 */
@Data
@ApiModel("监管平台网约车乘客基本信息")
public class RegulationPassengerBaseInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("注册时间")
    private String registerDate;
    @ApiModelProperty("乘客电话")
    private String passengerPhone;
    @ApiModelProperty("乘客称谓")
    private String passengerName;
    @ApiModelProperty("乘客性别")
    private String passengerSex;
    @ApiModelProperty("状态")
    private String state;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPassengerComplaintInfoDTO.java
New file
@@ -0,0 +1,51 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台乘客投诉处理信息(CKTSCL) DTO
 */
@Data
@ApiModel("监管平台乘客投诉处理信息")
public class RegulationPassengerComplaintInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("订单编号")
    private String orderId;
    @ApiModelProperty("投诉时间")
    private String complaintTime;
    @ApiModelProperty("投诉图片")
    private String photo;
    @ApiModelProperty("投诉处理状态")
    private String dealState;
    @ApiModelProperty("投诉文字内容")
    private String detail;
    @ApiModelProperty("投诉处理结果")
    private String result;
    @ApiModelProperty("投诉回访时间")
    private String visitTime;
    @ApiModelProperty("投诉回访结果")
    private String visitResult;
    @ApiModelProperty("投诉类型")
    private String complaintType;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPassengerEvaluateInfoDTO.java
New file
@@ -0,0 +1,54 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台乘客评价信息(CKPJ) DTO
 */
@Data
@ApiModel("监管平台乘客评价信息")
public class RegulationPassengerEvaluateInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("订单编号")
    private String orderId;
    @ApiModelProperty("评价时间")
    private String evaluateTime;
    @ApiModelProperty("服务满意度")
    private String serviceScore;
    @ApiModelProperty("驾驶员满意度")
    private String driverScore;
    @ApiModelProperty("车辆满意度")
    private String vehicleScore;
    @ApiModelProperty("评价文字内容")
    private String detail;
    @ApiModelProperty("评价图片")
    private String photoDetail;
    @ApiModelProperty("补充评价内容")
    private String supDetail;
    @ApiModelProperty("补充评价时间")
    private String supTime;
    @ApiModelProperty("整体满意度")
    private String totalScore;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformAggregationInfoDTO.java
New file
@@ -0,0 +1,45 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台合作聚合平台信息(PTJHPTXX) DTO
 */
@Data
@ApiModel("监管平台合作聚合平台信息")
public class RegulationPlatformAggregationInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("企业名称")
    private String companyName;
    @ApiModelProperty("统一社会信用代码")
    private String identifier;
    @ApiModelProperty("第三方合作的聚合平台名称")
    private String thirdPlatformName;
    @ApiModelProperty("状态")
    private String state;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformInvestorInfoDTO.java
New file
@@ -0,0 +1,48 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台网约车平台投资人信息(PTTZR) DTO
 */
@Data
@ApiModel("监管平台网约车平台投资人信息")
public class RegulationPlatformInvestorInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("所属平台公司统一社会信用代码")
    private String epCode;
    @ApiModelProperty("投资人")
    private String investerName;
    @ApiModelProperty("投资人证件类型")
    private String invIdType;
    @ApiModelProperty("投资人证件号码")
    private String invIdCode;
    @ApiModelProperty("投资人资金额")
    private String money;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformLicenseInfoDTO.java
New file
@@ -0,0 +1,60 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台网约车平台公司经营许可信息(CPTJYXK) DTO
 */
@Data
@ApiModel("监管平台网约车平台公司经营许可信息")
public class RegulationPlatformLicenseInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("地址行政区划代码")
    private String address;
    @ApiModelProperty("经营许可证号")
    private String certificate;
    @ApiModelProperty("经营区域")
    private String operationArea;
    @ApiModelProperty("业户名称")
    private String ownerName;
    @ApiModelProperty("发证机关")
    private String organization;
    @ApiModelProperty("有效期起")
    private String startDate;
    @ApiModelProperty("有效期止")
    private String stopDate;
    @ApiModelProperty("发证日期")
    private String certifyDate;
    @ApiModelProperty("状态")
    private String state;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformOperationRegisterInfoDTO.java
New file
@@ -0,0 +1,78 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台平台营运报备(PTYYBB) DTO
 */
@Data
@ApiModel("监管平台平台营运报备信息")
public class RegulationPlatformOperationRegisterInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("企业名称")
    private String companyName;
    @ApiModelProperty("统一社会信用代码")
    private String identifier;
    @ApiModelProperty("广州办公联系电话")
    private String contactPhone;
    @ApiModelProperty("广州办公地址")
    private String gzAd;
    @ApiModelProperty("负责人姓名(广州)")
    private String responsible;
    @ApiModelProperty("负责人电话(广州)")
    private String responsibleWay;
    @ApiModelProperty("网约车APP乘客端名称")
    private String psgAppName;
    @ApiModelProperty("网约车APP驾驶员端名称")
    private String driverAppName;
    @ApiModelProperty("投诉电话")
    private String complaintPhone;
    @ApiModelProperty("投诉网址")
    private String complaintUrl;
    @ApiModelProperty("投诉邮箱")
    private String complaintEmail;
    @ApiModelProperty("官网地址")
    private String officialUrl;
    @ApiModelProperty("是否与第三方聚合平台合作")
    private String isThirdPlatform;
    @ApiModelProperty("开始营运/恢复营运日期")
    private String operationDate;
    @ApiModelProperty("类型")
    private String operationType;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformPauseOperationRegisterInfoDTO.java
New file
@@ -0,0 +1,48 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台平台暂停营运报备(PTZTYYBB) DTO
 */
@Data
@ApiModel("监管平台平台暂停营运报备信息")
public class RegulationPlatformPauseOperationRegisterInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("企业名称")
    private String companyName;
    @ApiModelProperty("统一社会信用代码")
    private String identifier;
    @ApiModelProperty("暂停营运原因")
    private String pauseReason;
    @ApiModelProperty("暂停营运开始日期")
    private String pauseTime;
    @ApiModelProperty("暂停营运上报附件")
    private String pauseReasonPhoto;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformPayInfoDTO.java
New file
@@ -0,0 +1,54 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台网约车平台公司支付信息(PTZF) DTO
 */
@Data
@ApiModel("监管平台网约车平台公司支付信息")
public class RegulationPlatformPayInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("支付机构名称")
    private String payName;
    @ApiModelProperty("支付机构代码")
    private String payId;
    @ApiModelProperty("支付机构类型")
    private String payType;
    @ApiModelProperty("支付业务范围")
    private String payScope;
    @ApiModelProperty("备付金银行")
    private String prepareBank;
    @ApiModelProperty("统计日期")
    private String countDate;
    @ApiModelProperty("状态")
    private String state;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformPriceInfoDTO.java
New file
@@ -0,0 +1,108 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台网约车平台公司计程计价方式信息(PTYJ) DTO
 */
@Data
@ApiModel("监管平台网约车平台公司计程计价方式信息")
public class RegulationPlatformPriceInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("地址行政区划代码")
    private String address;
    @ApiModelProperty("运价类型编码")
    private String fareType;
    @ApiModelProperty("运价类型说明")
    private String fareTypeNote;
    @ApiModelProperty("运价有效期起")
    private String fareValidOn;
    @ApiModelProperty("运价有效期止")
    private String fareValidOff;
    @ApiModelProperty("起步价")
    private String startFare;
    @ApiModelProperty("起步里程")
    private String startMile;
    @ApiModelProperty("加价单价")
    private String upPrice;
    @ApiModelProperty("加价起算里程")
    private String upPriceStartMile;
    @ApiModelProperty("早高峰开始时间")
    private String morningPeakTimeOn;
    @ApiModelProperty("早高峰结束时间")
    private String morningPeakTimeOff;
    @ApiModelProperty("晚高峰开始时间")
    private String eveningPeakTimeOn;
    @ApiModelProperty("晚高峰结束时间")
    private String eveningPeakTimeOff;
    @ApiModelProperty("其他高峰开始时间")
    private String otherPeakTimeOn;
    @ApiModelProperty("其他高峰结束时间")
    private String otherPeakTimeOff;
    @ApiModelProperty("高峰时段单价")
    private String peakUnitPrice;
    @ApiModelProperty("高峰加价起算里程")
    private String peakPriceStartMile;
    @ApiModelProperty("每公里单价")
    private String unitPricePerMile;
    @ApiModelProperty("远途加价金额")
    private String longDistancePrice;
    @ApiModelProperty("远途加价起算里程")
    private String longDistanceStartMile;
    @ApiModelProperty("低速等候费")
    private String lowSpeedPricePerMinute;
    @ApiModelProperty("夜间里程加价")
    private String nightPricePerMile;
    @ApiModelProperty("夜间等候加价")
    private String nightPricePerMinute;
    @ApiModelProperty("其他费用")
    private String otherPrice;
    @ApiModelProperty("状态")
    private String state;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("运价规则URL")
    private String fareRuleUrl;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationPlatformServiceInfoDTO.java
New file
@@ -0,0 +1,69 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台网约车平台公司服务机构信息(PTFWJG) DTO
 */
@Data
@ApiModel("监管平台网约车平台公司服务机构信息")
public class RegulationPlatformServiceInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("地址行政区划代码")
    private String address;
    @ApiModelProperty("服务机构名称")
    private String serviceName;
    @ApiModelProperty("服务机构编号")
    private String serviceNo;
    @ApiModelProperty("详细地址")
    private String detailAddress;
    @ApiModelProperty("负责人姓名")
    private String responsibleName;
    @ApiModelProperty("负责人电话")
    private String responsiblePhone;
    @ApiModelProperty("管理人姓名")
    private String managerName;
    @ApiModelProperty("管理人电话")
    private String managerPhone;
    @ApiModelProperty("联系电话")
    private String contactPhone;
    @ApiModelProperty("邮箱地址")
    private String mailAddress;
    @ApiModelProperty("创建日期")
    private String createDate;
    @ApiModelProperty("状态")
    private String state;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationVehicleBaseInfoDTO.java
New file
@@ -0,0 +1,148 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * 监管平台网约车车辆基本信息(CLJB) DTO
 */
@Data
@ApiModel("监管平台网约车车辆基本信息")
public class RegulationVehicleBaseInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("车辆所在城市行政区划编号")
    private String address;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("车牌颜色")
    private String plateColor;
    @ApiModelProperty("核定载客位")
    private String seats;
    @ApiModelProperty("车辆厂牌")
    private String brand;
    @ApiModelProperty("车辆型号")
    private String model;
    @ApiModelProperty("车辆类型")
    private String vehicleType;
    @ApiModelProperty("车辆所有人")
    private String ownerName;
    @ApiModelProperty("车辆所有人类型")
    private String ownerType;
    @ApiModelProperty("车身颜色")
    private String vehicleColor;
    @ApiModelProperty("车辆发动机号")
    private String engineId;
    @ApiModelProperty("车辆识别VIN码")
    private String vin;
    @ApiModelProperty("车辆注册日期")
    private String certifyDateA;
    @ApiModelProperty("车辆燃料类型")
    private String fuelType;
    @ApiModelProperty("车辆发动机排量")
    private String engineDisplace;
    @ApiModelProperty("发动机功率")
    private String enginePower;
    @ApiModelProperty("车辆轴距")
    private String wheelBase;
    @ApiModelProperty("车辆照片文件内容(Base64)")
    private String photo;
    @ApiModelProperty("车辆照片文件编号")
    private String photoId;
    @ApiModelProperty("网络预约出租汽车运输证号")
    private String certificate = "无";
    @ApiModelProperty("网络预约出租汽车运输证发证机构")
    private String transAgency = "无";
    @ApiModelProperty("车辆经营区域")
    private String transArea;
    @ApiModelProperty("网络预约出租汽车运输证有效期起")
    private String transDateStart = "0";
    @ApiModelProperty("网络预约出租汽车运输证有效期止")
    private String transDateStop = "0";
    @ApiModelProperty("网约车初次登记日期")
    private String certifyDateB;
    @ApiModelProperty("车辆检修状态")
    private String fixState;
    @ApiModelProperty("车辆下次年检时间")
    private String nextFixDate;
    @ApiModelProperty("车辆年度审验状态")
    private String checkState;
    @ApiModelProperty("车辆年度审验日期")
    private String checkDate;
    @ApiModelProperty("网约车发票打印设备序列号")
    private String feePrintId;
    @ApiModelProperty("卫星定位装置品牌")
    private String gpsBrand;
    @ApiModelProperty("卫星定位装置型号")
    private String gpsModel;
    @ApiModelProperty("卫星定位装置IMEI号")
    private String gpsImei;
    @ApiModelProperty("卫星定位装置安装日期")
    private String gpsInstallDate;
    @ApiModelProperty("报备日期")
    private String registerDate;
    @ApiModelProperty("服务类型")
    private String commercialType;
    @ApiModelProperty("运价类型编码")
    private String fareType;
    @ApiModelProperty("状态")
    private String state = "0";
    @ApiModelProperty("操作标识")
    private String flag = "1";
    @ApiModelProperty("更新时间")
    private String updateTime = LocalDateTime.now().format(MinistryOfTransport.DATA_TIME_FORMATTER);
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationVehicleCancelReportInfoDTO.java
New file
@@ -0,0 +1,48 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台车辆注销报备(CLZXBB) DTO
 */
@Data
@ApiModel("监管平台车辆注销报备信息")
public class RegulationVehicleCancelReportInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("车牌颜色")
    private String plateColor;
    @ApiModelProperty("注销营运原因")
    private String cancelReason;
    @ApiModelProperty("注销日期")
    private String cancelDate;
    @ApiModelProperty("注销上报附件")
    private String cancelPhoto;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationVehicleInsuranceInfoDTO.java
New file
@@ -0,0 +1,57 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台网约车车辆保险信息(CLBX) DTO
 */
@Data
@ApiModel("监管平台网约车车辆保险信息")
public class RegulationVehicleInsuranceInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("车牌颜色")
    private String plateColor;
    @ApiModelProperty("保险公司名称")
    private String insurCom;
    @ApiModelProperty("保险号")
    private String insurNum;
    @ApiModelProperty("保险类型")
    private String insurType;
    @ApiModelProperty("保险金额")
    private String insurCount;
    @ApiModelProperty("保险生效时间")
    private String insurEff;
    @ApiModelProperty("保险到期时间")
    private String insurExp;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationVehicleMileageInfoDTO.java
New file
@@ -0,0 +1,45 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台网约车车辆里程信息(CLLC) DTO
 */
@Data
@ApiModel("监管平台网约车车辆里程信息")
public class RegulationVehicleMileageInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("注册地址行政区划编号")
    private String address;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("车牌颜色")
    private String plateColor;
    @ApiModelProperty("车辆行驶总里程")
    private String totalMile;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationVehicleOperateLoginInfoDTO.java
New file
@@ -0,0 +1,63 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台车辆营运上线(CLYYSX) DTO
 */
@Data
@ApiModel("监管平台车辆营运上线信息")
public class RegulationVehicleOperateLoginInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("行政区划编号")
    private String address;
    @ApiModelProperty("统一社会信用代码")
    private String identifier;
    @ApiModelProperty("驾驶员姓名")
    private String driverName;
    @ApiModelProperty("驾驶员身份证号")
    private String driverIDCard;
    @ApiModelProperty("网络预约出租汽车驾驶员证号")
    private String driverCertCard;
    @ApiModelProperty("驾驶员联系电话")
    private String driverPhone;
    @ApiModelProperty("机动车驾驶证号")
    private String licenseId;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("车牌颜色")
    private String plateColor;
    @ApiModelProperty("车辆营运上线时间")
    private String loginTime;
    @ApiModelProperty("上线经度")
    private String longitude;
    @ApiModelProperty("上线纬度")
    private String latitude;
    @ApiModelProperty("坐标加密标识")
    private String encrypt;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationVehicleOperateLogoutInfoDTO.java
New file
@@ -0,0 +1,81 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台车辆营运下线(CLYYXX) DTO
 */
@Data
@ApiModel("监管平台车辆营运下线信息")
public class RegulationVehicleOperateLogoutInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("行政区划编号")
    private String address;
    @ApiModelProperty("统一社会信用代码")
    private String identifier;
    @ApiModelProperty("驾驶员姓名")
    private String driverName;
    @ApiModelProperty("驾驶员身份证号")
    private String driverIDCard;
    @ApiModelProperty("驾驶员联系电话")
    private String driverPhone;
    @ApiModelProperty("网络预约出租汽车驾驶员证号")
    private String driverCertCard;
    @ApiModelProperty("机动车驾驶证号")
    private String licenseId;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("车牌颜色")
    private String plateColor;
    @ApiModelProperty("车辆营运上线时间")
    private String loginTime;
    @ApiModelProperty("车辆营运下线时间")
    private String logoutTime;
    @ApiModelProperty("下线经度")
    private String longitude;
    @ApiModelProperty("下线纬度")
    private String latitude;
    @ApiModelProperty("坐标加密标识")
    private String encrypt;
    @ApiModelProperty("总载客次数")
    private String driveCount;
    @ApiModelProperty("总载客里程")
    private String driveMile;
    @ApiModelProperty("总载客时长")
    private String driveTime;
    @ApiModelProperty("总应收金额")
    private String price;
    @ApiModelProperty("总实收金额")
    private String factPrice;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/RegulationVehicleOperationRegisterInfoDTO.java
New file
@@ -0,0 +1,60 @@
package com.xiaopeng.vehicleConvoy.model.dto;
import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 监管平台车辆营运报备(CLYYBB) DTO
 */
@Data
@ApiModel("监管平台车辆营运报备信息")
public class RegulationVehicleOperationRegisterInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("唯一标识")
    private String symbol = MinistryOfTransport.DEFAULT_SYMBOL;
    @ApiModelProperty("公司标识")
    private String companyId = MinistryOfTransport.DEFAULT_COMPANY_ID;
    @ApiModelProperty("车牌号码")
    private String vehicleNo;
    @ApiModelProperty("车牌颜色")
    private String plateColor;
    @ApiModelProperty("车辆类型")
    private String vehicleType;
    @ApiModelProperty("车辆所有人")
    private String ownerName;
    @ApiModelProperty("车辆燃料类型")
    private String fuelType;
    @ApiModelProperty("网络预约出租汽车运输证号")
    private String certificate;
    @ApiModelProperty("网络预约出租汽车运输证发证机构")
    private String transAgency;
    @ApiModelProperty("车辆技术状况")
    private String vehicleTec;
    @ApiModelProperty("类型")
    private String operationType;
    @ApiModelProperty("操作标识")
    private String flag;
    @ApiModelProperty("更新时间")
    private String updateTime;
    @ApiModelProperty("协议版本")
    private String protocolVersion = MinistryOfTransport.DEFAULT_PROTOCOL_VERSION;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/VehicleListByVinVo.java
New file
@@ -0,0 +1,21 @@
package com.xiaopeng.vehicleConvoy.model.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel
public class VehicleListByVinVo {
    @ApiModelProperty("车辆vin码")
    private String vin;
    @ApiModelProperty("车牌号")
    private String plateNumber;
    @ApiModelProperty("图片 ")
    private String vehiclePictures;
    @ApiModelProperty(value = "车辆颜色")
    private String vehicleColor;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
@@ -250,8 +250,9 @@
        List<XpVehicleVO> list = baseMapper.findList(query);
        decryptVehicleVos(list);
        //获取车的位置 和订单的位置 并计算 距离 和 时间
        List<XpVehicleVO> lists = new ArrayList<>();
        if(!list.isEmpty()){
            for (XpVehicle xpVehicle : list) {
            for (XpVehicleVO xpVehicle : list) {
                String vin = SensitiveDataCryptoUtil.decryptIfPossible(xpVehicle.getVehicleVin());
                VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vin)), VehiclePosition.class);
@@ -305,12 +306,14 @@
                            xpVehicle.setArrivalTime(timeStr.toString());
                        }
                    }
                    lists.add(xpVehicle);
                }
            }
            // 按预计到达时间(秒)升序排序
            list.sort(Comparator.comparing(XpVehicle::getArrivalTimeSecond, Comparator.nullsLast(Comparator.naturalOrder())));
            lists.sort(Comparator.comparing(XpVehicle::getArrivalTimeSecond, Comparator.nullsLast(Comparator.naturalOrder())));
            lists.subList(0, Math.min(lists.size(), 5));
        }
        return list;
        return lists;
    }
    @Override
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/MinistryOfTransport.java
@@ -11,8 +11,9 @@
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.xiaopeng.common.core.utils.StringUtils;
import com.xiaopeng.vehicleConvoy.model.dto.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
@@ -44,7 +45,13 @@
     * 接口地址:https://wycapi.jtj.gz.gov.cn/api/app/common/binapi
     */
    private final String companyId = "4401XPQCB67N";//公司标识
    public static final String DEFAULT_COMPANY_ID = "4401XPQCB67N";
    public static final String DEFAULT_SYMBOL = "XPQCB67N_S0612018007357G";
    public static final String DEFAULT_PROTOCOL_VERSION = "V2.0";
    private final String companyId = DEFAULT_COMPANY_ID;//公司标识
    private final String platform = "XPQCB67N";
@@ -52,13 +59,9 @@
    private final String url = "https://wycapi.jtj.gz.gov.cn/api/app/common/binapi";
    private static final String PTJB_SYMBOL = "XPQCB67N_S0612018007357G";
    private static final DateTimeFormatter FILE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-ddHHmmssSSS");
    private static final String PROTOCOL_VERSION = "V2.0";
    private static final DateTimeFormatter FILE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
    private static final DateTimeFormatter DATA_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
    public static final DateTimeFormatter DATA_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
    /**
@@ -85,17 +88,10 @@
     * @return 监管平台原始响应
     */
    public String pushPlatformBaseInfo() {
        String token = parseToken(getToken());
        JSONObject item = buildPlatformBaseInfo();
        JSONObject body = new JSONObject();
        JSONArray items = new JSONArray();
        items.add(item);
        body.put("items", items);
        String format = LocalDateTime.now().format(FILE_TIME_FORMATTER);
        String filename = platform + "_BASIC_PTJB_REQ_" + format + ".json";
        return uploadJsonFile(filename, body.toJSONString(), token);
        return pushBasicReqInfo(item,"PTJB");
    }
    /**
     * 报送网约车平台公司运营规模信息(PTYYGM)
@@ -103,21 +99,505 @@
     * @return 监管平台原始响应
     */
    public String pushPlatformOperationScaleInfo() {
        String token = parseToken(getToken());
        JSONObject item = buildPlatformOperationScaleInfo();
        return pushBasicReqInfo(item,"PTYYGM");
    }
    /**
     * 报送网约车车辆基本信息(CLJB)
     *
     * @param dto 车辆基本信息
     * @return 监管平台原始响应
     */
    public String pushVehicleBaseInfo(RegulationVehicleBaseInfoDTO dto) {
        JSONObject item = buildVehicleBaseInfo(dto);
        return pushBasicReqInfo(item, "CLJB");
    }
    /**
     * 报送网约车车辆保险信息(CLBX)
     *
     * @param dto 车辆保险信息
     * @return 监管平台原始响应
     */
    public String pushVehicleInsuranceInfo(RegulationVehicleInsuranceInfoDTO dto) {
        JSONObject item = buildVehicleInsuranceInfo(dto);
        return pushBasicReqInfo(item, "CLBX");
    }
    /**
     * 报送网约车车辆里程信息(CLLC)
     *
     * @param dto 车辆里程信息
     * @return 监管平台原始响应
     */
    public String pushVehicleMileageInfo(RegulationVehicleMileageInfoDTO dto) {
        JSONObject item = buildVehicleMileageInfo(dto);
        return pushBasicReqInfo(item, "CLLC");
    }
    /**
     * 报送网约车驾驶员基本信息(JSYJB)
     *
     * @param dto 驾驶员基本信息
     * @return 监管平台原始响应
     */
    public String pushDriverBaseInfo(RegulationDriverBaseInfoDTO dto) {
        JSONObject item = buildDriverBaseInfo(dto);
        return pushBasicReqInfo(item, "JSYJB");
    }
    /**
     * 报送网约车驾驶员培训信息(JSYPX)
     *
     * @param dto 驾驶员培训信息
     * @return 监管平台原始响应
     */
    public String pushDriverTrainingInfo(RegulationDriverTrainingInfoDTO dto) {
        JSONObject item = buildDriverTrainingInfo(dto);
        return pushBasicReqInfo(item, "JSYPX");
    }
    /**
     * 报送网约车驾驶员移动终端信息(JSYYDZD)
     *
     * @param dto 驾驶员移动终端信息
     * @return 监管平台原始响应
     */
    public String pushDriverMobileTerminalInfo(RegulationDriverMobileTerminalInfoDTO dto) {
        JSONObject item = buildDriverMobileTerminalInfo(dto);
        return pushBasicReqInfo(item, "JSYYDZD");
    }
    /**
     * 报送网约车驾驶员统计信息(JSYTJ)
     *
     * @param dto 驾驶员统计信息
     * @return 监管平台原始响应
     */
    public String pushDriverStatisticsInfo(RegulationDriverStatisticsInfoDTO dto) {
        JSONObject item = buildDriverStatisticsInfo(dto);
        return pushBasicReqInfo(item, "JSYTJ");
    }
    /**
     * 报送网约车乘客基本信息(CKJB)
     *
     * @param dto 乘客基本信息
     * @return 监管平台原始响应
     */
    public String pushPassengerBaseInfo(RegulationPassengerBaseInfoDTO dto) {
        JSONObject item = buildPassengerBaseInfo(dto);
        return pushBasicReqInfo(item, "CKJB");
    }
    /**
     * 报送网约车平台投资人信息(PTTZR)
     *
     * @param dto 平台投资人信息
     * @return 监管平台原始响应
     */
    public String pushPlatformInvestorInfo(RegulationPlatformInvestorInfoDTO dto) {
        JSONObject item = buildPlatformInvestorInfo(dto);
        return pushBasicReqInfo(item, "PTTZR");
    }
    /**
     * 报送驾驶员合同信息(GTJSYHT)
     *
     * @param dto 驾驶员合同信息
     * @return 监管平台原始响应
     */
    public String pushDriverContractInfo(RegulationDriverContractInfoDTO dto) {
        JSONObject item = buildDriverContractInfo(dto);
        return pushBasicReqInfo(item, "GTJSYHT");
    }
    /**
     * 报送订单发起(DDFQ)
     *
     * @param dto 订单发起信息
     * @return 监管平台原始响应
     */
    public String pushOrderCreateInfo(RegulationOrderCreateInfoDTO dto) {
        JSONObject item = buildOrderCreateInfo(dto);
        return pushOrderReqInfo(item, "DDFQ");
    }
    /**
     * 报送订单成功(DDCG)
     *
     * @param dto 订单成功信息
     * @return 监管平台原始响应
     */
    public String pushOrderMatchInfo(RegulationOrderMatchInfoDTO dto) {
        JSONObject item = buildOrderMatchInfo(dto);
        return pushOrderReqInfo(item, "DDCG");
    }
    /**
     * 报送订单撤销(DDCX)
     *
     * @param dto 订单撤销信息
     * @return 监管平台原始响应
     */
    public String pushOrderCancelInfo(RegulationOrderCancelInfoDTO dto) {
        JSONObject item = buildOrderCancelInfo(dto);
        return pushOrderReqInfo(item, "DDCX");
    }
    /**
     * 报送订单违约(DDWY)
     *
     * @param dto 订单违约信息
     * @return 监管平台原始响应
     */
    public String pushOrderViolationInfo(RegulationOrderViolationInfoDTO dto) {
        JSONObject item = buildOrderViolationInfo(dto);
        return pushOrderReqInfo(item, "DDWY");
    }
    /**
     * 报送车辆营运上线(CLYYSX)
     *
     * @param dto 车辆营运上线信息
     * @return 监管平台原始响应
     */
    public String pushVehicleOperateLoginInfo(RegulationVehicleOperateLoginInfoDTO dto) {
        JSONObject item = buildVehicleOperateLoginInfo(dto);
        return pushOperationReqInfo(item, "CLYYSX");
    }
    /**
     * 报送车辆营运下线(CLYYXX)
     *
     * @param dto 车辆营运下线信息
     * @return 监管平台原始响应
     */
    public String pushVehicleOperateLogoutInfo(RegulationVehicleOperateLogoutInfoDTO dto) {
        JSONObject item = buildVehicleOperateLogoutInfo(dto);
        return pushOperationReqInfo(item, "CLYYXX");
    }
    /**
     * 报送营运出发(YYCF)
     *
     * @param dto 营运出发信息
     * @return 监管平台原始响应
     */
    public String pushOperateDepartInfo(RegulationOperateDepartInfoDTO dto) {
        JSONObject item = buildOperateDepartInfo(dto);
        return pushOperationReqInfo(item, "YYCF");
    }
    /**
     * 报送营运到达(YYDD)
     *
     * @param dto 营运到达信息
     * @return 监管平台原始响应
     */
    public String pushOperateArriveInfo(RegulationOperateArriveInfoDTO dto) {
        JSONObject item = buildOperateArriveInfo(dto);
        return pushOperationReqInfo(item, "YYDD");
    }
    /**
     * 报送营运支付(YYZF)
     *
     * @param dto 营运支付信息
     * @return 监管平台原始响应
     */
    public String pushOperatePayInfo(RegulationOperatePayInfoDTO dto) {
        JSONObject item = buildOperatePayInfo(dto);
        return pushOperationReqInfo(item, "YYZF");
    }
    /**
     * 报送驾驶员定位信息(JSYDW)
     *
     * @param dto 驾驶员定位信息
     * @return 监管平台原始响应
     */
    public String pushDriverPositionInfo(RegulationDriverPositionInfoDTO dto) {
        JSONObject item = buildDriverPositionInfo(dto);
        return pushGpsReqInfo(item, "JSYDW");
    }
    /**
     * 报送乘客评价信息(CKPJ)
     *
     * @param dto 乘客评价信息
     * @return 监管平台原始响应
     */
    public String pushPassengerEvaluateInfo(RegulationPassengerEvaluateInfoDTO dto) {
        JSONObject item = buildPassengerEvaluateInfo(dto);
        return pushQualityReqInfo(item, "CKPJ");
    }
    /**
     * 报送乘客投诉处理信息(CKTSCL)
     *
     * @param dto 乘客投诉处理信息
     * @return 监管平台原始响应
     */
    public String pushPassengerComplaintInfo(RegulationPassengerComplaintInfoDTO dto) {
        JSONObject item = buildPassengerComplaintInfo(dto);
        return pushQualityReqInfo(item, "CKTSCL");
    }
    /**
     * 报送车辆注销报备(CLZXBB)
     *
     * @param dto 车辆注销报备信息
     * @return 监管平台原始响应
     */
    public String pushVehicleCancelReportInfo(RegulationVehicleCancelReportInfoDTO dto) {
        JSONObject item = buildVehicleCancelReportInfo(dto);
        return pushRegistReqInfo(item, "CLZXBB");
    }
    /**
     * 报送驾驶员处罚信息(JSYCF)
     *
     * @param dto 驾驶员处罚信息
     * @return 监管平台原始响应
     */
    public String pushDriverPunishInfo(RegulationDriverPunishInfoDTO dto) {
        JSONObject item = buildDriverPunishInfo(dto);
        return pushQualityReqInfo(item, "JSYCF");
    }
    /**
     * 报送驾驶员信誉信息(JSYXY)
     *
     * @param dto 驾驶员信誉信息
     * @return 监管平台原始响应
     */
    public String pushDriverReputationInfo(RegulationDriverReputationInfoDTO dto) {
        JSONObject item = buildDriverReputationInfo(dto);
        return pushQualityReqInfo(item, "JSYXY");
    }
    /**
     * 报送人车对应关系信息(RCDYGX)
     *
     * @param dto 人车对应关系信息
     * @return 监管平台原始响应
     */
    public String pushDriverVehicleRelationInfo(RegulationDriverVehicleRelationInfoDTO dto) {
        JSONObject item = buildDriverVehicleRelationInfo(dto);
        return pushBasicReqInfo(item, "RCDYGX");
    }
    /**
     * 报送平台营运报备(PTYYBB)
     *
     * @param dto 平台营运报备信息
     * @return 监管平台原始响应
     */
    public String pushPlatformOperationRegisterInfo(RegulationPlatformOperationRegisterInfoDTO dto) {
        JSONObject item = buildPlatformOperationRegisterInfo(dto);
        return pushRegistReqInfo(item, "PTYYBB");
    }
    /**
     * 报送平台暂停营运报备(PTZTYYBB)
     *
     * @param dto 平台暂停营运报备信息
     * @return 监管平台原始响应
     */
    public String pushPlatformPauseOperationRegisterInfo(RegulationPlatformPauseOperationRegisterInfoDTO dto) {
        JSONObject item = buildPlatformPauseOperationRegisterInfo(dto);
        return pushRegistReqInfo(item, "PTZTYYBB");
    }
    /**
     * 报送合作聚合平台信息(PTJHPTXX)
     *
     * @param dto 合作聚合平台信息
     * @return 监管平台原始响应
     */
    public String pushPlatformAggregationInfo(RegulationPlatformAggregationInfoDTO dto) {
        JSONObject item = buildPlatformAggregationInfo(dto);
        return pushRegistReqInfo(item, "PTJHPTXX");
    }
    /**
     * 报送车辆营运报备(CLYYBB)
     *
     * @param dto 车辆营运报备信息
     * @return 监管平台原始响应
     */
    public String pushVehicleOperationRegisterInfo(RegulationVehicleOperationRegisterInfoDTO dto) {
        JSONObject item = buildVehicleOperationRegisterInfo(dto);
        return pushRegistReqInfo(item, "CLYYBB");
    }
    /**
     * 报送驾驶员注册报备(JSYZCBB)
     *
     * @param dto 驾驶员注册报备信息
     * @return 监管平台原始响应
     */
    public String pushDriverRegisterInfo(RegulationDriverRegisterInfoDTO dto) {
        JSONObject item = buildDriverRegisterInfo(dto);
        return pushRegistReqInfo(item, "JSYZCBB");
    }
    /**
     * 报送驾驶员注销注册(JSYZXZC)
     *
     * @param dto 驾驶员注销注册信息
     * @return 监管平台原始响应
     */
    public String pushDriverCancelRegisterInfo(RegulationDriverCancelRegisterInfoDTO dto) {
        JSONObject item = buildDriverCancelRegisterInfo(dto);
        return pushRegistReqInfo(item, "JSYZXZC");
    }
    /**
     * 报送网约车平台公司支付信息(PTZF)
     *
     * @return 监管平台原始响应
     */
    public String pushPlatformPayInfo(RegulationPlatformPayInfoDTO dto) {
        JSONObject item = buildPlatformPayInfo(dto);
        return pushBasicReqInfo(item,"PTZF");
    }
    /**
     * 网约车平台公司服务机构(PTFWJG)
     * @return 监管平台原始响应
     */
    public String pushPlatformServiceInfo(RegulationPlatformServiceInfoDTO dto) {
        JSONObject item = buildPlatformServiceInfo(dto);
        return pushBasicReqInfo(item,"PTFWJG");
    }
    /**
     * 网约车平台公司经营许可(CPTJYXK)
     * @return 监管平台原始响应
     */
    public String pushPlatformLicenseInfo(RegulationPlatformLicenseInfoDTO dto) {
        JSONObject item = buildPlatformLicenseInfo(dto);
        return pushBasicReqInfo(item,"CPTJYXK");
    }
    /**
     * 网约车平台公司计程计价方式(PTYJ)
     * @return 监管平台原始响应
     */
    public String pushPlatformPriceInfo(RegulationPlatformPriceInfoDTO dto) {
        JSONObject item = buildPlatformPriceInfo(dto);
        return pushBasicReqInfo(item,"PTYJ");
    }
    /**
     * 推送基础信息
     * @param item 推送基础信息
     * @param command 推送基础信息类型
     * @return 监管平台原始响应
     */
    private String pushBasicReqInfo(JSONObject item,String command) {
        return pushReqInfo(item,"BASIC",command);
    }
    /**
     * 推送订单信息
     * @param item 推送基础信息
     * @param command 推送基础信息类型
     * @return 监管平台原始响应
     */
    private String pushOrderReqInfo(JSONObject item,String command) {
        return pushReqInfo(item,"ORDER",command);
    }
    /**
     * 推送营运信息
     * @param item 推送营运信息
     * @param command 推送营运信息类型
     * @return 监管平台原始响应
     */
    private String pushOperationReqInfo(JSONObject item,String command) {
        return pushReqInfo(item,"OPERATE",command);
    }
    /**
     * 推送服务质量信息
     * @param item 推送服务质量信息
     * @param command 推送服务质量信息类型
     * @return 监管平台原始响应
     */
    private String pushQualityReqInfo(JSONObject item,String command) {
        return pushReqInfo(item,"QUALITY",command);
    }
    /**
     * 推送注册报备信息
     * @param item 推送注册报备信息
     * @param command 推送注册报备信息类型
     * @return 监管平台原始响应
     */
    private String pushRegistReqInfo(JSONObject item,String command) {
        return pushReqInfo(item,"REGIST",command);
    }
    /**
     * 推送GPS信息
     * @param item 推送信息
     * @param command 推送信息关键字
     * @return 监管平台原始响应
     */
    private String pushGpsReqInfo(JSONObject item,String command) {
        return pushReqInfo(item,"GPS",command);
    }
    /**
     * 推送服务质量信息
     * @param item 推送信息
     * @param command 推送信息关键字
     * @return 监管平台原始响应
     */
    private String pushEvaluateReqInfo(JSONObject item,String command) {
        return pushReqInfo(item,"EVALUATE",command);
    }
    /**
     * 推送人车关系信息
     * @param item 推送信息
     * @param command 推送信息关键字
     * @return 监管平台原始响应
     */
    private String pushRelationshipReqInfo(JSONObject item,String command) {
        return pushReqInfo(item,"RELATIONSHIP",command);
    }
    /**
     * 推送信息
     * @param item 推送信息
     * @param type 推送信息类型
     * @param command 推送信息关键字
     * @return 监管平台原始响应
     */
    private String pushReqInfo(JSONObject item,String type,String command) {
        String token = parseToken(getToken());
        JSONObject body = new JSONObject();
        JSONArray items = new JSONArray();
        items.add(item);
        body.put("items", items);
        String format = LocalDateTime.now().format(FILE_TIME_FORMATTER);
        String filename = platform + "_BASIC_PTYYGM_REQ_" + format + ".json";
        String filename = platform + "_"+ type +"_"+ command +"_REQ_" + format + ".json";
        return uploadJsonFile(filename, body.toJSONString(), token);
    }
    private JSONObject buildPlatformBaseInfo() {
        JSONObject item = new JSONObject();
        item.put("symbol", PTJB_SYMBOL);
        item.put("symbol", DEFAULT_SYMBOL);
        item.put("companyId", companyId);
        item.put("companyName", "广州易点智慧出行科技有限公司");
        item.put("identifier", "91440101MA5AWEB67N");
@@ -138,24 +618,276 @@
        item.put("updateTime", LocalDateTime.now().format(DATA_TIME_FORMATTER));
        item.put("serviceItem", "网络预约出租汽车服务");
        item.put("servicePromise", "严格遵守国家及地方有关网络预约出租汽车经营的法律法规及行业规范,依法取得相关许可,证照齐全、亮证经营");
        item.put("protocolVersion", PROTOCOL_VERSION);
        item.put("protocolVersion", DEFAULT_PROTOCOL_VERSION);
        return item;
    }
    private JSONObject buildPlatformOperationScaleInfo() {
        JSONObject item = new JSONObject();
        item.put("symbol", PTJB_SYMBOL);
        item.put("symbol", DEFAULT_SYMBOL);
        item.put("companyId", companyId);
        item.put("vehicleNum", "1"); //TODO 后续补充完整
        item.put("driverNum", "1"); //TODO 后续补充完整
        item.put("flag", "1");
        item.put("updateTime", LocalDateTime.now().format(DATA_TIME_FORMATTER));
        item.put("protocolVersion", PROTOCOL_VERSION);
        item.put("protocolVersion", DEFAULT_PROTOCOL_VERSION);
        return item;
    }
    private JSONObject buildVehicleBaseInfo(RegulationVehicleBaseInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("网约车车辆基本信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildVehicleInsuranceInfo(RegulationVehicleInsuranceInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("网约车车辆保险信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildVehicleMileageInfo(RegulationVehicleMileageInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("网约车车辆里程信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildDriverBaseInfo(RegulationDriverBaseInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("网约车驾驶员基本信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildDriverTrainingInfo(RegulationDriverTrainingInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("网约车驾驶员培训信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildDriverMobileTerminalInfo(RegulationDriverMobileTerminalInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("网约车驾驶员移动终端信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildDriverStatisticsInfo(RegulationDriverStatisticsInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("网约车驾驶员统计信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildPassengerBaseInfo(RegulationPassengerBaseInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("网约车乘客基本信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildPlatformInvestorInfo(RegulationPlatformInvestorInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("网约车平台投资人信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildDriverContractInfo(RegulationDriverContractInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("驾驶员合同信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildOrderCreateInfo(RegulationOrderCreateInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("订单发起信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildOrderMatchInfo(RegulationOrderMatchInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("订单成功信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildOrderCancelInfo(RegulationOrderCancelInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("订单撤销信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildOrderViolationInfo(RegulationOrderViolationInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("订单违约信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildVehicleOperateLoginInfo(RegulationVehicleOperateLoginInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("车辆营运上线信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildVehicleOperateLogoutInfo(RegulationVehicleOperateLogoutInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("车辆营运下线信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildOperateDepartInfo(RegulationOperateDepartInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("营运出发信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildOperateArriveInfo(RegulationOperateArriveInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("营运到达信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildOperatePayInfo(RegulationOperatePayInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("营运支付信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildDriverPositionInfo(RegulationDriverPositionInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("驾驶员定位信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildPassengerEvaluateInfo(RegulationPassengerEvaluateInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("乘客评价信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildPassengerComplaintInfo(RegulationPassengerComplaintInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("乘客投诉处理信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildVehicleCancelReportInfo(RegulationVehicleCancelReportInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("车辆注销报备信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildDriverPunishInfo(RegulationDriverPunishInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("驾驶员处罚信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildDriverReputationInfo(RegulationDriverReputationInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("驾驶员信誉信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildDriverVehicleRelationInfo(RegulationDriverVehicleRelationInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("人车对应关系信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildPlatformOperationRegisterInfo(RegulationPlatformOperationRegisterInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("平台营运报备信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildPlatformPauseOperationRegisterInfo(RegulationPlatformPauseOperationRegisterInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("平台暂停营运报备信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildPlatformAggregationInfo(RegulationPlatformAggregationInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("合作聚合平台信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildVehicleOperationRegisterInfo(RegulationVehicleOperationRegisterInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("车辆营运报备信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildDriverRegisterInfo(RegulationDriverRegisterInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("驾驶员注册报备信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildDriverCancelRegisterInfo(RegulationDriverCancelRegisterInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("驾驶员注销注册信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildPlatformPayInfo(RegulationPlatformPayInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("网约车平台公司支付信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildPlatformServiceInfo(RegulationPlatformServiceInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("网约车平台公司服务机构信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildPlatformLicenseInfo(RegulationPlatformLicenseInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("网约车平台公司经营许可信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private JSONObject buildPlatformPriceInfo(RegulationPlatformPriceInfoDTO dto) {
        if (dto == null) {
            throw new RuntimeException("网约车平台公司计程计价方式信息不能为空");
        }
        return (JSONObject) JSON.toJSON(dto);
    }
    private String encodePdf(String filename) {
        if (StringUtils.isBlank(filename)) {
        if (filename == null || filename.trim().isEmpty()) {
            return "";
        }
        String resourcePath = "files/" + filename.trim();
xp-robotaxi-vehicle-convoy-boot/src/main/resources/mapper/vehicleConvoy/XpVehicleMapper.xml
@@ -107,11 +107,9 @@
            <if test="query.plateNumber != null and query.plateNumber != ''">
                AND a.plate_number LIKE CONCAT('%', #{query.plateNumber}, '%')
            </if>
            <!-- 运营状态 1运营中 2维修中 3已收车 4车辆异常 -->
            <if test="query.operatingStatus != null">
                AND a.operating_status = #{query.operatingStatus}
            </if>
            <!-- 车辆接单状态 1接单中 0空闲 -->
            <if test="query.state != null">
                AND a.state = #{query.state}
            </if>
@@ -122,8 +120,8 @@
                </foreach>
            </if>
            <if test="query.electronicId != null and query.electronicId != ''">
                    AND a.electronic_id = #{query.electronicId}
                </if>
                AND a.electronic_id = #{query.electronicId}
            </if>
            <if test="query.electronicIdList != null and query.electronicIdList.size()>0">
                AND a.electronic_id in
                <foreach item="item" collection="query.electronicIdList" separator="," open="(" close=")">
@@ -138,9 +136,9 @@
            </if>
            <if test="query.fleetName != null and query.fleetName != ''">
                and a.id in (
                    select xfv.vehicle_id from xp_fleet_vehicle xfv
                    left join xp_fleet xf on xfv.fleet_id = xf.id
                    where xf.fleet_name LIKE CONCAT('%', #{query.fleetName}, '%')
                select xfv.vehicle_id from xp_fleet_vehicle xfv
                left join xp_fleet xf on xfv.fleet_id = xf.id
                where xf.fleet_name LIKE CONCAT('%', #{query.fleetName}, '%')
                )
            </if>
        </where>