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

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

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

/**
 * @Author 陈标
 * @Date 2020/3/25 14:57
 */
@Repository
public interface HintOrderDao {
    /**
     * 扫描
     * 定时任务专用
     * 勿动
     * @param query
     * @return
     */
    List<Order> syncScan(OrderQuery query);

    /**
     * 扫描
     * @param query
     * @return
     */
    List<Order> selectSync(OrderQuery query);

    /**
     * 扫描
     * 定时任务专用
     * 勿动
     * @param query
     * @return
     */
    List<Order> selectDeleted(OrderQuery query);

    /**
     * 扫描
     * @param query
     * @return:
     * @Date: 2020/12/21 5:06 PM
     */
    List<Order> scan(OrderQuery query);

    /**
     * 扫描
     * @param query
     * @return:
     * @Date: 2020/12/21 5:06 PM
     */
    List<Order> scanAppointSellerList(OrderQuery query);

    /**
     * 倒序扫描
     * @param query
     * @return:
     * @Date: 2020/12/21 5:06 PM
     */
    List<Order> scanDesc(OrderQuery query);

    /**
     * 扫描
     * @param query
     * @return:
     * @Date: 2020/12/21 5:06 PM
     */
    List<Long> scanId(OrderQuery query);

    /**
     * 扫描
     * @param orderNoList
     * @return:
     * @Date: 2020/12/21 5:06 PM
     */
    List<Order> selectByOrderNo(@Param("orderNoList") List<String> orderNoList);

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

    /**
     * 批量更新
     * @param idList
     * @param syncFlag
     * @return
     */
    int updateSyncFlag(@Param("idList") List<Long> idList,
                       @Param("syncFlag") Integer syncFlag);

    /**
     * 批量更新
     * @param list
     * @return
     */
    int updateStoreOrderNo(@Param("list") List<Long> list);

    /**
     * 批量更新
     * @param list
     * @return
     */
    int updateBizType(@Param("list") List<Long> list);

    int updateEncrypt(@Param("orderAtStart") Date orderAtStart, @Param("orderAtEnd") Date orderAtEnd);

    int updateEncryptById(@Param("list") List<Long> list);

    /**
     * 批量更新
     * @param list
     * @return
     */
    int updateStatus(@Param("list") List<Long> list);


    /**
     * 管理员批量修改订单
     *
     * @param updateBody 修改条件和内容
     * @return
     */

    int update(AdminUpdateBody updateBody);

    /**
     * 批量更新订单商品与订单优惠信息
     *
     * @param orderList
     * @return
     */
    int updateList(List<Order> orderList);

    /**
     * 批量更新订单商品与订单优惠信息
     *
     * @param orderList
     * @return
     */
    int updateBizTypeBaking(List<Order> orderList);

    /**
     * 批量更新 updatedAt
     *
     * @param query
     * @return
     */
    int updateUpdatedAt(OrderOperationQuery query);

    /**
     * 批量更新
     * @param order
     * @return:
     * @Date: 2021/1/18 9:52 下午
     */
    int batchUpdatePayDetails(List<Order> order);

    /**
     * 批量更新订单商品快照
     * @param order
     * @return:
     * @Date: 2021/2/19 2:13 下午
     */
    int batchUpdateItemInfo(List<Long> order);

    /**
     * 批量更新
     * @param order
     * @return
     * Date: 2021/5/19 4:57 下午
     */
    int batchUpdateOrderInfo(List<Order> order);

    /**
     * 批量更新
     * @param order
     * @param sellerId
     * @return
     * Date: 2021/5/19 4:57 下午
     */
    int updateBatchOrderInfo(@Param("list")List<Order> order, @Param("sellerId") Long sellerId);

    /**
     * 批量更新支付信息
     * @param order
     * @return
     * Date: 2021/5/25 4:28 下午
     */
    int batchUpdatePayDetailInfo(List<Order> order);

    /**
     * 批量回滚
     * @param order
     * @return
     * Date: 2021/5/25 3:53 下午
     */
    int batchUpdateOrderRollBack(List<Order> order);

    int batchUpdateOrder(List<Order> order);

    /**
     *  特定结果查询
     * @param query
     * @return
     */
    List<Order> selectList(OrderQuery query);

    List<Order> selectListById(List<Long> list);

    List<Order> selectListRespExt(List<Long> list);

    List<Order> selectListBySyncFlag(@Param("list") List<Long> list,
                                     @Param("syncFlag") Integer syncFlag,
                                     @Param("deleteTypeList") List<Integer> deleteTypeList);

    /**
     * 修改零时数据
     * @param order
     * @return
     */
    int updateFlag(Order order);

    /**
     * 批量删除
     * @param list
     * @return:
     * @Date: 2020/12/17 2:38 PM
     */
    void batchDeleted(List<Long> list);

    void batchUpdateDate(List<Long> list);

    void realDeleteBySellerId(Long sellerId);

    /**
     * 批量删除
     * @param list
     * @return:
     * @Date: 2020/12/17 2:38 PM
     */
    void physicalDeleted(List<Long> list);

    /**
     * 批量删除
     * @param list
     * @return:
     * @Date: 2020/12/17 2:38 PM
     */
    void physicalDeletedTest(List<Long> list);

    /**
     * 批量更新
     * @param list
     * @return
     * Date: 2021/5/19 4:57 下午
     */
    int updateBatchOrderBaking(List<Order> list);

    /**
     * 扫描
     * @return:
     * @Date: 2020/12/21 5:06 PM
     */
    List<Order> checkOrder();

    List<Order> selectWuyin(OrderQuery query);

}
