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

import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import com.prolog.framework.common.message.RestMessage;
import com.prolog.framework.core.pojo.Page;
import com.prolog.rdc.tms.model.dto.ExpensePopDTO;
import com.prolog.rdc.tms.model.dto.SettlementTypeDTO;
import com.prolog.rdc.tms.model.dto.basicData.BaseFeeDTO;
import com.prolog.rdc.tms.model.dto.basicData.CarrierApprovalInfoDTO;
import com.prolog.rdc.tms.model.dto.basicData.CarrierByIdPageDTO;
import com.prolog.rdc.tms.model.dto.basicData.CarrierCheckDTO;
import com.prolog.rdc.tms.model.dto.basicData.CarrierPageDTO;
import com.prolog.rdc.tms.model.dto.basicData.CarrierPopupDTO;
import com.prolog.rdc.tms.model.dto.basicData.CarriersByEncodingNameDTO;
import com.prolog.rdc.tms.model.dto.basicData.UserCarrierPopupDTO;
import com.prolog.rdc.tms.model.dto.fleetManagement.ContainerDTO;
import com.prolog.rdc.tms.model.dto.fleetManagement.DeliverymanPagingQueryDTO;
import com.prolog.rdc.tms.model.dto.fleetManagement.DeviceDTO;
import com.prolog.rdc.tms.model.dto.fleetManagement.DriverPagingQueryDTO;
import com.prolog.rdc.tms.model.dto.fleetManagement.PaperDTO;
import com.prolog.rdc.tms.model.dto.fleetManagement.VehiclePagingQueryDTO;
import com.prolog.rdc.tms.model.vo.AccountSaveInfoVO;
import com.prolog.rdc.tms.model.vo.FeeSaveInfoVO;
import com.prolog.rdc.tms.model.vo.basicConfigure.ImportPageVO;
import com.prolog.rdc.tms.model.vo.basicData.CarrierAddVO;
import com.prolog.rdc.tms.model.vo.basicData.CarrierApprovalInfoVO;
import com.prolog.rdc.tms.model.vo.basicData.CarrierApprovalInvalidVO;
import com.prolog.rdc.tms.model.vo.basicData.CarrierApprovalRetractVO;
import com.prolog.rdc.tms.model.vo.basicData.CarrierApprovalSubmitVO;
import com.prolog.rdc.tms.model.vo.basicData.CarrierApprovalVO;
import com.prolog.rdc.tms.model.vo.basicData.CarrierByIdPageVO;
import com.prolog.rdc.tms.model.vo.basicData.CarrierCopyVO;
import com.prolog.rdc.tms.model.vo.basicData.CarrierDeleteVO;
import com.prolog.rdc.tms.model.vo.basicData.CarrierModifySysFlagVO;
import com.prolog.rdc.tms.model.vo.basicData.CarrierModifyVO;
import com.prolog.rdc.tms.model.vo.basicData.CarrierPageVO;
import com.prolog.rdc.tms.model.vo.basicData.CarrierPopupVO;
import com.prolog.rdc.tms.model.vo.basicData.CarrierRelationInfoVO;
import com.prolog.rdc.tms.model.vo.basicData.CarriersByEncodingNameVO;
import com.prolog.rdc.tms.model.vo.basicData.SettlementTypeVO;
import com.prolog.rdc.tms.model.vo.basicData.UserCarrierPopupVO;
import com.prolog.rdc.tms.model.vo.fleetManagement.CarrierPaperLinkVO;
import com.prolog.rdc.tms.model.vo.fleetManagement.CarrierPaperWhetherEnableVO;

/**
 * 
 *
 * 基础数据-承运商管理服务层
 *
 * @className :TmsBaseCarriersService
 * @author :xyf
 * @creationTime :2022/03/31
 * @description :
 *
 * @modifier :xyf
 * @modifyTime :2022/03/31
 * @reviseRemarks:
 *
 * @version :1.0.0
 *
 */
public interface CarriersService {

	/**
	 * 承运商分页查询
	 * 
	 * @param carrierPageVO
	 * @return
	 */
	Page<CarrierPageDTO> pageCarrierData(CarrierPageVO carrierPageVO);

	/**
	 * 承运商弹框查询
	 * 
	 * @param carrierPopupVO
	 * @return
	 */
	Page<CarrierPopupDTO> popupCarrierData(CarrierPopupVO carrierPopupVO);

	/**
	 * 用户承运商弹框
	 * 
	 * @param userCarrierPopupVO
	 * @return
	 */
	Page<UserCarrierPopupDTO> popupUserCarrierData(UserCarrierPopupVO userCarrierPopupVO);

	/**
	 * 承运商查看
	 * 
	 * @param id
	 * @return
	 */
	CarrierCheckDTO getCarrierData(Long id) throws Exception;

	/**
	 * 承运商新增
	 * 
	 * @param carrierAddVO
	 */
	void addCarrierData(CarrierAddVO carrierAddVO);

	/**
	 * 承运商复制
	 * 
	 * @param carrierCopyVO
	 */
	void copyCarrierData(CarrierCopyVO carrierCopyVO);

	/**
	 * 承运商修改
	 * 
	 * @param carrierModifyVO
	 */
	void modifyCarrierData(CarrierModifyVO carrierModifyVO);

	void modifyCarrierSysFlagData(CarrierModifySysFlagVO carrierModifyVO);

	/**
	 * 承运商停用
	 * 
	 * @param ids
	 */
	void disableCarrierData(List<String> ids);

	/**
	 * 承运商启用
	 * 
	 * @param ids
	 * @throws Exception
	 */
	void enableCarrierData(List<String> ids);

	/**
	 * 承运商删除
	 * 
	 * @param carrierDeleteVOs
	 */
	void deleteCarrierData(List<CarrierDeleteVO> carrierDeleteVOs);

	/**
	 * 承运商根据ID分页查询
	 * 
	 * @param carrierByIdPageVO
	 * @return
	 */
	Page<CarrierByIdPageDTO> PageCarrierByIdData(CarrierByIdPageVO carrierByIdPageVO);

	/**
	 * 承运商批量导入
	 * 
	 * @param file
	 * @throws Exception
	 */
	void batchImportCarriersData(MultipartFile file,String importBatchNumber) throws Exception;

	/**
	 * 承运商导入撤销
	 * 
	 * @param batchno
	 */
	void rollbackData(String batchno);

	/**
	 * 承运商导入分页查询
	 * 
	 * @param importPageVO
	 * @return
	 */
	RestMessage<Object> pageCarrierByImportBatchNumberData(ImportPageVO importPageVO);

	/**
	 * 承运商审核信息查询
	 *
	 * @param carrierApprovalInfoVO
	 * @return
	 */
	CarrierApprovalInfoDTO getApprovalInfoData(CarrierApprovalInfoVO carrierApprovalInfoVO);

	/**
	 * 承运商审核作废
	 *
	 * @param carrierApprovalInvalidVO
	 */
	void carrierApprovalInvalidData(CarrierApprovalInvalidVO carrierApprovalInvalidVO);

	/**
	 * 承运商审核撤回
	 *
	 * @param carrierApprovalRetractVO
	 */
	void carrierApprovalRetractData(CarrierApprovalRetractVO carrierApprovalRetractVO);

	/**
	 * 承运商审核提交
	 *
	 * @param carrierApprovalSubmitVO
	 */
	void carrierApprovalSubmitData(CarrierApprovalSubmitVO carrierApprovalSubmitVO);

	/**
	 * 承运商审核
	 *
	 * @param carrierApprovalVO
	 */
	void carrierApprovalData(CarrierApprovalVO carrierApprovalVO);

	/**
	 * 基础费用新增
	 * @param feeSaveInfoVO
	 */
    void feeSave(FeeSaveInfoVO feeSaveInfoVO);

	/**
	 * 结算新增
	 * @param accountSaveInfoVO
	 */
	void accountSave(AccountSaveInfoVO accountSaveInfoVO);

	List<SettlementTypeDTO> getSettlementByCode(SettlementTypeVO settlementTypeVO);

	List<BaseFeeDTO> feeCode(SettlementTypeVO settlementTypeVO);

    Page<BaseFeeDTO> findBaseFeePage(ExpensePopDTO dto);

	/**
	 * 承运商司机分页查询
	 *
	 * @param vo
	 * @return
	 */
	Page<DriverPagingQueryDTO> pageCarrierDriver(CarrierRelationInfoVO vo);

	/**
	 * 承运商送货员分页查询
	 *
	 * @param vo
	 * @return
	 */
	Page<DeliverymanPagingQueryDTO> pageCarrierDeliveryman(CarrierRelationInfoVO vo);

	/**
	 * 承运商车辆分页查询
	 *
	 * @param vo
	 * @return
	 */
	Page<VehiclePagingQueryDTO> pageCarrierVehicle(CarrierRelationInfoVO vo);

	/**
	 * 承运商容器分页查询
	 *
	 * @param vo
	 * @return
	 */
	Page<ContainerDTO> pageCarrierContainer(CarrierRelationInfoVO vo);

	/**
	 * 承运商设备分页查询
	 *
	 * @param vo
	 * @return
	 */
	Page<DeviceDTO> pageCarrierDevice(CarrierRelationInfoVO vo);


	/**
	 * 承运商证件分页查询
	 *
	 * @param vo
	 * @return
	 */
	Page<PaperDTO> pageCarrierPaper(CarrierRelationInfoVO vo);

	/**
	 * 承运商证件资料新增
	 *
	 * @param vo
	 */
	void addCarrierPaper(CarrierPaperLinkVO vo);

	/**
	 * 承运商证件资料修改
	 *
	 * @param vo
	 */
	void updateCarrierPaper(CarrierPaperLinkVO vo);

	/**
	 * 承运商证件资料是否启用
	 *
	 * @param vo
	 */
	void whetherEnableCarrierPaper(CarrierPaperWhetherEnableVO vo);

	/**
	 * 承运商证件资料删除
	 *
	 * @param paperIdList
	 */
	void deleteCarrierPaper(List<Long> paperIdList);

	/**
	 * 根据承运商编码名称查询承运商
	 * 
	 * @param carriersByEncodingNameVO
	 */
	CarriersByEncodingNameDTO getCarriersByEncodingNameData(CarriersByEncodingNameVO carriersByEncodingNameVO);
}
