package com.qs.mp.user.service;

import com.qs.mp.admin.domain.param.UserDeliverOrderShipParam;
import com.qs.mp.pay.domain.PayOrder;
import com.qs.mp.user.domain.UserDeliverOrder;
import com.qs.mp.user.domain.UserDeliverOrderItem;

import java.util.List;

import com.qs.mp.user.domain.excel.DeliverOrderExcel;
import com.qs.mp.user.domain.param.UserDeliverOrderCancelParam;
import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.mp.user.domain.vo.DeliverOrderSettleVO;
import com.qs.mp.user.domain.vo.TicketOrderSettleVO;
import com.qs.mp.user.domain.vo.UserDeliverOrderVO;

/**
 * <p>
 * 用户提货订单 服务类
 * </p>
 *
 * @author quanshu
 * @since 2022-03-07
 */
public interface IUserDeliverOrderService extends IService<UserDeliverOrder> {
	/**
	 * 提交奖品提货订单
	 *
	 * @param userId
	 * @param orderSettleVO
	 * @return
	 */
	String submitOrder(Long userId,String memo, DeliverOrderSettleVO orderSettleVO);

	/**
	 * 取消订单
	 *
	 * @param OrderId
	 * @return
	 */
	boolean cancelOrder(String OrderId);

	/**
	 * 支付成功回调
	 *
	 * @param payOrder
	 * @return
	 */
	boolean paySuccess(PayOrder payOrder);

	/**
	 * 获取用户提货订单列表信息，支持翻页
	 *
	 * @param wrapper
	 * @return
	 */
	List<UserDeliverOrderVO> selectUserDeliverOrderVoList(Wrapper<UserDeliverOrder> wrapper);


	/**
	 * 查询满足筛选条件的用户提货订单数量
	 *
	 * @param wrapper
	 * @return
	 */
	int selectUserDeliverOrderCount(Wrapper<UserDeliverOrder> wrapper);


	/**
	 * 获取用户提货订单信息VO
	 *
	 * @param wrapper
	 * @return
	 */
	UserDeliverOrderVO selectUserDeliverOrderVo(String orderId);


	/**
	 * 用户提货订单发货
	 * @param orderId
	 * @param itemList
	 * @return
	 */
	boolean userDeliverOrderShip(String orderId, List<UserDeliverOrderItem> itemList);

	/**
	 * 修改物流信息
	 * @param shipParam
	 * @return
	 */
    boolean updateShipInfo(UserDeliverOrderShipParam shipParam);

	/**
	 * 批量导入发货
	 * @param deliverOrderExcelList
	 * @return
	 */
    String batchShip(List<DeliverOrderExcel> deliverOrderExcelList);
}
