package com.jsowell.pile.mapper;

import com.jsowell.pile.domain.OrderPileOccupy;
import com.jsowell.pile.dto.QueryOccupyOrderDTO;
import com.jsowell.pile.vo.uniapp.OccupyOrderDetailVO;
import com.jsowell.pile.vo.uniapp.OrderPileOccupyVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface OrderPileOccupyMapper {
    /**
     * delete by primary key
     *
     * @param id primaryKey
     * @return deleteCount
     */
    int deleteByPrimaryKey(Integer id);

    /**
     * insert record to table
     *
     * @param record the record
     * @return insert count
     */
    int insert(OrderPileOccupy record);

    int insertOrUpdate(OrderPileOccupy record);

    int insertOrUpdateSelective(OrderPileOccupy record);

    /**
     * insert record to table selective
     *
     * @param record the record
     * @return insert count
     */
    int insertSelective(OrderPileOccupy record);

    /**
     * select by primary key
     *
     * @param id primary key
     * @return object by primary key
     */
    OrderPileOccupy selectByPrimaryKey(Integer id);

    /**
     * update record selective
     *
     * @param record the updated record
     * @return update count
     */
    int updateByPrimaryKeySelective(OrderPileOccupy record);

    /**
     * update record
     *
     * @param record the updated record
     * @return update count
     */
    int updateByPrimaryKey(OrderPileOccupy record);

    int updateBatch(List<OrderPileOccupy> list);

    int updateBatchSelective(List<OrderPileOccupy> list);

    int batchInsert(@Param("list") List<OrderPileOccupy> list);

    OrderPileOccupy queryByOccupyCode(@Param("occupyCode") String occupyCode);

    List<OrderPileOccupy> queryOccupyOrderList(@Param("dto") QueryOccupyOrderDTO dto);

    /**
     * 通过memberId查询挂起状态订单
     * @param memberId
     * @return
     */
    List<OrderPileOccupy> queryHangUpOrderByMemberId(@Param("memberId") String memberId);

    /**
     * 查询占桩订单列表
     * @param dto
     * @return
     */
    List<OrderPileOccupyVO> getOccupyOrderInfo(QueryOccupyOrderDTO dto);

    /**
     * 根据桩号和枪号 查询占桩状态的占桩订单
     *
     * @param pileSn
     * @param connectorCode
     */
    List<OrderPileOccupy> queryOccupiedOrder(@Param("pileSn") String pileSn, @Param("connectorCode") String connectorCode);

    /**
     * 根据桩号和枪号 查询草稿状态的占桩订单
     * @param pileSn
     * @param connectorCode
     * @return
     */
    List<OrderPileOccupy> queryDraftOccupyOrder(@Param("pileSn") String pileSn, @Param("connectorCode") String connectorCode);

    /**
     * 获取占桩订单详情
     * @param occupyCode
     */
    OccupyOrderDetailVO getOccupyOrderDetail(String occupyCode);

    /**
     * 通过memberId查询未支付状态订单
     * @param memberId
     * @return
     */
    OrderPileOccupy queryUnPayOrderByMemberId(String memberId);


    /**
     * 查询占桩订单列表
     *
     * @param orderPileOccupy 占桩订单
     * @return 占桩订单集合
     */
    public List<OrderPileOccupy> selectOrderPileOccupyList(OrderPileOccupy orderPileOccupy);

    /**
     * 使该笔订单免费
     * @param occupyCode
     * @return
     */
    int makeOrderFree(String occupyCode);
}