package com.prolog.rdc.tms.dao.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.prolog.framework.dao.mapper.BaseMapper;
import com.prolog.rdc.tms.model.dto.AbnormalShipbillPageDTO;
import com.prolog.rdc.tms.model.dto.AllShipbillPageDTO;
import com.prolog.rdc.tms.model.dto.ConsignmentHandoverPageDTO;
import com.prolog.rdc.tms.model.dto.OrderBusinessTypeDTO;
import com.prolog.rdc.tms.model.dto.OrderTypeDTO;
import com.prolog.rdc.tms.model.dto.PendingDispatchPageDTO;
import com.prolog.rdc.tms.model.dto.PendingDispatchShipbillQtyByLineDTO;
import com.prolog.rdc.tms.model.dto.PendingDispatchShipbillQtyDTO;
import com.prolog.rdc.tms.model.dto.PendingReviewPageDTO;
import com.prolog.rdc.tms.model.dto.ScanDispatchDetailDTO;
import com.prolog.rdc.tms.model.dto.ScanDispatchShipbillDTO;
import com.prolog.rdc.tms.model.dto.ShipbillHeaderPageDTO;
import com.prolog.rdc.tms.model.dto.ShipbillHotMapDTO;
import com.prolog.rdc.tms.model.dto.ShipbillLineMapDTO;
import com.prolog.rdc.tms.model.dto.SysGroupQueryDTO;
import com.prolog.rdc.tms.model.dto.SysGroupShipbillQueryDTO;
import com.prolog.rdc.tms.model.dto.WaitForSelfWithdrawalPageDTO;
import com.prolog.rdc.tms.model.dto.planMng.PendingPlanBillQueryDTO;
import com.prolog.rdc.tms.model.entity.TmsShipbillHeaderModel;
import com.prolog.rdc.tms.model.vo.AbnormalShipbillQueryVO;
import com.prolog.rdc.tms.model.vo.AllShipbillAdsQueryVO;
import com.prolog.rdc.tms.model.vo.AllShipbillQueryVO;
import com.prolog.rdc.tms.model.vo.AllShipbillSellQueryVO;
import com.prolog.rdc.tms.model.vo.BillScanVO;
import com.prolog.rdc.tms.model.vo.ConsignmentHandoverPageVO;
import com.prolog.rdc.tms.model.vo.PendingDispatchAdvQueryVO;
import com.prolog.rdc.tms.model.vo.PendingReviewAdvancedQueryVO;
import com.prolog.rdc.tms.model.vo.ShipbillAdvancedQueryVO;
import com.prolog.rdc.tms.model.vo.SysGroupQueryOrderTypeVO;
import com.prolog.rdc.tms.model.vo.SysGroupQueryVO;
import com.prolog.rdc.tms.model.vo.WaitForSelfAdsQueryVO;
import com.prolog.rdc.tms.model.vo.WaitForSelfWithdrawalQueryVO;
import com.prolog.rdc.tms.model.vo.intransit.InTransitQueryVO;
import com.prolog.rdc.tms.model.vo.planMng.TransportPlanQueryVO;

/**
 * 运单汇总表mapper
 *
 * Company: 湖北普罗格科技股份有限公司
 *
 * @author zhangsj
 * @since 2022/3/30 14:37
 */
@Repository
public interface TmsShipbillHeaderMapper extends BaseMapper<TmsShipbillHeaderModel> {

	/**
	 * 运单地图-运单货量统计 按货主统计
	 * 
	 * @param shipbillIds
	 * @return
	 */
	Integer shipbillStatisticsByCargoOwnerId(@Param("shipbillIds") String[] shipbillIds);

	/**
	 * 运单地图-运单货量统计 按订单业务类型统计
	 * 
	 * @param shipbillIds
	 * @return
	 */
	List<OrderBusinessTypeDTO> shipbillStatisticsByOrderBusinessType(@Param("shipbillIds") String[] shipbillIds);

	/**
	 * 运单地图-运单货量统计 按订单类型统计
	 * 
	 * @param shipbillIds
	 * @return
	 */
	List<OrderTypeDTO> shipbillStatisticsByOrderType(@Param("shipbillIds") String[] shipbillIds);

	/**
	 * 运单地图-运单货量统计 按收货方单位ID统计
	 * 
	 * @param shipbillIds
	 * @return
	 */
	Integer shipbillStatisticsByConsigneeUnitId(@Param("shipbillIds") String[] shipbillIds);

	/**
	 * 运单地图-运单货量统计 按收货方详细地址统计
	 * 
	 * @param shipbillIds
	 * @return
	 */
	Integer shipbillStatisticsByConsigneeAddress(@Param("shipbillIds") String[] shipbillIds);

	/**
	 * 运单地图-运单货量统计 件数，体积，重量统计
	 * 
	 * @param shipbillIds
	 * @return
	 */
	PendingDispatchShipbillQtyDTO shipbillStatisticsByPVW(@Param("shipbillIds") String[] shipbillIds);

	/**
	 * 运单地图-运单货量统计 按线路统计件数，体积，重量
	 * 
	 * @param shipbillIds
	 * @return
	 */
	List<PendingDispatchShipbillQtyByLineDTO> shipbillStatisticsByline(@Param("shipbillIds") String[] shipbillIds);

	/**
	 * 运单地图-运单货量统计 按线路统计订单业务类型的运单量
	 * 
	 * @param shipbillIds
	 * @param lineId
	 * @return
	 */
	List<OrderBusinessTypeDTO> shipbillStatisticsOrderBusinessTypeByline(@Param("shipbillIds") String[] shipbillIds, @Param("lineId") Long lineId);

	/**
	 * 运单地图-运单货量统计 按线路统计订单类型的运单量
	 * 
	 * @param shipbillIds
	 * @param lineId
	 * @return
	 */
	List<OrderTypeDTO> shipbillStatisticsOrderTypeByLine(@Param("shipbillIds") String[] shipbillIds, @Param("lineId") Long lineId);

	/**
	 * 系统分组-查询
	 * 
	 * @param vo
	 * @return
	 */
	List<SysGroupQueryDTO> sysGroupQuery(@Param("vo") SysGroupQueryVO vo);

	/**
	 * 热力图站点信息查询
	 *
	 * @param vo
	 * @return
	 */
	List<ShipbillHotMapDTO> shipbillHotMapSiteQuery(@Param("vo") SysGroupQueryVO vo);

	/**
	 * 线路地图站点信息查询
	 *
	 * @param vo
	 * @return
	 */
	List<ShipbillLineMapDTO> shipbillLineMapSiteQuery(@Param("vo") SysGroupQueryVO vo);

	/**
	 * 系统分组-查询 按订单类型统计
	 * 
	 * @param groupByConditionVO
	 * @return
	 */
	List<OrderTypeDTO> sysGroupQueryOrderType(@Param("shipbillIds") String[] shipbillIds, @Param("vo") SysGroupQueryOrderTypeVO groupByConditionVO);

	/**
	 * 系统分组-查询 按订单业务类型统计
	 *
	 * @param shipbillIds
	 * @return
	 */
	List<OrderBusinessTypeDTO> sysGroupQueryOrderBusinessType(@Param("shipbillIds") String[] shipbillIds, @Param("vo") SysGroupQueryOrderTypeVO groupByConditionVO);

	/**
	 * 待自提主界面按运单查询
	 *
	 * @param
	 * @return
	 */
	List<WaitForSelfWithdrawalPageDTO> querySelfWithdrawalByShipbillId(@Param("shipbillIds") List<String> shipbillIds);


	/**
	 * 运单汇总高级查询
	 *
	 * @param vo
	 * @return
	 */
	List<ShipbillHeaderPageDTO> shipbillAdvancedQuery(@Param("vo") ShipbillAdvancedQueryVO vo);

	/**
	 * 待审核高级查询
	 *
	 * @param vo
	 * @return
	 */
	List<PendingReviewPageDTO> pendingReviewAdvancedQuery(@Param("vo") PendingReviewAdvancedQueryVO vo);

	/**
	 * 待调度高级查询
	 *
	 * @param vo
	 * @return
	 */
	List<PendingDispatchPageDTO> pendingDispatchAdvancedQuery(@Param("vo") PendingDispatchAdvQueryVO vo);

	/**
	 * 所有运单高级查询
	 *
	 * @param vo
	 * @return
	 */
	List<AllShipbillPageDTO> allShipbillAdvancedQuery(@Param("vo") AllShipbillAdsQueryVO vo);

	/**
	 * 待自提运单高级查询
	 *
	 * @param vo
	 * @return
	 */
	List<WaitForSelfWithdrawalPageDTO> selfPickUpAdvancedQuery(@Param("vo") WaitForSelfAdsQueryVO vo);

	/**
	 * 所有运单查询
	 *
	 * @param vo
	 * @return
	 */
	List<AllShipbillPageDTO> queryAllShipbill(@Param("vo") AllShipbillQueryVO vo);

	// STD-DEVELOP20220823 lhb 销售单模式 20220919 start
	/**
	 * 销售单模式查询
	 *
	 * @param vo
	 * @return
	 */
	List<AllShipbillPageDTO> querySellAllShipbill(@Param("vo") AllShipbillQueryVO vo);

	/**
	 * 关闭运单查询
	 *
	 * @param vo
	 * @return
	 */
	List<AllShipbillPageDTO> queryCloseShipbill(@Param("vo") AllShipbillSellQueryVO vo);
	// STD-DEVELOP20220823 lhb 销售单模式 20220919 end

	/**
	 * 待自提主界面分页查询
	 *
	 * @param
	 * @return
	 */
	List<WaitForSelfWithdrawalPageDTO> queryWaitForSelfWithdrawal(@Param("vo") WaitForSelfWithdrawalQueryVO vo);

	/**
	 * 异常订单主界面分页查询
	 *
	 * @param
	 * @return
	 */
	List<AbnormalShipbillPageDTO> queryAbnormalShipbillPage(@Param("vo") AbnormalShipbillQueryVO vo);

	/**
	 * 在途管理-运单查询
	 * @param vo
	 * @return
	 */
	List<ShipbillHeaderPageDTO> getInTransitShipBill(@Param("vo") InTransitQueryVO vo);

	/**
	 * 在途管理-设备运单查询
	 * @param vo
	 * @return
	 */
	List<ShipbillHeaderPageDTO> getInTransitDeviceShipBill(@Param("vo") InTransitQueryVO vo);

	/**
	 * 在途管理-设备运单查询
	 * @param vo
	 * @return
	 */
	List<ShipbillHeaderPageDTO> getInTransitDeviceLinkShipBill(@Param("vo") InTransitQueryVO vo);

	/**
	 * 在途管理-根据派车单查询运单
	 * @param loadingBillNo
	 * @return
	 */
	List<ShipbillHeaderPageDTO> getInTransitShipBillByLoadingBillNo(@Param("loadingBillNo") String loadingBillNo);

	List<TmsShipbillHeaderModel> shipbillMatchLineQuery(@Param("vo") SysGroupQueryVO vo);

	/**
	 * 系统分组-运单明查询
	 *
	 * @param shipbillIds
	 * @return
	 */
	List<SysGroupShipbillQueryDTO> sysGroupShipbillsQuery(@Param("shipbillIds") List<String> shipbillIds);

	/**
	 * 运单明查询
	 *
	 * @param shipbillIds
	 * @return
	 */
	List<TmsShipbillHeaderModel> shipbillsQuery(@Param("shipbillIds") List<String> shipbillIds);

	List<PendingPlanBillQueryDTO> queryPendingPlanBillData(@Param("vo") TransportPlanQueryVO vo);

	List<ScanDispatchShipbillDTO> scanDispatchShipbill(@Param("vo") BillScanVO vo);

	List<ScanDispatchDetailDTO> scanDispatchShipbillDetail(@Param("vo") BillScanVO vo);

	/**
	 * 托运交接（运单）查询
	 * 
	 * @param consignmentHandoverPageVO
	 * @return
	 */
	List<ConsignmentHandoverPageDTO> pageConsignmentHandoverShipbillSql(@Param("vo") ConsignmentHandoverPageVO consignmentHandoverPageVO);
}
