package com.ghy.order.mapper;

import com.ghy.order.domain.OrderDetail;
import com.ghy.order.domain.OrderMaster;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 细单表(转派后产生的订单)的mapper层
 *
 * @author HH 2022/4/25
 */
public interface OrderDetailMapper {

    /**
     * @param orderDetail 细单表属性
     * @return 成功条数
     */
    int insertOrderDetail(OrderDetail orderDetail);

    /**
     * @param orderDetail 细单表属性
     * @return 成功条数
     */
    int updateOrderDetail(OrderDetail orderDetail);

    /**
     * @param orderDetail 细单表入参
     * @return 细单表集合
     */
    List<OrderDetail> selectOrderDetailList(OrderDetail orderDetail);

    /**
     * @param orderDetailId 细单表id
     * @return 细单表
     */
    OrderDetail selectById(Long orderDetailId);

    /**
     * @param orderMasterId 主订单id
     * @return 详细订单
     */
    List<OrderDetail> selectByOrderMasterId(@Param("orderMasterId") Long orderMasterId);

    /**
     * 批量删除细单表信息
     *
     * @param orderDetailIds 需要删除的数据ID
     * @return 结果
     */
    int deleteOrderDetailByIds(Long[] orderDetailIds);

    /**
     * @param orderDetailCode 细单表编码
     * @return 细单表信息
     */
    OrderDetail checkOrderDetailCodeUnique(String orderDetailCode);

    /**
     * 根据订单id集合信息进行批量数据查询
     *
     * @param orderIdList 订单Id集合信息。
     * @return OrderDetail实体集合信息。
     */
    List<OrderDetail> getByOrderIdList(@Param("orderIdList") List<Long> orderIdList);

    /**
     * 更新子订单状态
     *
     * @param orderDetailId 子订单ID
     * @param orderStatus   状态码
     */
    int updateStatus(@Param("id") Long orderDetailId, @Param("orderStatus") int orderStatus);

    /**
     * 通过主订单ID批量更新子订单
     * 可更新字段: orderStatus
     *
     * @param orderDetail 子订单
     */
    int updateByOrderMasterId(OrderDetail orderDetail);

    /**
     * 查询指定状态的订单
     */
    List<OrderDetail> selectByStatus(List<Integer> status);
}
