package com.zm.order.tool.server.history;

import com.zm.order.tool.server.model.Order;
import com.zm.order.tool.server.query.OrderQuery;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;


/**
 * 冷库数据源（订单）
 *
 * <p>
 *
 * </p>
 *
 * @author nianchang
 * @date 2023/02/17 3:42 下午
 */
@Repository
public interface HistoryDataOrderDao {

    /**
     * 根据单号查询
     *
     * @param orderNo
     * @param userId
     * @return
     */
    Order selectByOrderNo(@Param("orderNo") String orderNo,
                          @Param("userId") Long userId);

    /**
     * 查询列表
     *
     * @param orderQuery 查询条件
     * @return List || []
     */
    List<Order> selectList(OrderQuery orderQuery);

    /**
     * 查询列表
     * 返回精简的字段
     * @param orderQuery 查询条件
     * @return List || []
     */
    List<Order> selectConciseList(OrderQuery orderQuery);

    /**
     * 查询单个订单
     *
     * @param query 查询条件
     * @return Order
     */
    Order selectOne(OrderQuery query);

    /**
     * 查询订单是否存在
     *
     * @param query 查询条件
     * @return Order
     */
    Order selectOrderExist(OrderQuery query);

    /**
     * 简短的订单信息
     *
     * @param orderQuery orderQuery
     * @return List || []
     */
    List<Order> selectShortList(OrderQuery orderQuery);

    /**
     * 扫描订单列表
     *
     * @param orderQuery 查询条件
     * @return List || []
     */
    List<Order> scanList(OrderQuery orderQuery);

    /**
     * 查询消费门店列表
     *
     * @param orderQuery 查询条件
     * @return List || []
     */
    List<Order> selectStoreList(OrderQuery orderQuery);

    /**
     * 查询单个订单状态
     *
     * @param userId 用户ID
     * @param orderNo 订单号
     *
     * @return Order
     */
    Order selectStatus(@Param("userId") Long userId, @Param("orderNo") String orderNo);

    /**
     * 查询用户首次消费门店
     *
     * @param query 查询条件
     * @return 门店id
     */
    Order selectStoreByOne(OrderQuery query);

    /**
     * 插入
     *
     * @param list
     * @return
     */
    void replaceList(@Param("list") List<Order> list);
}
