package com.jeesharp.business.modules.mall.mapper;

import com.jeesharp.business.modules.mall.entity.MallOrder;
import com.jeesharp.business.modules.mall.vo.MallOrderExportVO;
import com.jeesharp.business.modules.mall.vo.MallOrderQueryVO;
import com.jeesharp.framework.mybatis.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * 订单 Mapper 接口；自提核销等扩展查询见同包 {@code xml/MallOrderMapper.xml}。
 *
 * @author jeesharp
 * @since 2026-05-08
 */
@Mapper
public interface MallOrderMapper extends BaseMapper<MallOrder, MallOrderQueryVO> {

    /**
     * 按自提核销码查询有效订单（至多一条）。
     *
     * @param verifyCode 核销码
     * @return 订单或 null
     */
    MallOrder selectByPickupVerifyCode(@Param("verifyCode") String verifyCode);

    /**
     * 管理端导出：订单主表联查会员编号、昵称、手机。
     *
     * @param query 与列表一致的筛选条件
     * @return 导出行
     */
    List<MallOrderExportVO> selectExportList(MallOrderQueryVO query);

    /**
     * 统计会员有效商城订单数（排除已关闭、已取消），用于首单资格判断。
     */
    long countActiveOrdersByMemberId(@Param("memberId") String memberId);

    /**
     * 统计会员已支付及后续状态的订单数，用于首单支付后赠券判断。
     */
    long countPaidOrdersByMemberId(@Param("memberId") String memberId);

    /**
     * 查询创建时间早于阈值的待支付订单（支付超时关单用）。
     */
    List<MallOrder> listExpiredPendingPayOrders(
            @Param("status") Integer status,
            @Param("createBefore") Date createBefore,
            @Param("limit") int limit);
}
