package com.xiaopeng.vehicleConvoy.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xiaopeng.api.dto.vehicleConvoy.ServiceVehicleListDto;
import com.xiaopeng.api.dto.vehicleConvoy.VehicleTemperatureDto;
import com.xiaopeng.api.model.account.XpOperationsUser;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.vo.operation.VehiclePositionVo;
import com.xiaopeng.api.vo.vehicleConvoy.VehicleDoorStatusVo;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.vehicleConvoy.model.dto.*;
import com.xiaopeng.vehicleConvoy.model.importExcel.XpVehicleImportExcel;
import com.xiaopeng.vehicleConvoy.model.query.*;
import com.xiaopeng.api.vo.vehicleConvoy.XpVehicleVO;
import com.xiaopeng.vehicleConvoy.model.vo.VehiclePositionDto;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
/**
*
* 车辆管理 服务类
*
*
* @author mitao
* @since 2026-02-03
*/
public interface IXpVehicleService extends IService {
/**
* 根据ID列表批量查询车辆信息
*
* @param ids 车辆ID列表
* @return 车辆列表
*/
List listByIds(List ids);
/**
* 查询可改派的车辆列表
*
* @return 车辆列表
*/
List listAvailableVehicles(Long orderId, Integer orderType, String plateNumber, String fleetName);
/**
* 查询车辆列表接口-地图
*
* @return 车辆列表
*/
PageInfo pageList(VehicleMapQuery query);
/**
* 根据车牌号查询车辆信息
* @param plateNumber
* @return
*/
List listByPlateNumber(String plateNumber);
/**
* 根据围栏ID查询车辆信息
* @param fenceId
* @return
*/
List listByFenceId(Long fenceId);
/**
* 根据围栏ID查询所有绑定车辆(不过滤状态)
* @param fenceId
* @return
*/
List listAllByFenceId(Long fenceId);
/**
* 车辆详情-车门解锁/后备箱解锁
* @param dto 车门解锁/后备箱解锁参数
* @return
*/
Integer unlock(UnlockAppletDTO dto);
/**
* 车辆详情-设定温度
* @param dto 设定温度参数
* @return
*/
Integer setTemperature(SetTemperatureDTO dto);
/**
* 新增车辆
*
* @param dto 新增车辆数据传输对象
*/
XpVehicle addVehicle(VehicleAddDTO dto, Integer officialPartnerId);
/**
* 编辑车辆
*
* @param dto 编辑车辆数据传输对象
*/
void editVehicle(VehicleEditDTO dto, Integer officialPartnerId);
/**
* 完善/更新车辆信息(保险、年检、运营资质等)
*
* @param dto 完善车辆信息数据传输对象
*/
void improveInfo(VehicleImproveInfoDTO dto);
/**
* 批量运营(在库→运营)
*
* @param idStr 车辆ID列表
*/
void batchOperation(String idStr);
/**
* 批量在库(运营→在库)
*
* @param idStr 车辆ID列表
*/
void batchStock(String idStr);
/**
* 批量设置运营区域
*
* @param ids 车辆ID列表
* @param electronicId 运营区域ID(围栏ID)
*/
void batchSetElectronic(List ids, Long electronicId);
/**
* 在库车辆管理分页列表
*
* @param query 查询参数
* @return 分页结果
*/
PageInfo vehiclePageList(VehiclePageQuery query);
/**
* 在库车辆导出列表
*
* @param query 查询参数
* @return 车辆列表
*/
List vehicleExportList(VehicleExportQuery query);
/**
* 导入车辆
*
* @param importList 导入数据列表
*/
void importVehicles(List importList);
/**
* 车辆详情(含围栏名称)
*
* @param id 车辆ID
* @return 车辆详情
*/
XpVehicle getVehicleDetail(Long id);
/**
* 运营车辆管理分页列表
* @param query
* @return
*/
PageInfo operationPageList(OperationVehiclePageQuery query);
/**
* 导出在库车辆列表
*
* @param query 查询参数
*/
List operationVehicleExportList(OperationVehicleExportQuery query);
/**
* 查询车辆温度
*
* @param orderId 订单ID
* @return 车辆温度
*/
VehicleTemperatureDto queryTemperatureByOrderId(Long orderId, String uid);
/**
* 查询车辆温度
*
* @param orderId 订单ID
* @return 车辆温度
*/
Boolean queryTrunkOpenStatusByOrderId(Long orderId, String uid);
/**
* 车辆分页列表
*
* @param query@return
*/
PageInfo getVehiclePageList(VehicleSelectPageQuery query);
/**
* 车辆分页列表
*
* @param query@return
*/
PageInfo getTargetedVehiclePageList(VehicleSelectPageQuery query);
/**
* 获取车辆后备箱是否打开状态
* @param id
* @return
*/
Boolean getVehicleTrunkOpenStatus(String uid, Long id);
/**
* 分页获取运营车辆列表
* @param dto
* @return
*/
List getServiceVehicleList(ServiceVehicleListDto dto);
/**
* 运维APP解锁车门和开关后备箱
* @param dto
* @return
*/
Integer unlockDoor(UnlockAppDTO dto, XpOperationsUser xpOperationsUser);
/**
* 根据订单id获取空调开关状态
* @param orderId
* @param uid
* @return
*/
Boolean queryVehicleAirConditionerSwitch(Long orderId, String uid);
/**
* 开关空调
* @param dto
* @param uid
* @return
*/
Integer airConditionerUnlock(AirConditionerUnlockDTO dto, String uid);
/**
* 获取车辆车门和后备箱状态
* @return
*/
VehicleDoorStatusVo getVehicleDoorStatus(Long orderId);
/**
* 上报车辆实时位置
* @param dto
*/
void reportVehicleLocation(VehiclePositionDto dto, Integer officialPartnerId);
/**
* 上报车辆营运下线信息到交通部
*
* @param vehicles 车辆列表
* @param scene 场景说明
*/
void reportVehicleOperateLogoutToMinistry(List vehicles, String scene);
}