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

import com.zm.order.tool.server.model.OrderItem;
import com.zm.order.tool.server.query.AdminOrderItemQuery;
import com.zm.order.tool.server.query.OrderItemQuery;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author penghui
 */
@Repository
public interface OrderItemDao {


    /**
     * 查询
     *
     * @param orderNo 订单号
     * @param userId  用户id
     * @return
     */
    List<OrderItem> selectByOrderNo(@Param("orderNo") String orderNo,
                                    @Param("userId") Long userId);


    /**
     * 查询
     *
     * @param orderItemQuery 查询参数
     * @return
     */
    List<OrderItem> selectList(OrderItemQuery orderItemQuery);

    /**
     * 查询
     *
     * @param id
     * @param userId
     * @return
     */
    OrderItem selectById(@Param("id") Long id,
                         @Param("userId") Long userId);

    /**
     * 查询列表
     *
     * @param idList
     * @param userId
     * @return
     */
    List<OrderItem> selectByIdList(@Param("idList") List<Long> idList,
                                   @Param("userId") Long userId);


    /**
     * 查询列表
     *
     * @param query
     * @return
     */
    List<OrderItem> getAdminOrderItemList(AdminOrderItemQuery query);

    List<OrderItem> selectSetMealItem(@Param("userId") Long userId,
                                      @Param("orderNo") String orderNo,
                                      @Param("ownerId") String ownerId);


    /**
     * 批量插入
     *
     * @param itemList 商品列表
     * @return
     */
    int inserts(@Param("itemList") List<OrderItem> itemList);

    int insertList(@Param("itemList") List<OrderItem> itemList);


    /**
     * 更新用户id
     *
     * @param id
     * @param userId
     * @param newUserId
     * @return
     */
    int updateUserId(@Param("id") Long id,
                     @Param("userId") Long userId,
                     @Param("newUserId") Long newUserId);


    /**
     * 修改bizType
     *
     * @param bizType
     * @param userId
     * @param orderNo
     * @return
     */
    int updateBizType(@Param("bizType") Integer bizType, @Param("userId") Long userId, @Param("orderNo") String orderNo);


    /**
     * 修改bizType
     *
     * @param userId
     * @param orderNo
     * @return
     */
    int deleteByOrderNo( @Param("userId") Long userId, @Param("orderNo") String orderNo);


    /**
     * 批量删除
     *
     * @param idList     id集合
     * @param userId     用户id
     * @param deleteType 删除类型
     * @return
     */
    int deletes(@Param("idList") List<Long> idList,
                @Param("userId") Long userId,
                @Param("deleteType") Integer deleteType);


    int realDeletes(@Param("idList") List<Long> idList,
                    @Param("userId") Long userId);


    int realDeleteByOrderNoUserId(@Param("orderNoList") List<String> orderNoList,
                    @Param("userIdList") List<Long> userIdList);


    int updateBizTypeByList(@Param("bizType") Integer bizType,
                            @Param("orderNoList") List<String> orderNoList,
                    @Param("userIdList") List<Long> userIdList);

    int deleteTemp(@Param("orderNo") String orderNo,
                    @Param("userId") Long userId);
    int deleteByOrderNos(@Param("orderNoList") List<String> orderNoList, @Param("userIdList") List<Long> userIdList);

    /**
     * 更新
     *
     * @param record
     * @return
     */
    int update(OrderItem record);

    /**
     * 更新
     *
     * @param record
     * @return
     */
    int updateByOrderNo(OrderItem record, Long newUserId);

    int updateUpdated(@Param("id") Long id, @Param("userId") Long userId);

    /**
     * 更新
     *
     * @param record
     * @return
     */
    int updateItemSpec(OrderItem record);

    /**
     * 更新
     *
     * @param record
     * @return
     */
    int updateItemSign(OrderItem record);

    /**
     * 更新商品价格
     * @param record
     * @return:
     * @Date: 2021/3/30 1:56 下午
     */
    int updateItemPrice(OrderItem record);


    /**
     * 更新商品类型
     * @param record
     * @return:
     */
    int updateItemType(OrderItem record);


    int updateSellerUser(
            @Param("sellerId") Long sellerId,
            @Param("oldUserId") Long oldUserId,
            @Param("newUserId") Long newUserId,
            @Param("orderNo") String orderNo);
}