package com.yueqian.xingyun.sc.service.retail;

import com.lframework.starter.web.core.components.resp.PageResult;
import com.lframework.starter.web.core.service.BaseMpService;
import com.yueqian.xingyun.sc.dto.purchase.receive.GetPaymentDateDto;
import com.yueqian.xingyun.sc.dto.retail.RetailProductDto;
import com.yueqian.xingyun.sc.dto.retail.out.RetailOutSheetFullDto;
import com.yueqian.xingyun.sc.dto.retail.out.RetailOutSheetWithReturnDto;
import com.yueqian.xingyun.sc.entity.RetailOutSheet;
import com.yueqian.xingyun.sc.vo.retail.out.ApprovePassRetailOutSheetVo;
import com.yueqian.xingyun.sc.vo.retail.out.ApproveRefuseRetailOutSheetVo;
import com.yueqian.xingyun.sc.vo.retail.out.CreateRetailOutSheetVo;
import com.yueqian.xingyun.sc.vo.retail.out.QueryRetailOutSheetVo;
import com.yueqian.xingyun.sc.vo.retail.out.QueryRetailOutSheetWithReturnVo;
import com.yueqian.xingyun.sc.vo.retail.out.QueryRetailProductVo;
import com.yueqian.xingyun.sc.vo.retail.out.RetailOutSheetSelectorVo;
import com.yueqian.xingyun.sc.vo.retail.out.UpdateRetailOutSheetVo;
import java.util.List;

public interface RetailOutSheetService extends BaseMpService<RetailOutSheet> {

  /**
   * 查询列表
   *
   * @param pageIndex
   * @param pageSize
   * @param vo
   * @return
   */
  PageResult<RetailOutSheet> query(Integer pageIndex, Integer pageSize, QueryRetailOutSheetVo vo);

  /**
   * 查询列表
   *
   * @param vo
   * @return
   */
  List<RetailOutSheet> query(QueryRetailOutSheetVo vo);

  /**
   * 选择器
   *
   * @param pageIndex
   * @param pageSize
   * @param vo
   * @return
   */
  PageResult<RetailOutSheet> selector(Integer pageIndex, Integer pageSize,
      RetailOutSheetSelectorVo vo);

  /**
   * 根据会员ID查询默认付款日期
   *
   * @param memberId
   */
  GetPaymentDateDto getPaymentDate(String memberId);

  /**
   * 根据ID查询
   *
   * @param id
   * @return
   */
  RetailOutSheetFullDto getDetail(String id);

  /**
   * 根据ID查询（零售退货业务）
   *
   * @param id
   * @return
   */
  RetailOutSheetWithReturnDto getWithReturn(String id);

  /**
   * 查询列表（零售退货业务）
   *
   * @param pageIndex
   * @param pageSize
   * @param vo
   * @return
   */
  PageResult<RetailOutSheet> queryWithReturn(Integer pageIndex, Integer pageSize,
      QueryRetailOutSheetWithReturnVo vo);

  /**
   * 创建
   *
   * @param vo
   * @return
   */
  String create(CreateRetailOutSheetVo vo);

  /**
   * 修改
   *
   * @param vo
   */
  void update(UpdateRetailOutSheetVo vo);

  /**
   * 审核通过
   *
   * @param vo
   */
  void approvePass(ApprovePassRetailOutSheetVo vo);

  /**
   * 直接审核通过
   *
   * @param vo
   */
  String directApprovePass(CreateRetailOutSheetVo vo);

  /**
   * 审核拒绝
   *
   * @param vo
   */
  void approveRefuse(ApproveRefuseRetailOutSheetVo vo);

  /**
   * 根据ID删除
   *
   * @param id
   */
  void deleteById(String id);

  /**
   * 根据关键字查询零售商品信息
   *
   * @param pageIndex
   * @param pageSize
   * @param condition
   * @return
   */
  PageResult<RetailProductDto> queryRetailByCondition(Integer pageIndex, Integer pageSize,
      String condition, Boolean isReturn);

  /**
   * 查询可零售商品信息
   *
   * @param pageIndex
   * @param pageSize
   * @param vo
   * @return
   */
  PageResult<RetailProductDto> queryRetailList(Integer pageIndex, Integer pageSize,
      QueryRetailProductVo vo);

  /**
   * 根据ID查询
   *
   * @param id
   * @return
   */
  RetailProductDto getRetailById(String id);
}
