package com.younike.system.mapper;

import com.younike.system.domain.Order;
import com.younike.system.domain.OrderStat;
import com.younike.system.domain.vo.MemberOrderDetailVo;
import com.younike.system.domain.vo.MemberOrderVo;
import com.younike.system.domain.vo.OrderVo;
import com.younike.hlpay.dto.OrderParam;
import com.younike.system.param.OrderQueryParam;
import org.apache.ibatis.annotations.Param;

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

/**
 * 订单主Mapper接口
 *
 * @author elev
 * @date 2022-01-07
 */
public interface OrderMapper {

    /**
     * 订单列表
     * @param param
     * @return
     */
    List<OrderVo> orderList(OrderQueryParam param);
    /**
     * 查询订单主
     *
     * @param orderId 订单主主键
     * @return 订单主
     */
    Order selectOrderByOrderId(Long orderId);

    /**
     * 查询订单主列表
     *
     * @param order 订单主
     * @return 订单主集合
     */
    List<Order> selectOrderList(Order order);

    /**
     * 新增订单主
     *
     * @param order 订单主
     * @return 结果
     */
    int insertOrder(Order order);

    /**
     * 修改订单主
     *
     * @param order 订单主
     * @return 结果
     */
    int updateOrder(Order order);

    /**
     * 删除订单主
     *
     * @param orderId 订单主主键
     * @return 结果
     */
    int deleteOrderByOrderId(Long orderId);

    /**
     * 批量删除订单主
     *
     * @param orderIds 需要删除的数据主键集合
     * @return 结果
     */
    int deleteOrderByOrderIds(Long[] orderIds);

    int updateOrderCustom(Order order);

    List<OrderStat> listLastOrders(@Param("days") int days, @Param("orderStates") String orderStates);

    //添加订单，返回订单id
    int  addOrder(Order order);

    /**
     * 查询会员端订单分页列表
     *
     * @param order
     * @param orderStates
     * @return
     */
    List<MemberOrderVo> listMemberOrderByOrderState(@Param("order") Order order, @Param("orderStates") List<String> orderStates);

    /**
     * 查询会员订单详情
     *
     * @param orderId
     * @return
     */
    MemberOrderDetailVo getMemberOrderByOrderId(Long orderId);

    /**
     * @param serverId 服务人员ID
     * @return 服务人员已预约（orderState：000，001）的订单
     */
    List<Order> listOrderedOrderByServerId(Long serverId);

    void selectOrderList();

    /**
     * 查询是否已经被预约
     * @param order
     * @return
     */
    List<Order> getOrderList(@Param("order") OrderParam order);

    List<Order> selectPreSettleOrders(Date settleDate);

    boolean updateBatchById(List<Order> updated);
}
