package com.uas.platform.b2b.service;

import com.uas.platform.b2b.model.*;
import com.uas.platform.core.model.PageInfo;
import com.uas.search.b2b.model.SPage;
import org.springframework.data.domain.Page;

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

public interface PurchaseOrderService {

	/**
	 * 批量保存、修改采购订单明细
	 * 
	 * @param items
	 * @return
	 */
	public void saveItems(List<PurchaseOrderItem> items);

	/**
	 * 批量保存、修改采购订单
	 * 
	 * @param orders
	 * @return
	 */
	public void save(List<PurcOrderInfoItem> orders);

	/**
	 * 分页查找订单
	 * 
	 * @param pageInfo
	 * @return
	 */
	public Page<PurchaseOrder> findAllByPageInfo(PageInfo pageInfo, SearchFilter filter);

	/**
	 * 分页查找订单，包括明细
	 * 
	 * @param pageInfo
	 * @param filter
	 * @return
	 */
	public Page<PurchaseOrderAll> findAllDetailByPageInfo(PageInfo pageInfo, SearchFilter filter);

	/**
	 * 分页查找待回复订单，包括明细
	 * 
	 * @param pageInfo
	 * @return
	 */
	public Page<PurchaseOrderTodo> findTodoByPageInfo(PageInfo pageInfo, SearchFilter filter);

	/**
	 * 分页查找已回复订单，包括明细
	 * 
	 * @param pageInfo
	 * @return
	 */
	public Page<PurchaseOrderDone> findDoneByPageInfo(PageInfo pageInfo, SearchFilter filter);

	/**
	 * 分页查找已收货订单明细
	 * 
	 * @param pageInfo
	 * @return
	 */
	public Page<PurchaseOrderReceived> findReceivedByPageInfo(PageInfo pageInfo, SearchFilter filter);

	/**
	 * 分页查找待收货订单明细
	 *
	 * @param pageInfo
	 * @return
	 */
	public Page<PurchaseOrderWaiting> findWaitingByPageInfo(PageInfo pageInfo, SearchFilter filter);

	/**
	 * 分页查找订单，包括明细
	 * 
	 * @param pageInfo
	 * @param filter
	 * @return
	 */
	public Page<PurchaseOrderAll> findAllOrdersDetailByPageInfo(PageInfo pageInfo, SearchFilter filter);

	/**
	 * 分页查找已结案订单明细
	 * 
	 * @param pageInfo
	 * @return
	 */
	public Page<PurchaseOrderEnd> findEndOrdersByPageInfo(PageInfo pageInfo, SearchFilter filter);

	/**
	 * 用订单ID查找订单
	 * 
	 * @param id
	 * @return
	 */
	public PurchaseOrderAll findById(Long id);

	/**
	 * 回复单个明细
	 * 
	 * @param reply
	 */
	public PurchaseOrderReply reply(PurchaseOrderReply reply);

	/**
	 * 批量回复
	 * 
	 * @param replies
	 */
	public void reply(List<PurchaseOrderReply> replies);

	/**
	 * 批量回复
	 * 
	 * @param orderItemIdString
	 *            回复的明细ID的字符串数组
	 */
	public List<PurchaseOrderReply> reply(String[] orderItemIdString, Long date);

	/**
	 * 查找订单明细的回复记录
	 * 
	 * @param orderItemId
	 *            订单明细ID
	 * @return
	 */
	public List<PurchaseOrderReply> findReplyByOrderItem(long orderItemId);


	/**
	 * 获取明细最后一次回复数量
	 *
	 * @param orderItemId
	 *            订单明细ID
	 * @return
	 */
	Double findLastReplyQty(long orderItemId);

	/**
	 * 查找所有待上传到供应商ERP的订单
	 * 
	 * @return
	 */
	public List<PurchaseOrderAll> findNotUploadOrder();

	/**
	 * 查找所有待上传到买家的回复记录
	 * 
	 * @return
	 */
	public List<PurchaseOrderReply> findNotUploadReply();

	/**
	 * 查找所有待上传到卖家的回复记录
	 * 
	 * @return
	 */
	public List<PurchaseOrderReply> findNotSendReply();

	/**
	 * 回复记录成功传到买家ERP之后
	 * 
	 * @param idArray
	 */
	public void onReplyUploadSuccess(String[] idArray);

	/**
	 * 回复记录成功传到卖家ERP之后
	 * 
	 * @param idArray
	 */
	public void onReplyDownSuccess(String[] idArray);

	/**
	 * 平台的订单传到供应商ERP之后，修改平台里面的订单的上传状态
	 * 
	 * @param idArray
	 */
	public void onSaleDownSuccess(String[] idArray);

	/**
	 * 查找所有待上传到卖家的结案、反结案客户采购单
	 * 
	 * @return
	 */
	public List<PurchaseOrderItem> findNotSendEnd();

	/**
	 * 结案、反结案客户采购单成功传到卖家ERP之后
	 * 
	 * @param idArray
	 */
	public void onEndDownSuccess(String[] idArray);

	/**
	 * 设置订单的查看状态
	 * 
	 * @param idArray
	 * @param status
	 *            0 已查看，1 未查看， 2 置顶
	 */
	public void setDisplay(String[] idArray, Short status);

	/**
	 * 打印订单，订单打印此次 +1
	 * 
	 * @param id
	 */
	public void print(Long id);

	/**
	 * 获取当前用户（作为供应商）的客户采购订单数量
	 * 
	 * @return
	 */
	public Long getAllCount();

	/**
	 * 返回未上传的打印记录
	 *
	 */
    List<PrintLog> findPrintNotUploadReply();

	/**
	 *  打印记录上传成功后修改平台内日志状态
	 * @param idArray
	 */
	void onPrintSendSuccess(String[] idArray);

}