puzhibing
2026-03-11 9377927bae454b03321e5aee0287b61d962b9787
修改bug
11个文件已添加
1个文件已修改
1448 ■■■■■ 已修改文件
sql/增量sql/xprt_order.sql 744 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/config/MultipartFilterConfig.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/config/MultipartFilterConfig.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/config/MultipartFilterConfig.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/config/MultipartFilterConfig.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/config/MultipartFilterConfig.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/config/MultipartFilterConfig.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/config/MultipartFilterConfig.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-payment-boot/src/main/java/com/xiaopeng/payment/config/MultipartFilterConfig.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/config/MultipartFilterConfig.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-remote-driving-boot/src/main/java/com/xiaopeng/remoteDriving/config/MultipartFilterConfig.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/config/MultipartFilterConfig.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/增量sql/xprt_order.sql
@@ -1,843 +1,139 @@
ALTER TABLE `xp_cruise_order` MODIFY COLUMN `start_point_id` bigint NULL DEFAULT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order` MODIFY COLUMN `start_point_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '起点站点名称' AFTER `end_point_id`;
ALTER TABLE `xp_cruise_order_0` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_0` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_0` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_0` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_0` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_0` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_0` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_0` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_1` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_1` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_1` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_1` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_1` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_1` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_1` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_1` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_2` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_2` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_2` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_2` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_2` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_2` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_2` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_2` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_3` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_3` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_3` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_3` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_3` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_3` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_3` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_3` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_4` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_4` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_4` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_4` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_4` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_4` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_4` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_4` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_5` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_5` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_5` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_5` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_5` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_5` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_5` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_5` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_6` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_6` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_6` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_6` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_6` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_6` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_6` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_6` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_7` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_7` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_7` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_7` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_7` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_7` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_7` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_7` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_8` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_8` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_8` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_8` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_8` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_8` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_8` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_8` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_9` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_9` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_9` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_9` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_9` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_9` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_9` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_9` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_10` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_10` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_10` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_10` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_10` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_10` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_10` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_10` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_11` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_11` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_11` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_11` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_11` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_11` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_11` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_11` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_12` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_12` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_12` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_12` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_12` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_12` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_12` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_12` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_13` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_13` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_13` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_13` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_13` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_13` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_13` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_13` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_14` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_14` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_14` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_14` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_14` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_14` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_14` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_14` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_15` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_15` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_15` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_15` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_15` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_15` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_15` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_15` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_16` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_16` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_16` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_16` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_16` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_16` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_16` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_16` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_17` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_17` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_17` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_17` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_17` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_17` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_17` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_17` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_18` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_18` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_18` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_18` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_18` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_18` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_18` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_18` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_19` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_19` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_19` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_19` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_19` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_19` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_19` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_19` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_20` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_20` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_20` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_20` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_20` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_20` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_20` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_20` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_21` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_21` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_21` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_21` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_21` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_21` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_21` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_21` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_22` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_22` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_22` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_22` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_22` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_22` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_22` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_22` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_23` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_23` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_23` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_23` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_23` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_23` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_23` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_23` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_24` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_24` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_24` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_24` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_24` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_24` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_24` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_24` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_25` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_25` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_25` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_25` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_25` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_25` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_25` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_25` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_26` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_26` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_26` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_26` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_26` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_26` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_26` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_26` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_27` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_27` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_27` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_27` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_27` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_27` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_27` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_27` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_28` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_28` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_28` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_28` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_28` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_28` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_28` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_28` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_29` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_29` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_29` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_29` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_29` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_29` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_29` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_29` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_30` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_30` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_30` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_30` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_30` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_30` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_30` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_30` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_31` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_31` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_31` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_31` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_31` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_31` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_31` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_31` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_32` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_32` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_32` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_32` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_32` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_32` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_32` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_32` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_33` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_33` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_33` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_33` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_33` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_33` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_33` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_33` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_34` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_34` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_34` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_34` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_34` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_34` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_34` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_34` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_35` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_35` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_35` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_35` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_35` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_35` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_35` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_35` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_36` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_36` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_36` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_36` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_36` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_36` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_36` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_36` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_37` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_37` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_37` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_37` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_37` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_37` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_37` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_37` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_38` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_38` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_38` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_38` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_38` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_38` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_38` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_38` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_39` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_39` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_39` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_39` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_39` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_39` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_39` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_39` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_40` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_40` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_40` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_40` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_40` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_40` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_40` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_40` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_41` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_41` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_41` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_41` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_41` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_41` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_41` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_41` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_42` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_42` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_42` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_42` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_42` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_42` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_42` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_42` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_43` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_43` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_43` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_43` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_43` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_43` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_43` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_43` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_44` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_44` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_44` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_44` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_44` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_44` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_44` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_44` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_45` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_45` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_45` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_45` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_45` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_45` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_45` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_45` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_46` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_46` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_46` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_46` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_46` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_46` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_46` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_46` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_47` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_47` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_47` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_47` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_47` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_47` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_47` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_47` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_48` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_48` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_48` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_48` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_48` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_48` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_48` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_cruise_order_48` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_cruise_order_49` MODIFY COLUMN `id` bigint NOT NULL FIRST;
ALTER TABLE `xp_cruise_order_49` MODIFY COLUMN `vehicle_id` bigint NOT NULL COMMENT '车辆id' AFTER `id`;
ALTER TABLE `xp_cruise_order_49` MODIFY COLUMN `fleet_id` bigint NOT NULL COMMENT '车队ID' AFTER `vehicle_id`;
ALTER TABLE `xp_cruise_order_49` MODIFY COLUMN `vehicle_vin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '车辆vin' AFTER `fleet_id`;
ALTER TABLE `xp_cruise_order_49` MODIFY COLUMN `order_type` int NOT NULL DEFAULT 1 COMMENT '订单类型 1=正常巡游单 2返程单' AFTER `vehicle_vin`;
ALTER TABLE `xp_cruise_order_49` MODIFY COLUMN `start_point_id` bigint NOT NULL COMMENT '起点站点id' AFTER `end_lat`;
ALTER TABLE `xp_cruise_order_49` MODIFY COLUMN `status` int NOT NULL COMMENT '1进行中 2已停止 3已完成' AFTER `mission_id`;
ALTER TABLE `xp_order_0` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_cruise_order_49` MODIFY COLUMN `last_order_id` bigint NULL DEFAULT NULL COMMENT '返程上次的订单id' AFTER `status`;
ALTER TABLE `xp_order_1` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_0` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_2` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_1` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_3` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_2` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_4` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_3` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_5` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_4` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_6` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_5` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_7` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_6` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_8` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_7` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_9` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_8` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_10` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_9` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_11` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_10` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_12` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_11` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_13` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_12` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_14` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_13` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_15` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_14` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_16` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_15` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_17` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_16` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_18` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
ALTER TABLE `xp_order_17` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_18` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_19` MODIFY COLUMN `mileage_kilometers` double(11, 4) NULL DEFAULT NULL COMMENT '里程公里' AFTER `start_money`;
ALTER TABLE `xp_order_19` ADD COLUMN `open_trunk` int NULL DEFAULT 0 COMMENT '0未开  1开过  2关闭' AFTER `pay_type`;
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/config/MultipartFilterConfig.java
New file
@@ -0,0 +1,64 @@
package com.xiaopeng.account.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
 * 修复 multipart 文件上传被 ReplaceRequestFilter 破坏的问题。
 * <p>
 * ReplaceRequestFilter(来自 request-wrapper jar,logan-starter-core 传递依赖)
 * 会读取 request 的 InputStream 来包装请求体,导致后续 Spring 解析 multipart 时
 * 抛出 "Stream closed" 异常。
 * <p>
 * 解决方案:注册一个高优先级 Filter,对 multipart 请求提前触发 Servlet 容器的
 * multipart 解析(通过调用 request.getParts()),使文件数据被缓存到临时文件中。
 * 这样即使后续 ReplaceRequestFilter 消费了 InputStream,multipart 数据仍然可用。
 */
@Slf4j
@Configuration
public class MultipartFilterConfig {
    private static final String MULTIPART = "multipart/";
    @Bean
    public FilterRegistrationBean<Filter> earlyMultipartParsingFilter() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new EarlyMultipartParsingFilter());
        registration.addUrlPatterns("/*");
        // 确保在 ReplaceRequestFilter 之前执行
        registration.setOrder(Integer.MIN_VALUE + 10);
        registration.setName("earlyMultipartParsingFilter");
        return registration;
    }
    /**
     * 在 filter 链最前面对 multipart 请求提前解析,
     * 让 Tomcat 将文件数据缓存到磁盘,避免后续 filter 消费 InputStream 导致 Stream closed。
     */
    static class EarlyMultipartParsingFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            if (request instanceof HttpServletRequest) {
                HttpServletRequest httpRequest = (HttpServletRequest) request;
                String contentType = httpRequest.getContentType();
                if (contentType != null && contentType.toLowerCase().startsWith(MULTIPART)) {
                    // 提前触发 multipart 解析,Tomcat 会将 parts 缓存
                    try {
                        httpRequest.getParts();
                    } catch (Exception e) {
                        log.warn("Early multipart parsing failed, will retry later: {}", e.getMessage());
                    }
                }
            }
            chain.doFilter(request, response);
        }
    }
}
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/config/MultipartFilterConfig.java
New file
@@ -0,0 +1,64 @@
package com.xiaopeng.automaticPilot.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
 * 修复 multipart 文件上传被 ReplaceRequestFilter 破坏的问题。
 * <p>
 * ReplaceRequestFilter(来自 request-wrapper jar,logan-starter-core 传递依赖)
 * 会读取 request 的 InputStream 来包装请求体,导致后续 Spring 解析 multipart 时
 * 抛出 "Stream closed" 异常。
 * <p>
 * 解决方案:注册一个高优先级 Filter,对 multipart 请求提前触发 Servlet 容器的
 * multipart 解析(通过调用 request.getParts()),使文件数据被缓存到临时文件中。
 * 这样即使后续 ReplaceRequestFilter 消费了 InputStream,multipart 数据仍然可用。
 */
@Slf4j
@Configuration
public class MultipartFilterConfig {
    private static final String MULTIPART = "multipart/";
    @Bean
    public FilterRegistrationBean<Filter> earlyMultipartParsingFilter() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new EarlyMultipartParsingFilter());
        registration.addUrlPatterns("/*");
        // 确保在 ReplaceRequestFilter 之前执行
        registration.setOrder(Integer.MIN_VALUE + 10);
        registration.setName("earlyMultipartParsingFilter");
        return registration;
    }
    /**
     * 在 filter 链最前面对 multipart 请求提前解析,
     * 让 Tomcat 将文件数据缓存到磁盘,避免后续 filter 消费 InputStream 导致 Stream closed。
     */
    static class EarlyMultipartParsingFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            if (request instanceof HttpServletRequest) {
                HttpServletRequest httpRequest = (HttpServletRequest) request;
                String contentType = httpRequest.getContentType();
                if (contentType != null && contentType.toLowerCase().startsWith(MULTIPART)) {
                    // 提前触发 multipart 解析,Tomcat 会将 parts 缓存
                    try {
                        httpRequest.getParts();
                    } catch (Exception e) {
                        log.warn("Early multipart parsing failed, will retry later: {}", e.getMessage());
                    }
                }
            }
            chain.doFilter(request, response);
        }
    }
}
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/config/MultipartFilterConfig.java
New file
@@ -0,0 +1,64 @@
package com.xiaopeng.itinerary.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
 * 修复 multipart 文件上传被 ReplaceRequestFilter 破坏的问题。
 * <p>
 * ReplaceRequestFilter(来自 request-wrapper jar,logan-starter-core 传递依赖)
 * 会读取 request 的 InputStream 来包装请求体,导致后续 Spring 解析 multipart 时
 * 抛出 "Stream closed" 异常。
 * <p>
 * 解决方案:注册一个高优先级 Filter,对 multipart 请求提前触发 Servlet 容器的
 * multipart 解析(通过调用 request.getParts()),使文件数据被缓存到临时文件中。
 * 这样即使后续 ReplaceRequestFilter 消费了 InputStream,multipart 数据仍然可用。
 */
@Slf4j
@Configuration
public class MultipartFilterConfig {
    private static final String MULTIPART = "multipart/";
    @Bean
    public FilterRegistrationBean<Filter> earlyMultipartParsingFilter() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new EarlyMultipartParsingFilter());
        registration.addUrlPatterns("/*");
        // 确保在 ReplaceRequestFilter 之前执行
        registration.setOrder(Integer.MIN_VALUE + 10);
        registration.setName("earlyMultipartParsingFilter");
        return registration;
    }
    /**
     * 在 filter 链最前面对 multipart 请求提前解析,
     * 让 Tomcat 将文件数据缓存到磁盘,避免后续 filter 消费 InputStream 导致 Stream closed。
     */
    static class EarlyMultipartParsingFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            if (request instanceof HttpServletRequest) {
                HttpServletRequest httpRequest = (HttpServletRequest) request;
                String contentType = httpRequest.getContentType();
                if (contentType != null && contentType.toLowerCase().startsWith(MULTIPART)) {
                    // 提前触发 multipart 解析,Tomcat 会将 parts 缓存
                    try {
                        httpRequest.getParts();
                    } catch (Exception e) {
                        log.warn("Early multipart parsing failed, will retry later: {}", e.getMessage());
                    }
                }
            }
            chain.doFilter(request, response);
        }
    }
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/config/MultipartFilterConfig.java
New file
@@ -0,0 +1,64 @@
package com.xiaopeng.maintenance.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
 * 修复 multipart 文件上传被 ReplaceRequestFilter 破坏的问题。
 * <p>
 * ReplaceRequestFilter(来自 request-wrapper jar,logan-starter-core 传递依赖)
 * 会读取 request 的 InputStream 来包装请求体,导致后续 Spring 解析 multipart 时
 * 抛出 "Stream closed" 异常。
 * <p>
 * 解决方案:注册一个高优先级 Filter,对 multipart 请求提前触发 Servlet 容器的
 * multipart 解析(通过调用 request.getParts()),使文件数据被缓存到临时文件中。
 * 这样即使后续 ReplaceRequestFilter 消费了 InputStream,multipart 数据仍然可用。
 */
@Slf4j
@Configuration
public class MultipartFilterConfig {
    private static final String MULTIPART = "multipart/";
    @Bean
    public FilterRegistrationBean<Filter> earlyMultipartParsingFilter() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new EarlyMultipartParsingFilter());
        registration.addUrlPatterns("/*");
        // 确保在 ReplaceRequestFilter 之前执行
        registration.setOrder(Integer.MIN_VALUE + 10);
        registration.setName("earlyMultipartParsingFilter");
        return registration;
    }
    /**
     * 在 filter 链最前面对 multipart 请求提前解析,
     * 让 Tomcat 将文件数据缓存到磁盘,避免后续 filter 消费 InputStream 导致 Stream closed。
     */
    static class EarlyMultipartParsingFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            if (request instanceof HttpServletRequest) {
                HttpServletRequest httpRequest = (HttpServletRequest) request;
                String contentType = httpRequest.getContentType();
                if (contentType != null && contentType.toLowerCase().startsWith(MULTIPART)) {
                    // 提前触发 multipart 解析,Tomcat 会将 parts 缓存
                    try {
                        httpRequest.getParts();
                    } catch (Exception e) {
                        log.warn("Early multipart parsing failed, will retry later: {}", e.getMessage());
                    }
                }
            }
            chain.doFilter(request, response);
        }
    }
}
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/config/MultipartFilterConfig.java
New file
@@ -0,0 +1,64 @@
package com.xiaopeng.map.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
 * 修复 multipart 文件上传被 ReplaceRequestFilter 破坏的问题。
 * <p>
 * ReplaceRequestFilter(来自 request-wrapper jar,logan-starter-core 传递依赖)
 * 会读取 request 的 InputStream 来包装请求体,导致后续 Spring 解析 multipart 时
 * 抛出 "Stream closed" 异常。
 * <p>
 * 解决方案:注册一个高优先级 Filter,对 multipart 请求提前触发 Servlet 容器的
 * multipart 解析(通过调用 request.getParts()),使文件数据被缓存到临时文件中。
 * 这样即使后续 ReplaceRequestFilter 消费了 InputStream,multipart 数据仍然可用。
 */
@Slf4j
@Configuration
public class MultipartFilterConfig {
    private static final String MULTIPART = "multipart/";
    @Bean
    public FilterRegistrationBean<Filter> earlyMultipartParsingFilter() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new EarlyMultipartParsingFilter());
        registration.addUrlPatterns("/*");
        // 确保在 ReplaceRequestFilter 之前执行
        registration.setOrder(Integer.MIN_VALUE + 10);
        registration.setName("earlyMultipartParsingFilter");
        return registration;
    }
    /**
     * 在 filter 链最前面对 multipart 请求提前解析,
     * 让 Tomcat 将文件数据缓存到磁盘,避免后续 filter 消费 InputStream 导致 Stream closed。
     */
    static class EarlyMultipartParsingFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            if (request instanceof HttpServletRequest) {
                HttpServletRequest httpRequest = (HttpServletRequest) request;
                String contentType = httpRequest.getContentType();
                if (contentType != null && contentType.toLowerCase().startsWith(MULTIPART)) {
                    // 提前触发 multipart 解析,Tomcat 会将 parts 缓存
                    try {
                        httpRequest.getParts();
                    } catch (Exception e) {
                        log.warn("Early multipart parsing failed, will retry later: {}", e.getMessage());
                    }
                }
            }
            chain.doFilter(request, response);
        }
    }
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/config/MultipartFilterConfig.java
New file
@@ -0,0 +1,64 @@
package com.xiaopeng.operation.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
 * 修复 multipart 文件上传被 ReplaceRequestFilter 破坏的问题。
 * <p>
 * ReplaceRequestFilter(来自 request-wrapper jar,logan-starter-core 传递依赖)
 * 会读取 request 的 InputStream 来包装请求体,导致后续 Spring 解析 multipart 时
 * 抛出 "Stream closed" 异常。
 * <p>
 * 解决方案:注册一个高优先级 Filter,对 multipart 请求提前触发 Servlet 容器的
 * multipart 解析(通过调用 request.getParts()),使文件数据被缓存到临时文件中。
 * 这样即使后续 ReplaceRequestFilter 消费了 InputStream,multipart 数据仍然可用。
 */
@Slf4j
@Configuration
public class MultipartFilterConfig {
    private static final String MULTIPART = "multipart/";
    @Bean
    public FilterRegistrationBean<Filter> earlyMultipartParsingFilter() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new EarlyMultipartParsingFilter());
        registration.addUrlPatterns("/*");
        // 确保在 ReplaceRequestFilter 之前执行
        registration.setOrder(Integer.MIN_VALUE + 10);
        registration.setName("earlyMultipartParsingFilter");
        return registration;
    }
    /**
     * 在 filter 链最前面对 multipart 请求提前解析,
     * 让 Tomcat 将文件数据缓存到磁盘,避免后续 filter 消费 InputStream 导致 Stream closed。
     */
    static class EarlyMultipartParsingFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            if (request instanceof HttpServletRequest) {
                HttpServletRequest httpRequest = (HttpServletRequest) request;
                String contentType = httpRequest.getContentType();
                if (contentType != null && contentType.toLowerCase().startsWith(MULTIPART)) {
                    // 提前触发 multipart 解析,Tomcat 会将 parts 缓存
                    try {
                        httpRequest.getParts();
                    } catch (Exception e) {
                        log.warn("Early multipart parsing failed, will retry later: {}", e.getMessage());
                    }
                }
            }
            chain.doFilter(request, response);
        }
    }
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/config/MultipartFilterConfig.java
New file
@@ -0,0 +1,64 @@
package com.xiaopeng.order.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
 * 修复 multipart 文件上传被 ReplaceRequestFilter 破坏的问题。
 * <p>
 * ReplaceRequestFilter(来自 request-wrapper jar,logan-starter-core 传递依赖)
 * 会读取 request 的 InputStream 来包装请求体,导致后续 Spring 解析 multipart 时
 * 抛出 "Stream closed" 异常。
 * <p>
 * 解决方案:注册一个高优先级 Filter,对 multipart 请求提前触发 Servlet 容器的
 * multipart 解析(通过调用 request.getParts()),使文件数据被缓存到临时文件中。
 * 这样即使后续 ReplaceRequestFilter 消费了 InputStream,multipart 数据仍然可用。
 */
@Slf4j
@Configuration
public class MultipartFilterConfig {
    private static final String MULTIPART = "multipart/";
    @Bean
    public FilterRegistrationBean<Filter> earlyMultipartParsingFilter() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new EarlyMultipartParsingFilter());
        registration.addUrlPatterns("/*");
        // 确保在 ReplaceRequestFilter 之前执行
        registration.setOrder(Integer.MIN_VALUE + 10);
        registration.setName("earlyMultipartParsingFilter");
        return registration;
    }
    /**
     * 在 filter 链最前面对 multipart 请求提前解析,
     * 让 Tomcat 将文件数据缓存到磁盘,避免后续 filter 消费 InputStream 导致 Stream closed。
     */
    static class EarlyMultipartParsingFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            if (request instanceof HttpServletRequest) {
                HttpServletRequest httpRequest = (HttpServletRequest) request;
                String contentType = httpRequest.getContentType();
                if (contentType != null && contentType.toLowerCase().startsWith(MULTIPART)) {
                    // 提前触发 multipart 解析,Tomcat 会将 parts 缓存
                    try {
                        httpRequest.getParts();
                    } catch (Exception e) {
                        log.warn("Early multipart parsing failed, will retry later: {}", e.getMessage());
                    }
                }
            }
            chain.doFilter(request, response);
        }
    }
}
xp-robotaxi-payment-boot/src/main/java/com/xiaopeng/payment/config/MultipartFilterConfig.java
New file
@@ -0,0 +1,64 @@
package com.xiaopeng.payment.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
 * 修复 multipart 文件上传被 ReplaceRequestFilter 破坏的问题。
 * <p>
 * ReplaceRequestFilter(来自 request-wrapper jar,logan-starter-core 传递依赖)
 * 会读取 request 的 InputStream 来包装请求体,导致后续 Spring 解析 multipart 时
 * 抛出 "Stream closed" 异常。
 * <p>
 * 解决方案:注册一个高优先级 Filter,对 multipart 请求提前触发 Servlet 容器的
 * multipart 解析(通过调用 request.getParts()),使文件数据被缓存到临时文件中。
 * 这样即使后续 ReplaceRequestFilter 消费了 InputStream,multipart 数据仍然可用。
 */
@Slf4j
@Configuration
public class MultipartFilterConfig {
    private static final String MULTIPART = "multipart/";
    @Bean
    public FilterRegistrationBean<Filter> earlyMultipartParsingFilter() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new EarlyMultipartParsingFilter());
        registration.addUrlPatterns("/*");
        // 确保在 ReplaceRequestFilter 之前执行
        registration.setOrder(Integer.MIN_VALUE + 10);
        registration.setName("earlyMultipartParsingFilter");
        return registration;
    }
    /**
     * 在 filter 链最前面对 multipart 请求提前解析,
     * 让 Tomcat 将文件数据缓存到磁盘,避免后续 filter 消费 InputStream 导致 Stream closed。
     */
    static class EarlyMultipartParsingFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            if (request instanceof HttpServletRequest) {
                HttpServletRequest httpRequest = (HttpServletRequest) request;
                String contentType = httpRequest.getContentType();
                if (contentType != null && contentType.toLowerCase().startsWith(MULTIPART)) {
                    // 提前触发 multipart 解析,Tomcat 会将 parts 缓存
                    try {
                        httpRequest.getParts();
                    } catch (Exception e) {
                        log.warn("Early multipart parsing failed, will retry later: {}", e.getMessage());
                    }
                }
            }
            chain.doFilter(request, response);
        }
    }
}
xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/config/MultipartFilterConfig.java
New file
@@ -0,0 +1,64 @@
package com.xiaopeng.pushMessage.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
 * 修复 multipart 文件上传被 ReplaceRequestFilter 破坏的问题。
 * <p>
 * ReplaceRequestFilter(来自 request-wrapper jar,logan-starter-core 传递依赖)
 * 会读取 request 的 InputStream 来包装请求体,导致后续 Spring 解析 multipart 时
 * 抛出 "Stream closed" 异常。
 * <p>
 * 解决方案:注册一个高优先级 Filter,对 multipart 请求提前触发 Servlet 容器的
 * multipart 解析(通过调用 request.getParts()),使文件数据被缓存到临时文件中。
 * 这样即使后续 ReplaceRequestFilter 消费了 InputStream,multipart 数据仍然可用。
 */
@Slf4j
@Configuration
public class MultipartFilterConfig {
    private static final String MULTIPART = "multipart/";
    @Bean
    public FilterRegistrationBean<Filter> earlyMultipartParsingFilter() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new EarlyMultipartParsingFilter());
        registration.addUrlPatterns("/*");
        // 确保在 ReplaceRequestFilter 之前执行
        registration.setOrder(Integer.MIN_VALUE + 10);
        registration.setName("earlyMultipartParsingFilter");
        return registration;
    }
    /**
     * 在 filter 链最前面对 multipart 请求提前解析,
     * 让 Tomcat 将文件数据缓存到磁盘,避免后续 filter 消费 InputStream 导致 Stream closed。
     */
    static class EarlyMultipartParsingFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            if (request instanceof HttpServletRequest) {
                HttpServletRequest httpRequest = (HttpServletRequest) request;
                String contentType = httpRequest.getContentType();
                if (contentType != null && contentType.toLowerCase().startsWith(MULTIPART)) {
                    // 提前触发 multipart 解析,Tomcat 会将 parts 缓存
                    try {
                        httpRequest.getParts();
                    } catch (Exception e) {
                        log.warn("Early multipart parsing failed, will retry later: {}", e.getMessage());
                    }
                }
            }
            chain.doFilter(request, response);
        }
    }
}
xp-robotaxi-remote-driving-boot/src/main/java/com/xiaopeng/remoteDriving/config/MultipartFilterConfig.java
New file
@@ -0,0 +1,64 @@
package com.xiaopeng.remoteDriving.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
 * 修复 multipart 文件上传被 ReplaceRequestFilter 破坏的问题。
 * <p>
 * ReplaceRequestFilter(来自 request-wrapper jar,logan-starter-core 传递依赖)
 * 会读取 request 的 InputStream 来包装请求体,导致后续 Spring 解析 multipart 时
 * 抛出 "Stream closed" 异常。
 * <p>
 * 解决方案:注册一个高优先级 Filter,对 multipart 请求提前触发 Servlet 容器的
 * multipart 解析(通过调用 request.getParts()),使文件数据被缓存到临时文件中。
 * 这样即使后续 ReplaceRequestFilter 消费了 InputStream,multipart 数据仍然可用。
 */
@Slf4j
@Configuration
public class MultipartFilterConfig {
    private static final String MULTIPART = "multipart/";
    @Bean
    public FilterRegistrationBean<Filter> earlyMultipartParsingFilter() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new EarlyMultipartParsingFilter());
        registration.addUrlPatterns("/*");
        // 确保在 ReplaceRequestFilter 之前执行
        registration.setOrder(Integer.MIN_VALUE + 10);
        registration.setName("earlyMultipartParsingFilter");
        return registration;
    }
    /**
     * 在 filter 链最前面对 multipart 请求提前解析,
     * 让 Tomcat 将文件数据缓存到磁盘,避免后续 filter 消费 InputStream 导致 Stream closed。
     */
    static class EarlyMultipartParsingFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            if (request instanceof HttpServletRequest) {
                HttpServletRequest httpRequest = (HttpServletRequest) request;
                String contentType = httpRequest.getContentType();
                if (contentType != null && contentType.toLowerCase().startsWith(MULTIPART)) {
                    // 提前触发 multipart 解析,Tomcat 会将 parts 缓存
                    try {
                        httpRequest.getParts();
                    } catch (Exception e) {
                        log.warn("Early multipart parsing failed, will retry later: {}", e.getMessage());
                    }
                }
            }
            chain.doFilter(request, response);
        }
    }
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/config/MultipartFilterConfig.java
New file
@@ -0,0 +1,64 @@
package com.xiaopeng.vehicleConvoy.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
 * 修复 multipart 文件上传被 ReplaceRequestFilter 破坏的问题。
 * <p>
 * ReplaceRequestFilter(来自 request-wrapper jar,logan-starter-core 传递依赖)
 * 会读取 request 的 InputStream 来包装请求体,导致后续 Spring 解析 multipart 时
 * 抛出 "Stream closed" 异常。
 * <p>
 * 解决方案:注册一个高优先级 Filter,对 multipart 请求提前触发 Servlet 容器的
 * multipart 解析(通过调用 request.getParts()),使文件数据被缓存到临时文件中。
 * 这样即使后续 ReplaceRequestFilter 消费了 InputStream,multipart 数据仍然可用。
 */
@Slf4j
@Configuration
public class MultipartFilterConfig {
    private static final String MULTIPART = "multipart/";
    @Bean
    public FilterRegistrationBean<Filter> earlyMultipartParsingFilter() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new EarlyMultipartParsingFilter());
        registration.addUrlPatterns("/*");
        // 确保在 ReplaceRequestFilter 之前执行
        registration.setOrder(Integer.MIN_VALUE + 10);
        registration.setName("earlyMultipartParsingFilter");
        return registration;
    }
    /**
     * 在 filter 链最前面对 multipart 请求提前解析,
     * 让 Tomcat 将文件数据缓存到磁盘,避免后续 filter 消费 InputStream 导致 Stream closed。
     */
    static class EarlyMultipartParsingFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            if (request instanceof HttpServletRequest) {
                HttpServletRequest httpRequest = (HttpServletRequest) request;
                String contentType = httpRequest.getContentType();
                if (contentType != null && contentType.toLowerCase().startsWith(MULTIPART)) {
                    // 提前触发 multipart 解析,Tomcat 会将 parts 缓存
                    try {
                        httpRequest.getParts();
                    } catch (Exception e) {
                        log.warn("Early multipart parsing failed, will retry later: {}", e.getMessage());
                    }
                }
            }
            chain.doFilter(request, response);
        }
    }
}