
package com.tmerclub.cloud.order.mapper;

import com.tmerclub.cloud.common.order.vo.OrderVirtualInfoVO;
import com.tmerclub.cloud.order.model.OrderVirtualInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 订单虚拟商品信息
 *
 * @author tmerclub
 * @date 2023-02-24 13:55:55
 */
public interface OrderVirtualInfoMapper {

    /**
     * 获取订单虚拟商品信息列表
     *
     * @return 订单虚拟商品信息列表
     */
    List<OrderVirtualInfo> list();

    /**
     * 根据订单虚拟商品信息id获取订单虚拟商品信息
     *
     * @param id 订单虚拟商品信息id
     * @return 订单虚拟商品信息
     */
    OrderVirtualInfo getById(@Param("id") Long id);

    /**
     * 保存订单虚拟商品信息
     *
     * @param orderVirtualInfo 订单虚拟商品信息
     */
    void save(@Param("orderVirtualInfo") OrderVirtualInfo orderVirtualInfo);

    /**
     * 更新订单虚拟商品信息
     *
     * @param orderVirtualInfo 订单虚拟商品信息
     */
    void update(@Param("orderVirtualInfo") OrderVirtualInfoVO orderVirtualInfo);

    /**
     * 更新订单虚拟商品信息
     *
     * @param orderVirtualInfos 订单虚拟商品信息
     */
    void updateBatchByItemId(@Param("orderVirtualInfos") List<OrderVirtualInfoVO> orderVirtualInfos);

    /**
     * 根据订单虚拟商品信息id删除订单虚拟商品信息
     *
     * @param id
     */
    void deleteById(@Param("id") Long id);

    /**
     * 批量保存虚拟订单信息
     *
     * @param orderVirtualInfoList
     */
    void saveBatch(@Param("orderVirtualInfoList") List<OrderVirtualInfo> orderVirtualInfoList);

    /**
     * 根据订单id和自提点id获取虚拟订单
     *
     * @param orderId
     * @param stationId
     * @return
     */
    List<OrderVirtualInfoVO> getByOrderIdAndStationId(@Param("orderId") Long orderId, @Param("stationId") Long stationId);

    /**
     * 根据订单id和店铺id获取虚拟订单
     *
     * @param orderId
     * @param shopId
     * @param isWriteOff 1.已核销 0.未核销
     * @return
     */
    List<OrderVirtualInfoVO> getByOrderIdAndShopId(@Param("orderId") Long orderId, @Param("shopId") Long shopId, @Param("isWriteOff") Integer isWriteOff);

    /**
     * 根据订单id和核销码获取虚拟订单
     *
     * @param orderId
     * @param code
     * @return
     */
    List<OrderVirtualInfoVO> getByOrderIdAndCode(@Param("orderId") Long orderId, @Param("code") String code);

    /**
     * 根据订单id获取核销数量
     *
     * @param orderId
     * @return
     */
    int countWriteOffByOrderId(@Param("orderId") Long orderId);

    /**
     * 根据订单id获取核销记录
     * @param orderId
     * @return
     */
    List<OrderVirtualInfoVO> getByOrderId(@Param("orderId") Long orderId);
    /**
     * 根据订单id获取核销记录
     * @param orderItemIds
     * @return
     */
    List<OrderVirtualInfoVO> listByOrderItemIds(@Param("orderItemIds") List<Long> orderItemIds);

    /**
     * 根据itemId删除虚拟商品信息
     *
     * @param orderItemIds
     */
    void deleteByOrderItemId(@Param("orderItemIds") List<Long> orderItemIds);
}
