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

import com.zm.order.tool.server.model.BusinessOrderUpdateModelRequest;
import com.zm.order.tool.server.model.DataCorrectionRequest;
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;

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


    /**
     * 查询订单列表
     *
     * @param userId
     * @return
     */
    List<Order> selectByUserId(@Param("userId") Long userId);

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

    int updateSubType(Order order);

    /**
     * 根据Id查询
     *
     * @param id
     * @param userId
     * @return
     */
    Order selectById(@Param("id") Long id,
                     @Param("userId") Long userId);

    /**
     * 插入
     *
     * @param record
     * @return
     */
    int insert(Order record);

    void replace(Order record);

    /**
     * 批量插入
     *
     * @param list
     * @return
     */
    int insertList(List<Order> list);

    /**
     * 批量插入
     *
     * @param list
     * @return
     */
    void replaceList(List<Order> list);

    /**
     * 统计数量
     *
     * @param query
     * @return
     */
    int count(OrderQuery query);

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


    /**
     * 管理员批量修改订单
     *
     * @param order 修改条件和内容
     * @return
     */
    int update(Order order);

    /**
     * 管理员批量修改订单
     *
     * @param order 修改条件和内容
     * @return
     */
    int updateDiscountInfo(Order order);
    int updateAddrInfo(Order order);

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

    /**
     * 更新扩展字段
     * @param order
     * @return:
     * @Date: 2020/11/5 2:36 PM
     */
    int updateFeatures(Order order);

    /**
     * 更新优惠金额
     * @param order
     * @return:
     * @Date: 2020/11/2 1:31 PM
     */
    int updateDiscountAmount(Order order);

    /**
     * 更新
     * @param order
     * @return:
     * @Date: 2020/10/27 9:48 AM
     */
    int updateStoreId(Order order);

    /**
     * 商品和优惠信息重置
     * @param order
     * @return: int
     * @Date:   2020/7/20 3:15 PM
     */
    int updateItemAndDiscount(Order order);

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


    /**
     * 重置同步标识
     *
     * @param order
     * @return
     */
    int resetSyncFlag(Order order);


    /**
     * 修改bizType 打标
     *
     * @param order
     * @return
     */
    int updateBizType(Order order);

    /**
     * 更新订单删除信息
     *
     * @param order
     * @return
     */
    int updateDeleted(Order order);

    /**
     * 修改订单完成时间
     *
     * @param id
     * @param userId
     * @return
     */
    int updateCompletedAt(@Param("id") Long id,
                          @Param("userId") Long userId);

    /**
     * 修改
     *
     * @param id
     * @param userId
     * @return
     */
    int updateBizType8(@Param("id") Long id,
                          @Param("userId") Long userId);

    /**
     * 修改订单userId
     *
     * @param orderQuery
     * @return
     */
    int updateUserId(OrderQuery orderQuery);

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

    /**
     * 修改订单userId
     *
     * @param order
     * @return
     */
    int updatePayDetail(Order order);

    /**
     * 更新支付信息
     * @param order
     * @return:
     * @Date: 2021/2/26 4:48 下午
     */
    int updatePayInfo(Order order);

    /**
     * 更新支付明细信息
     * @param order
     * @return:
     * @Date: 2021/2/26 4:48 下午
     */
    int updatePayDetailInfo(Order order);

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


    /**
     * 删除订单
     *
     * @param id         订单id
     * @param userId     用户id
     * @param deleteType 删除类型
     * @return
     */
    int delete(@Param("id") Long id,
               @Param("userId") Long userId,
               @Param("deleteType") Integer deleteType);

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

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

    /**
     * 查询列表
     *
     * @param orderQuery 查询条件
     * @return
     */
    int updateByIdsUserIds(OrderQuery orderQuery);


    /**
     * 更新商品快照
     *
     * @param order
     * @return
     */
    int updateItemInfo(Order order);

    /**
     * 订单更新
     * @param request
     * @return:
     * Date: 2021/4/25 11:49 上午
     */
    int dataUpdate(DataCorrectionRequest request);

    /**
      * 业务更新订单信息
      * @date 2021/8/12 15:26
      * @param request
      * @return int
     **/
    int businessOrderUpdate(BusinessOrderUpdateModelRequest request);

    /**
     * 订单更新
     * @param order
     * @return:
     * Date: 2021/4/25 11:49 上午
     */
    int orderDataUpdate(Order order);

    /**
     * 订单删除
     * @param orderNoList
     * @param userId
     * @return:
     * Date: 2021/4/25 11:49 上午
     */
    int deleteTemp(@Param("orderNoList") List<String> orderNoList, @Param("userId") Long userId);

    int deleteByIdUserId(@Param("idList") List<Long> idList, @Param("userIdList") List<Long> userIdList);

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


    int updateMasterDataSource(@Param("masterDataSource") Integer masterDataSource, @Param("id") Long id, @Param("userId") Long userId);

}