无关风月
2026-02-13 b79f46e69c3377f6bb1f35551f3d650d668d9cf7
Merge remote-tracking branch 'origin/master'

# Conflicts:
# xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
11个文件已修改
152 ■■■■■ 已修改文件
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/SysRoleController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleRepairController.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/query/XpTaskRecordPageQuery.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpRegionController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/mapper/XpRegionMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/XpRegionService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpRegionServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicleConvoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpFleetController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicleConvoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpFleetService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicleConvoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/SysRoleController.java
@@ -10,9 +10,7 @@
import com.xiaopeng.api.model.account.SysRole;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.page.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.*;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.validation.annotation.Validated;
@@ -26,7 +24,6 @@
 * @author mitao
 * @since 2026-02-03
 */
@Api(tags = "角色管理")
@RequiredArgsConstructor(onConstructor_ = @Lazy)
@RestController
public class SysRoleController {
@@ -35,35 +32,35 @@
    @ApiOperation("新增角色")
    @ApiOperation(value = "新增角色", tags = {"管理后台-角色管理"})
    @PostMapping("/api/v1/role/add")
    public R<?> add(@Validated @RequestBody SysRoleAddDTO dto) {
        sysRoleService.addRole(dto);
        return R.ok();
    }
    @ApiOperation("编辑角色")
    @ApiOperation(value = "编辑角色", tags = {"管理后台-角色管理"})
    @PostMapping("/api/v1/role/edit")
    public R<?> edit(@Validated @RequestBody SysRoleEditDTO dto) {
        sysRoleService.editRole(dto);
        return R.ok();
    }
    @ApiOperation("角色详情")
    @ApiOperation(value = "角色详情", tags = {"管理后台-角色管理"})
    @GetMapping("/api/v1/role/queryById")
    public R<SysRoleDetailVO> queryById(@ApiParam(value = "角色id", required = true) @RequestParam Long id) {
        SysRoleDetailVO detail = sysRoleService.getRoleDetail(id);
        return R.ok(detail);
    }
    @ApiOperation("角色分页列表")
    @ApiOperation(value = "角色分页列表", tags = {"管理后台-角色管理"})
    @PostMapping("/api/v1/role/pageList")
    public R<PageInfo<SysRolePageVO>> pageList(@Validated @RequestBody SysRolePageQuery query) {
        PageInfo<SysRolePageVO> pageInfo = sysRoleService.pageList(query);
        return R.ok(pageInfo);
    }
    @ApiOperation("删除角色")
    @ApiOperation(value = "删除角色", tags = {"管理后台-角色管理"})
    @DeleteMapping("/api/v1/role/delete/{id}")
    public R<?> delete(@ApiParam(value = "角色id", required = true) @PathVariable Long id) {
        sysRoleService.deleteRole(id);
@@ -94,4 +91,10 @@
        Boolean checked = sysRoleService.checkMenuExistRole(menuId);
        return R.ok(checked);
    }
    @ApiOperation(value = "获取角色不分页列表", tags = {"管理后台-车队管理"})
    @GetMapping("/api/v1/role/list")
    public R<?> getList() {
        return R.ok(sysRoleService.list());
    }
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleRepairController.java
@@ -28,7 +28,6 @@
 */
@Api(tags = "车辆维修")
@RestController
@RequestMapping("/vehicleRepair")
public class XpVehicleRepairController {
    @Autowired
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/query/XpTaskRecordPageQuery.java
@@ -17,7 +17,7 @@
 */
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "任务/事故查询对象")
@ApiModel(value = "任务事故查询对象")
public class XpTaskRecordPageQuery extends BasePage {
    @NotNull(message = "车辆ID不能为空")
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpRegionController.java
@@ -1,28 +1,22 @@
package com.xiaopeng.operation.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.xiaopeng.api.model.operation.XpOpenCity;
import com.xiaopeng.api.model.operation.XpRegion;
import com.xiaopeng.common.core.constant.CacheConstants;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.api.model.operation.XpRegion;
import com.xiaopeng.common.redis.service.RedisService;
import com.xiaopeng.operation.query.getProvinceQuery;
import com.xiaopeng.operation.service.XpOpenCityService;
import com.xiaopeng.operation.service.XpRegionService;
import com.xiaopeng.operation.vo.RegionDistrictSyncResultVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@@ -105,5 +99,13 @@
        return R.ok(list);
    }
}
    /**
     * 管理后台-同步区级数据
     */
    @ApiOperation(value = "管理后台-同步区级数据", tags = {"管理后台-省市区管理"})
    @PostMapping("/api/v1/region/syncDistrict")
    public R<RegionDistrictSyncResultVO> syncDistrict() {
        return R.ok(regionService.syncDistrictFromRegionAll());
    }
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/mapper/XpRegionMapper.java
@@ -4,6 +4,8 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xiaopeng.api.model.operation.XpRegion;
import java.util.List;
/**
 * <p>
 * 省市区三级联动 Mapper 接口
@@ -14,4 +16,22 @@
 */
public interface XpRegionMapper extends BaseMapper<XpRegion> {
    /**
     * 查询缺失的区级数据
     * @return 待同步区级数据
     */
    List<XpRegion> selectMissingDistrictFromRegionAll();
    /**
     * 查询可参与同步的市级总数
     * @return 市级总数
     */
    Long countCityForDistrictSync();
    /**
     * 查询候选区级总数(无论是否已存在)
     * @return 候选区级总数
     */
    Long countCandidateDistrictForSync();
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/XpRegionService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.xiaopeng.api.model.operation.XpRegion;
import com.xiaopeng.operation.vo.RegionDistrictSyncResultVO;
import java.util.List;
@@ -22,4 +23,10 @@
     */
    List<List<XpRegion>> getXpRegion();
    /**
     * 从xp_region_all同步区级数据到xp_region
     * @return 同步结果
     */
    RegionDistrictSyncResultVO syncDistrictFromRegionAll();
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpRegionServiceImpl.java
@@ -8,11 +8,14 @@
import com.xiaopeng.operation.mapper.XpRegionMapper;
import com.xiaopeng.api.model.operation.XpRegion;
import com.xiaopeng.operation.service.XpRegionService;
import com.xiaopeng.operation.vo.RegionDistrictSyncResultVO;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -64,4 +67,29 @@
        redisService.setCacheList(CacheConstants.XP_REGION, result);
        return result;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public RegionDistrictSyncResultVO syncDistrictFromRegionAll() {
        Long cityCount = Objects.requireNonNullElse(this.baseMapper.countCityForDistrictSync(), 0L);
        Long candidateDistrictCount = Objects.requireNonNullElse(this.baseMapper.countCandidateDistrictForSync(), 0L);
        List<XpRegion> missingDistrictList = this.baseMapper.selectMissingDistrictFromRegionAll();
        long insertedCount = 0L;
        if (missingDistrictList != null && !missingDistrictList.isEmpty()) {
            this.saveBatch(missingDistrictList);
            insertedCount = missingDistrictList.size();
        }
        redisService.deleteObject(CacheConstants.XP_REGION);
        redisService.deleteObject(CacheConstants.XP_REGION_CITY);
        RegionDistrictSyncResultVO result = new RegionDistrictSyncResultVO();
        result.setCityCount(cityCount);
        result.setCandidateDistrictCount(candidateDistrictCount);
        result.setInsertedCount(insertedCount);
        result.setSkippedCount(Math.max(candidateDistrictCount - insertedCount, 0));
        result.setMessage("区级数据同步完成");
        return result;
    }
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -131,6 +131,7 @@
    private final XpPushMessageClient xpPushMessageClient;
    private final OrderMissionClient orderMissionClient;
    private final XpOrderDetailMapper xpOrderDetailMapper;
    private final OrderMissionClient orderMissionClient;
    @Autowired
    private MongoTemplate mongoTemplate;
xp-robotaxi-vehicleConvoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpFleetController.java
@@ -149,4 +149,24 @@
        return R.ok();
    }
    @ApiOperation(value = "车队删除车辆成员", tags = {"管理后台-车队管理"})
    @PostMapping("/api/v1/fleet/vehicle/remove")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "fleetId", value = "车队ID", dataTypeClass = Long.class, required = true),
            @ApiImplicitParam(name = "vehicleId", value = "车辆ID", dataTypeClass = Long.class, required = true)})
    public R<?> removeVehicle(Long fleetId, Long vehicleId) {
        xpFleetService.removeVehicle(fleetId, vehicleId);
        return R.ok();
    }
    @ApiOperation(value = "车队删除人员成员", tags = {"管理后台-车队管理"})
    @PostMapping("/api/v1/fleet/operation-user/remove")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "fleetId", value = "车队ID", dataTypeClass = Long.class, required = true),
            @ApiImplicitParam(name = "operationUserId", value = "人员ID", dataTypeClass = Long.class, required = true)})
    public R<?> removeOperationUser(Long fleetId, Long operationUserId) {
        xpFleetService.removeOperationUser(fleetId, operationUserId);
        return R.ok();
    }
}
xp-robotaxi-vehicleConvoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpFleetService.java
@@ -100,4 +100,18 @@
     */
    void addOperationUserId(Long fleetId, Long operationUserId);
    /**
     * 车队删除车辆成员
     * @param fleetId 车队ID
     * @param vehicleId 车辆ID
     */
    void removeVehicle(Long fleetId, Long vehicleId);
    /**
     * 车队删除人员成员
     * @param fleetId 车队ID
     * @param operationUserId 人员ID
     */
    void removeOperationUser(Long fleetId, Long operationUserId);
}
xp-robotaxi-vehicleConvoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetServiceImpl.java
@@ -516,4 +516,22 @@
        operations.setOperationsUserId(operationUserId);
        xpFleetOperationsService.save(operations);
    }
    @Override
    public void removeVehicle(Long fleetId, Long vehicleId) {
        // 直接删除关联关系(幂等性:不存在也不报错)
        xpFleetVehicleService.lambdaUpdate()
                .eq(XpFleetVehicle::getFleetId, fleetId)
                .eq(XpFleetVehicle::getVehicleId, vehicleId)
                .remove();
    }
    @Override
    public void removeOperationUser(Long fleetId, Long operationUserId) {
        // 直接删除关联关系(幂等性:不存在也不报错)
        xpFleetOperationsService.lambdaUpdate()
                .eq(XpFleetOperations::getFleetId, fleetId)
                .eq(XpFleetOperations::getOperationsUserId, operationUserId)
                .remove();
    }
}