package com.xhpc.user.mapper;

import com.xhpc.user.domain.InvoiceToUserRequest;
import com.xhpc.user.domain.InvoicedOrdersRequest;
import com.xhpc.user.pojo.XhpcInvoiceMapHistoryOrder;

import java.util.List;

/**
 * XhpcInvoiceMapHistoryOrderMapper
 *
 * @author WH
 * @date 2021/12/20 15:47
 * @since version-1.0
 */
public interface XhpcInvoiceMapHistoryOrderMapper {

    int insert(XhpcInvoiceMapHistoryOrder record);

    int insertSelective(XhpcInvoiceMapHistoryOrder record);

    /**
     * 通过发票id，查询对应的发票所包含的历史订单信息
     *
     * @param invoiceId 发票id
     * @return 装有多个历史订单集合
     * @author WH
     * @date 2021/12/20 15:46
     * @since version-1.0
     */
    List<XhpcInvoiceMapHistoryOrder> findOrdersByInvoiceId(Long invoiceId);

    /**
     * 通过发票id，查询其所属的历史订单的生成的时间区间，即最大历史订单时间与最小历史订单时间
     *
     * @param invoiceId 发票id
     * @return 装有最大订单时间与最小订单时间的一个List<String>集合，第一个参数为最小值，第二个最大值
     * @author WH
     * @date 2021/12/21 9:51
     * @since version-1.0
     */
    List<String> getHistoryOrderScopeByInvoiceId(Long invoiceId);

    /**
     * 更新发票所关联的历史订单的状态
     *
     * @param requestData 存储与历史订单相关联的发票id
     * @author WH
     * @date 2021/12/24 13:59
     * @since version-1.0
     */
    void updateStatus(InvoiceToUserRequest requestData);

    /**
     * 查询被用户锁定了的订单的id
     *
     * @param invoicedOrdersRequest 用户id和用户类型
     * @return 被用户锁定的历史订单id集合
     * @author WH
     * @date 2021/12/24 16:01
     * @since version-1.0
     */
    List<Integer> findLockOrdersByUserIdAndUserType(InvoicedOrdersRequest invoicedOrdersRequest);

    /**
     * 解除锁定的用户历史订单
     *
     * @param invoiceId 发票id
     * @author WH
     * @date 2021/12/29 11:00
     * @since version-1.0
     */
    void updateUnlockHistoryOrdersByInvoiceId(Long invoiceId);

    /**
     * 查询该发票关联表中，该历史订单是否已经被存储且被锁定
     *
     * @param historyOrderIds 历史订单id集合
     * @return 返回被某发票包含，且已经锁定的历史订单记录
     * @author WH
     * @date 2021/12/29 14:30
     * @since version-1.0
     */
    List<XhpcInvoiceMapHistoryOrder> getLockedOnesByHistoryOrderId(List<Integer> historyOrderIds);

}