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());
}
}