package com.prolog.rdc.tms.service;

import com.prolog.framework.core.pojo.Page;
import com.prolog.product.core.framework.entity.UserEntity;
import com.prolog.rdc.tms.model.dto.*;
import com.prolog.rdc.tms.model.dto.basicConfigure.ShipbillMatchCarrierDTO;
import com.prolog.rdc.tms.model.dto.basicConfigure.StrategySplitMatchingDTO;
import com.prolog.rdc.tms.model.dto.planMng.PlanBillLoadingDTO;
import com.prolog.rdc.tms.model.dto.planMng.PlanGroupQueryRsDTO;
import com.prolog.rdc.tms.model.entity.TmsShipbillHeaderModel;
import com.prolog.rdc.tms.model.vo.*;
import com.prolog.rdc.tms.model.vo.planMng.PlanBillLoadingVO;
import com.prolog.rdc.tms.model.vo.planMng.PlanDispatchVO;
import com.prolog.rdc.tms.model.vo.planMng.PlanGroupQueryVO;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 调度管理-待调度服务层
 *
 * @author lhb
 * @since 2022-04-13 14:45:00
 */
public interface PendingDispatchService {

	/**
	 * 待调度分页查询
	 *
	 * @param pendingDispatchPageVO
	 * @return
	 */
	Page<PendingDispatchPageDTO> pagePendingDispatchData(PendingDispatchPageVO pendingDispatchPageVO);

	/**
	 * 待调度高级查询
	 *
	 * @param advancedQueryVO
	 * @return
	 */
	Page<PendingDispatchPageDTO> pageAdvanced(PendingDispatchAdvQueryVO advancedQueryVO);

	/**
	 * 待调度商品信息查询
	 *
	 * @param detailItemPageVO
	 * @return
	 */
	Page<PendingDispatchDetailDTO> listShipbillDetailData(DetailItemPageVO detailItemPageVO);

	/**
	 * 待调度折分商品信息查询
	 *
	 * @param detailItemSplitVO
	 * @return
	 */
	List<PendingDispatchDetailDTO> splitListShipbillDetail(DetailItemSplitVO detailItemSplitVO);

	/**
	 * 待调度包裹信息查询
	 *
	 * @param detailItemPageVO
	 * @return
	 */
	Page<PendingDispatchPackageDTO> listShipbillPackageData(DetailItemPageVO detailItemPageVO);

	/**
	 * 运单地图-运单货量统计
	 *
	 * @param vo
	 * @return
	 */
	PendingDispatchShipbillQtyDTO goodsQtyStatistics(SysGroupQueryVO vo);

	/**
	 * 待调度运单地图-线路货量统计
	 *
	 * @param vo
	 * @return
	 */
	List<PendingDispatchShipbillQtyByLineDTO> lineQtyStatistics(SysGroupQueryVO vo);

	/**
	 * 调度
	 *
	 * @param vo
	 * @return
	 */
	void dispatch(PendingDispatchVO vo);

	void updatePlanBill(List<String> shipbillIds,UserEntity user);

	/**
	 * 调度
	 *
	 * @param vo
	 * @return
	 */
	void autoDispatch(PendingDispatchVO vo, UserEntity user, Date date,String isPlanDis,String...isAudit);

	/**
	 * 调度并审核
	 *
	 * @param vo
	 * @return
	 */
	void dispatchReview(PendingDispatchVO vo);

	/**
	 * 获取调度单号
	 *
	 * @param
	 * @return
	 */
	String getDispatchNumber();

	/**
	 * 分组调度
	 *
	 * @param groupPendingDispatchVOs
	 * @return
	 */
	void groupDispatch(List<GroupPendingDispatchVO> groupPendingDispatchVOs);

	/**
	 * 分组调度并审核
	 *
	 * @param groupDispatchReviewVOs
	 * @return
	 */
	void groupDispatchReview(List<GroupPendingDispatchReviewVO> groupDispatchReviewVOs);

	/**
	 * 系统分组-查询
	 *
	 * @param vo
	 * @return
	 */
	SysGroupQueryRsDTO sysGroupNewQuery(SysGroupQueryVO vo);

	/**
	 * 系统分组-运单查询
	 *
	 * @param vo
	 * @return
	 */
	List<SysGroupShipbillQueryDTO> sysGroupShipbillQuery(SysGroupQueryVO vo);

	/**
	 * 系统分组-配载单信息查询
	 *
	 * @param vo
	 * @return
	 */
	SysGroupLoadingQueryDTO sysGroupLoadingQuery(SysGroupQueryVO vo);

	/**
	 * 待调度中转
	 *
	 * @param transitVO
	 * @return
	 */
	void transit(TransitVO transitVO);

	/**
	 * 地址解析查询
	 *
	 * @param pendingDispatchAddressPageVO
	 */
	Page<PendingDispatchAddressPageDTO> parseAddressQueryData(PendingDispatchAddressPageVO pendingDispatchAddressPageVO);

	/**
	 * 待调度地址解析
	 *
	 * @param vo
	 * @return
	 */
	void parseAddressData(PendingDispatchParseAddressVO vo);

	/**
	 * 待调度运单打印
	 *
	 * @param id
	 * @return
	 */
	Map<String, Object> shipbillPrint(String id);

	/**
	 * 待调度导出所有数据
	 *
	 * @param pendingDispatchExportAllDataVO
	 * @return
	 */
	List<PendingDispatchExportDetailDataDTO> exportAllDetailData(PendingDispatchExportAllDataVO pendingDispatchExportAllDataVO);

	/**
	 * 待调度导出当前页数据
	 *
	 * @param currentPageDataVO
	 * @return
	 */
	List<PendingDispatchExportDetailDataDTO> exportCurrentPageDetailData(PendingDispatchExportCurrenPageDataVO currentPageDataVO);

	/**
	 * 待调度导出选择行数据
	 *
	 * @param shipbillIdList
	 * @return
	 */
	List<PendingDispatchExportDetailDataDTO> exportSelectLineData(List<String> shipbillIdList);

	/**
	 * 待调度查看
	 * 
	 * @param shipbillId
	 * @return
	 */
	PendingDispatchViewDTO pendingDispatchView(String shipbillId);

	/**
	 * 待调度按商品拆分
	 * 
	 * @param splitVO
	 * @return
	 */
	void goodsSplit(SplitVO splitVO);

	/**
	 * 待调度撤销
	 * 
	 * @param revokeVO
	 * @return
	 */
	void revoke(RevokeVO revokeVO);

	/**
	 * 待调度商品包裹信息查询
	 * 
	 * @param pendingDispatchPackageByDetailVO
	 * @return
	 */
	Page<PendingDispatchPackageDTO> viewDetailPackage(PendingDispatchPackageByDetailVO pendingDispatchPackageByDetailVO);

	/**
	 * 待调度商品包裹信息查询
	 * 
	 * @param pendingDispatchDetailByPackageVO
	 * @return
	 */
	Page<PendingDispatchPackageDetailDTO> viewPackageDetail(PendingDispatchDetailByPackageVO pendingDispatchDetailByPackageVO);

	/**
	 * 待待调度点击运单查看运单相关信息
	 * 
	 * @param shipbillId
	 * @return
	 */
	PendingDispatchViewDTO viewShipbillData(String shipbillId);

	/**
	 * 智能拆分
	 *
	 * @param smartSplitVO
	 * @return
	 */
	List<SmartSplitDTO> smartSplitData(SmartSplitVO smartSplitVO);

	/**
	 * 智能拆分(选择策略)
	 *
	 * @param smartSplitStrategyVOS
	 */
	void smartSplitStrategyData(List<SmartSplitStrategyVO> smartSplitStrategyVOS);

	/**
	 * 策略调度
	 *
	 * @param shipbillIds
	 */
	String smartDispatchStrategy(List<String> shipbillIds);

	// STD-DEVELOP20220823 lhb bwc0823003 20220824  start
	/**
	 * 智能拆分（公共处理）
	 *
	 * @param strategyDTO
	 */
	void autoSplit(StrategySplitMatchingDTO strategyDTO, TmsShipbillHeaderModel shipbillHeaderModel, UserEntity user, Date date);

	/**
	 * 手动拆分（公共处理）
	 *
	 * @param splitVO
	 */
	void autoGoodsSplit(SplitVO splitVO,UserEntity user,Date date,String...isPlanDisSplit);

	// STD-DEVELOP20220823 lhb bwc0823003 20220824  end

	/**
	 * 策略中转
	 *
	 * @param shipbillIds
	 */
	void smartTransferData(List<String> shipbillIds);

	/**
	 * 运单地图站点信息查询
	 *
	 * @param vo
	 */
	ShipbillMapDTO shipbillMapSiteQuery(SysGroupQueryVO vo);

	/**
	 * 热力图站点信息查询
	 *
	 * @param vo
	 */
	List<ShipbillHotMapDTO> shipbillHotMapSiteQuery(SysGroupQueryVO vo);
	/**
	 * 查询调度策略
	 *
	 * @param shipbillIds
	 */
	ShipbillMatchCarrierDTO queryDispatchStrategyData(List<String> shipbillIds);

	/**
	 * 运单线路站点信息查询
	 *
	 * @param vo
	 */
	List<SysGroupShipbillQueryDTO> shipbillSiteQuery(SysGroupQueryVO vo);


	/**
	 * 运单匹配线路
	 *
	 * @param vo
	 */
	void matchLineStrategy(SysGroupQueryVO vo);

	/**
	 * 根据站点计算总里程
	 *
	 * @param vos
	 */
	CalculateMileageDTO calculateTotalMileage(List<CalculateMileageVO> vos);

	PlanBillLoadingDTO planDispatchLoadingStatistics(PlanBillLoadingVO vo);

	void planDispatch(List<PlanDispatchVO> vos, String...isAudit);
	void planDispatchReview(List<PlanDispatchVO> vos);


	PlanGroupQueryRsDTO planDispatchGroupQuery(PlanGroupQueryVO vo);
}
