package com.xiaopeng.vehicleConvoy.controller; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.xiaopeng.api.dto.open_api.BrandInfo; import com.xiaopeng.api.feignClient.account.SysGroupMenuClient; import com.xiaopeng.api.feignClient.account.XpOperationsUserClient; import com.xiaopeng.api.model.account.XpOperationsUser; import com.xiaopeng.api.model.vehicleConvoy.XpFleet; import com.xiaopeng.api.model.vehicleConvoy.XpFleetOperations; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.vehicleConvoy.model.dto.FleetAddDTO; import com.xiaopeng.vehicleConvoy.model.dto.FleetEditDTO; import com.xiaopeng.vehicleConvoy.model.query.FleetPageQuery; import com.xiaopeng.vehicleConvoy.model.query.FleetUserPageQuery; import com.xiaopeng.vehicleConvoy.model.query.FleetVehiclePageQuery; import com.xiaopeng.vehicleConvoy.model.vo.FleetDetailVO; import com.xiaopeng.vehicleConvoy.model.vo.FleetPageVO; import com.xiaopeng.vehicleConvoy.model.vo.FleetUserVO; import com.xiaopeng.vehicleConvoy.model.vo.FleetVehicleVO; import com.xiaopeng.vehicleConvoy.service.IXpFleetOperationsService; import com.xiaopeng.vehicleConvoy.service.IXpFleetService; import io.swagger.annotations.*; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** *

* 车队管理 前端控制器 *

* * @author mitao * @since 2026-02-03 */ @Api(tags = "车队管理") @RequiredArgsConstructor(onConstructor_ = @Lazy) @RestController public class XpFleetController { private final IXpFleetService xpFleetService; private final IXpFleetOperationsService xpFleetOperationsService; @Resource private SysGroupMenuClient groupMenuClient; /** * 根据车队名字模糊查询车队人员 * */ @ApiOperation(value = "批量查询车队信息", tags = {"内部接口"}) @PostMapping("/logan/inner/fleet/idsByFleetName") public R> idsByFleetName(@RequestParam String fleetName) { List ids = xpFleetService.lambdaQuery().like(XpFleet::getFleetName, fleetName).list().stream().map(XpFleet::getId).collect(Collectors.toList()); List ret = xpFleetOperationsService.lambdaQuery().eq(XpFleetOperations::getFleetId, ids).list().stream().map(XpFleetOperations::getFleetId).collect(Collectors.toList()); return R.ok(ret); } /** * 根据ID列表批量查询车队信息(内部接口) * * @param ids 车队ID列表 * @return 车队列表 */ @ApiOperation(value = "批量查询车队信息", tags = {"内部接口"}) @PostMapping("/logan/inner/fleet/listByIds") public R> listByIds(@RequestBody List ids) { if (CollectionUtils.isEmpty(ids)) { return R.ok(new ArrayList<>()); } return R.ok(xpFleetService.listByIds(ids)); } /** * 通过运营人员id查询车队信息 * * @param operationsUserId 运营人员id * @return 车队信息 */ @ApiOperation(value = "通过运维人员id查询车队信息", tags = {"内部接口"}) @GetMapping("/logan/inner/v1/fleet/getFleetByOperationsUserId") public R getFleetByOperationsUserId(@RequestParam Long operationsUserId) { if (Objects.isNull(operationsUserId)) { return R.ok(); } // 查询车队人员关联关系 XpFleetOperations fleetOperations = xpFleetOperationsService.getOne(Wrappers.lambdaQuery(XpFleetOperations.class) .eq(XpFleetOperations::getOperationsUserId, operationsUserId) .last("LIMIT 1")); if (Objects.isNull(fleetOperations)) { return R.ok(); } XpFleet xpFleet = xpFleetService.getById(fleetOperations.getFleetId()); return R.ok(xpFleet); } /** * * 根据打卡地址id查询被车辆使用次数 * @param locationId * @return */ @GetMapping("/logan/inner/fleet/getUseCountByLocationId") public R getUseCountByLocationId(@RequestParam Long locationId){ Long count = xpFleetService.count(Wrappers.lambdaQuery(XpFleet.class) .eq(XpFleet::getLocationId, locationId)); return R.ok(count); } /** * 添加车队 * * @param dto 添加车队DTO * @return 操作结果 */ @ApiOperation(value = "添加车队", tags = {"管理后台-车队管理"}, notes = "打卡地列表接口在xp-robotaxi-maintenance-boot,人员列表在xp-robotaxi-account-boot") @PostMapping("/api/v1/fleet/add") public R add(@Valid @RequestBody FleetAddDTO dto) { return xpFleetService.add(dto); } /** * 编辑车队 * * @param dto 编辑车队DTO * @return 操作结果 */ @ApiOperation(value = "编辑车队", tags = {"管理后台-车队管理"}, notes = "打卡地列表接口在xp-robotaxi-maintenance-boot,人员列表在xp-robotaxi-account-boot") @PostMapping("/api/v1/fleet/edit") public R edit(@Valid @RequestBody FleetEditDTO dto) { return xpFleetService.edit(dto); } /** * 查询车队详情 * * @param id 车队id * @return 车队详情 */ @ApiOperation(value = "查询车队详情", tags = {"管理后台-车队管理"}) @GetMapping("/api/v1/fleet/queryById") public R queryById(@RequestParam Long id) { R fleetDetailVOR = xpFleetService.queryById(id); fleetDetailVOR.getData().setPhoneNumber(groupMenuClient.getPhoneDesensitization(fleetDetailVOR.getData().getPhoneNumber()).getData()); return fleetDetailVOR; } /** * 车队分页列表 * * @param query 查询参数 * @return 分页结果 */ @ApiOperation(value = "车队分页列表", tags = {"管理后台-车队管理"}) @PostMapping("/api/v1/fleet/pageList") public R> pageList(@Valid @RequestBody FleetPageQuery query) { R> pageInfoR = xpFleetService.pageList(query); pageInfoR.getData().getRecords().forEach(s->s.setPhoneNumber(groupMenuClient.getPhoneDesensitization(s.getPhoneNumber()).getData())); return pageInfoR; } /** * 查询车队车辆分页列表 * * @param query 查询参数 * @return 分页结果 */ @ApiOperation(value = "查询车队车辆分页列表", tags = {"管理后台-车队管理"}) @PostMapping("/api/v1/fleet/queryVehiclePageList") public R> queryVehiclePageList(@Valid @RequestBody FleetVehiclePageQuery query) { return xpFleetService.queryVehiclePageList(query); } /** * 查询车队人员分页列表 * * @param query 查询参数 * @return 分页结果 */ @ApiOperation(value = "查询车队人员分页列表", tags = {"管理后台-车队管理"}) @PostMapping("/api/v1/fleet/queryUserPageList") public R> queryUserPageList(@Valid @RequestBody FleetUserPageQuery query) { return xpFleetService.queryUserPageList(query); } @ApiOperation(value = "删除车队", tags = {"管理后台-车队管理"}) @DeleteMapping("/api/v1/fleet/delete/{id}") public R deleteById(@ApiParam(name = "id", value = "车队ID") @PathVariable Long id) { xpFleetService.deleteById(id); return R.ok(); } @ApiOperation(value = "车队添加车辆成员", tags = {"管理后台-车队管理"}) @PostMapping("/api/v1/fleet/vehicle/add") @ApiImplicitParams({ @ApiImplicitParam(name = "fleetId", value = "车队ID", dataTypeClass = Long.class), @ApiImplicitParam(name = "vehicleId", value = "车辆ID", dataTypeClass = Long.class)}) public R addVehicle(Long fleetId, Long vehicleId) { xpFleetService.addVehicle(fleetId, vehicleId); return R.ok(); } @ApiOperation(value = "车队添加人员成员", tags = {"管理后台-车队管理"}) @PostMapping("/api/v1/fleet/operation-user/add") @ApiImplicitParams({ @ApiImplicitParam(name = "fleetId", value = "车队ID", dataTypeClass = Long.class), @ApiImplicitParam(name = "operationUserId", value = "车辆ID", dataTypeClass = Long.class)}) public R addOperationUserId(Long fleetId, Long operationUserId) { xpFleetService.addOperationUserId(fleetId, operationUserId); 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(); } /** * 根据ID列表批量查询车队信息(内部接口) * * @return 车队列表 */ @ApiOperation(value = "获取车队不分页列表", tags = {"管理后台-车队管理"}) @PostMapping("/api/v1/fleet/list") public R> getList() { return R.ok(xpFleetService.list()); } }