package com.yc.ship.module.trade.service.orderjzdetail;

import com.yc.ship.framework.common.pojo.PageResult;
import com.yc.ship.module.trade.controller.admin.orderjzdetail.vo.OrderJzDetailPageReqVO;
import com.yc.ship.module.trade.controller.admin.orderjzdetail.vo.OrderJzDetailSaveReqVO;
import com.yc.ship.module.trade.dal.dataobject.orderjzdetail.OrderJzDetailDO;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 * 订单接站人员名单 Service 接口
 *
 * @author 管理员
 */
public interface OrderJzDetailService {

  /**
   * 创建订单接站人员名单
   *
   * @param createReqVO 创建信息
   * @return 编号
   */
    Long createOrderJzDetail(@Valid OrderJzDetailSaveReqVO createReqVO);

  Long createOrderJzDetail(List<OrderJzDetailSaveReqVO> createReqVOList);

  /**
   * 校验传入的身份证号是否与订单游客信息一致，并填充 visitorId
   *
   * @param createReqVOList 请求参数列表
   */
  void validateAndFillVisitorId(List<OrderJzDetailSaveReqVO> createReqVOList);

  void sendJz(List<Map<String, Object>> map,Long jzId);

  /**
   * 更新订单接站人员名单
   *
   * @param updateReqVO 更新信息
   */
  void updateOrderJzDetail(@Valid OrderJzDetailSaveReqVO updateReqVO);

  /**
   * 删除订单接站人员名单
   *
   * @param id 编号
   */
  void deleteOrderJzDetail(Long id);

  /**
   * 获得订单接站人员名单
   *
   * @param id 编号
   * @return 订单接站人员名单
   */
  OrderJzDetailDO getOrderJzDetail(Long id);

  /**
   * 获得订单接站人员名单分页
   *
   * @param pageReqVO 分页查询
   * @return 订单接站人员名单分页
   */
  PageResult<OrderJzDetailDO> getOrderJzDetailPage(OrderJzDetailPageReqVO pageReqVO);

  List<OrderJzDetailDO> selectPageByVoyageId(String voyageId);

  List<OrderJzDetailDO> getOrderJzDetailList(@Valid OrderJzDetailPageReqVO pageReqVO);

  Long cleanOrderJzDetail(String id);

  Long signOrderJzDetail(OrderJzDetailSaveReqVO createReqVO);

  /**
   * 批量核销（一键核销）
   * 对已选中的接站人员进行批量签到核销，已核销的跳过
   *
   * @param ids 接站人员ID列表
   * @param signRemark 签到备注
   * @return 实际核销成功数量
   */
  int batchSignOrderJzDetail(List<Long> ids, String signRemark);

  PageResult<OrderJzDetailDO> getOrderJzDetailPage2(OrderJzDetailPageReqVO pageReqVO);

  PageResult<?> getOrderJzDetailPage3(OrderJzDetailPageReqVO pageReqVO);

  List<OrderJzDetailDO> getVisitorExportList(OrderJzDetailPageReqVO pageReqVO);

  // ==================== 赠送行程接站相关 ====================

  /**
   * 获得赠送行程接站人员分页
   */
  PageResult<OrderJzDetailDO> getGiftPage(OrderJzDetailPageReqVO pageReqVO);

  /**
   * 获得赠送行程接站导出数据
   */
  List<OrderJzDetailDO> getGiftExportList(OrderJzDetailPageReqVO pageReqVO);

  /**
   * 获得赠送行程补登订单分页
   */
  PageResult<?> getGiftOrderPage(OrderJzDetailPageReqVO pageReqVO);

}