package com.prolog.rdc.tms.service.fleetManagement;

import com.prolog.framework.common.message.RestMessage;
import com.prolog.framework.core.pojo.Page;
import com.prolog.rdc.tms.model.dto.fleetManagement.*;
import com.prolog.rdc.tms.model.entity.line.TmsBaseVehicleModel;
import com.prolog.rdc.tms.model.vo.basicConfigure.ImportPageVO;
import com.prolog.rdc.tms.model.vo.fleetManagement.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 车队管理-车辆管理服务层
 * 
 * @author Eton Woo
 * @date 2022/03/15
 */
public interface VehicleService {

	/**
	 * 车辆资料分页查询
	 * 
	 * @param vehiclePagingQueryVO
	 * @return
	 */
	Page<VehiclePagingQueryDTO> pageVehicleData(VehiclePagingQueryVO vehiclePagingQueryVO);

	/**
	 * 车辆资料弹窗
	 * 
	 * @param vehiclePopupVO
	 * @return
	 */
	Page<VehiclePopupDTO> popupVehicleData(VehiclePopupVO vehiclePopupVO);

	List<VehiclePopupDTO> vehicleData(VehiclePopupVO vehiclePopupVO);

	/**
	 * 车辆-已绑司机资料分页查询
	 * 
	 * @param vehicleDriverPagingQueryVO
	 * @return
	 */
	Page<VehicleDriverPagingQueryDTO> pageVehicleDriverData(VehicleDriverPagingQueryVO vehicleDriverPagingQueryVO);

	/**
	 * 车辆-未绑司机资料分页查询
	 * 
	 * @param vehicleDriverPagingQueryVO
	 * @return
	 */
	Page<VehicleDriverPagingQueryDTO> pageVehicleNotDriverData(VehicleDriverPagingQueryVO vehicleDriverPagingQueryVO);

	/**
	 * 车辆-线路资料分页查询
	 * 
	 * @param vehicleLinePagingQueryVO
	 * @return
	 */
	Page<VehicleLinePagingQueryDTO> pageVehicleLineData(VehicleLinePagingQueryVO vehicleLinePagingQueryVO);

	/**
	 * 车辆-证件资料分页查询
	 * 
	 * @param vehiclePaperPagingQueryVO
	 * @return
	 */
	Page<VehiclePaperPagingQueryDTO> pageVehiclePaperData(VehiclePaperPagingQueryVO vehiclePaperPagingQueryVO);

	/**
	 * 车辆-设备资料分页查询
	 *
	 * @param vehiclePaperPagingQueryVO
	 * @return
	 */
	Page<VehicleDeviceLinkViewDTO> pageVehicleDeviceData(VehiclePaperPagingQueryVO vehiclePaperPagingQueryVO);

	/**
	 * 车辆-容器资料分页查询
	 *
	 * @param vehiclePaperPagingQueryVO
	 * @return
	 */
	Page<ContainerDTO> pageVehicleContainerData(VehiclePaperPagingQueryVO vehiclePaperPagingQueryVO);

	/**
	 * 车辆-设备资料弹窗查询
	 *
	 * @param vehiclePaperPagingQueryVO
	 * @return
	 */
	Page<VehicleDeviceLinkViewDTO> pageVehicleDevicePopupData(VehiclePaperPagingQueryVO vehiclePaperPagingQueryVO);

	/**
	 * 设备资料弹窗查询
	 *
	 * @param vehiclePaperPagingQueryVO
	 * @return
	 */
	Page<VehicleDeviceLinkViewDTO> pageDevicePopupData(VehiclePaperPagingQueryVO vehiclePaperPagingQueryVO);

	/**
	 * 车辆资料查看
	 * 
	 * @param vehicleCheckVO
	 * @return
	 */
	VehicleCheckDTO getVehicleData(VehicleCheckVO vehicleCheckVO);

	/**
	 * 车辆资料是否启用
	 * 
	 * @param vehicleWhetherEnableVO
	 * @throws Exception
	 */
	void whetherEnableVehicleData(VehicleWhetherEnableVO vehicleWhetherEnableVO) throws Exception;

	/**
	 * 车辆资料新增
	 * 
	 * @param vehicleAddVO
	 * @throws Exception
	 */
	void addVehicleData(VehicleAddVO vehicleAddVO) throws Exception;

	/**
	 * 车辆资料修改
	 * 
	 * @param vehicleModifyVO
	 * @throws Exception
	 */
	void modifyVehicleData(VehicleModifyVO vehicleModifyVO) throws Exception;

	/**
	 * 车辆资料删除
	 *
	 * @param list
	 * @return
	 */
	void deleteVehicleData(List<VehicleDeleteVO> list) throws Exception;

	/**
	 * 车辆绑定司机删除
	 * 
	 * @param vehicleDriverDeleteVOs
	 * @throws Exception
	 */
	void deleteVehicleDriverData(List<VehicleDriverDeleteVO> vehicleDriverDeleteVOs) throws Exception;

	/**
	 * 车辆绑定设备删除
	 *
	 * @param vehicleDeviceDeleteVOs
	 * @throws Exception
	 */
	void deleteVehicleDeviceData(List<VehicleDeviceDeleteVO> vehicleDeviceDeleteVOs) throws Exception;

	/**
	 * 车辆绑定容器删除
	 *
	 * @param idList
	 */
	void deleteVehicleContainerData(List<String> idList);

	/**
	 * 车辆-证件资料新增
	 * 
	 * @param vehiclePaperAddVO
	 * @throws Exception
	 */
	void addVehiclePaperData(VehiclePaperAddVO vehiclePaperAddVO) throws Exception;

	/**
	 * 车辆证件资料查看
	 * 
	 * @param vehiclePaperCheckVO
	 * @return
	 */
	VehiclePaperCheckDTO getVehiclePaperCheckData(VehiclePaperCheckVO vehiclePaperCheckVO);

	/**
	 * 车辆证件资料修改
	 * 
	 * @param vehiclePaperModifyVO
	 * @throws Exception
	 */
	void modifyVehiclePaperData(VehiclePaperModifyVO vehiclePaperModifyVO) throws Exception;

	/**
	 * 车辆证件资料是否启用
	 * 
	 * @param vehiclePaperWhetherEnableVO
	 * @throws Exception
	 */
	void whetherEnableVehiclePaperData(VehiclePaperWhetherEnableVO vehiclePaperWhetherEnableVO) throws Exception;

	/**
	 * 车辆证件资料删除
	 * 
	 * @param vehiclePaperDeleteVOs
	 */
	void deleteVehiclePaperData(List<VehiclePaperDeleteVO> vehiclePaperDeleteVOs);

	/**
	 * 车辆批量导入
	 * 
	 * @param file
	 */
	void batchImportVehicleData(MultipartFile file, String importBatchNumber) throws Exception;

	/**
	 * 车辆导入撤销
	 * 
	 * @param batchno
	 */
	void rollbackData(String batchno);

	/**
	 * 车辆导入分页查询
	 * 
	 * @param importPageVO
	 * @return
	 */
	RestMessage<Object> pageVehicleByImportBatchNumberData(ImportPageVO importPageVO);

	/**
	 * 根据司机ID查询车辆信息
	 * 
	 * @param driverId
	 * @return
	 */
	List<TmsBaseVehicleModel> listVehicleByDriverIdData(Long driverId,Long...vehicleTypeId);

	/**
	 * 司机车辆查询或新增
	 * 
	 * @param vehicleAndVehicleVO
	 */
	VehicleAndDriverDTO vehicleAutomaticData(VehicleAndVehicleVO vehicleAndVehicleVO);

	/**
	 * 根据司机ID查询车辆信息
	 *
	 * @param driverId
	 * @return
	 */
	List<TmsBaseVehicleModel> listVehicleByDriverIdDataSelfReg(Long driverId);

	/**
	 * 车辆资料弹窗
	 *
	 * @param vehiclePopupVO
	 * @return
	 */
	Page<VehiclePopupDTO> popupVehicleSelfRegData(VehiclePopupVO vehiclePopupVO);

}
