package shop.alien.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import shop.alien.entity.store.LawFirmPayment;
import shop.alien.entity.store.vo.LawFirmPaymentVO;

/**
 * <p>
 * 律所子表 Mapper 接口
 * </p>
 *
 * @author system
 * @since 2025-01-XX
 */
@Mapper
public interface LawFirmPaymentMapper extends BaseMapper<LawFirmPayment> {

    /**
     * 分页查询律所子表关联律所表
     *
     * @param page 分页对象
     * @param firmId 律所ID
     * @param paymentAccount 收款账号（模糊查询）
     * @param firmName 律所名称（模糊查询）
     * @param creditCode 统一社会信用代码
     * @param status 律所状态
     * @param certificationStatus 认证状态
     * @param directorName 负责人姓名（模糊查询）
     * @param createdTimeStart 创建时间开始
     * @param createdTimeEnd 创建时间结束
     * @return 分页结果
     */
    IPage<LawFirmPaymentVO> selectPaymentPageWithFirm(
            Page<LawFirmPaymentVO> page,
            @Param("firmId") Integer firmId,
            @Param("paymentAccount") String paymentAccount,
            @Param("firmName") String firmName,
            @Param("creditCode") String creditCode,
            @Param("status") Integer status,
            @Param("certificationStatus") Integer certificationStatus,
            @Param("directorName") String directorName,
            @Param("createdTimeStart") String createdTimeStart,
            @Param("createdTimeEnd") String createdTimeEnd
    );

    /**
     * 查询律所子表关联律所表总数
     *
     * @param firmId 律所ID
     * @param paymentAccount 收款账号（模糊查询）
     * @param firmName 律所名称（模糊查询）
     * @param creditCode 统一社会信用代码
     * @param status 律所状态
     * @param certificationStatus 认证状态
     * @param directorName 负责人姓名（模糊查询）
     * @param createdTimeStart 创建时间开始
     * @param createdTimeEnd 创建时间结束
     * @return 总数
     */
    Long selectPaymentPageWithFirmCount(
            @Param("firmId") Integer firmId,
            @Param("paymentAccount") String paymentAccount,
            @Param("firmName") String firmName,
            @Param("creditCode") String creditCode,
            @Param("status") Integer status,
            @Param("certificationStatus") Integer certificationStatus,
            @Param("directorName") String directorName,
            @Param("createdTimeStart") String createdTimeStart,
            @Param("createdTimeEnd") String createdTimeEnd
    );
}

