package org.qinan.safetyeval.infrastructure.persistence.repository;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.repository.repo.BaseRepository;
import org.qinan.safetyeval.client.change.request.QualFilingPersonnelChangePageQry;
import org.qinan.safetyeval.infrastructure.persistence.domainobject.QualFilingPersonnelChangeDO;

/**
 * 备案申请人员-变更
 *
 * @Author: ltq
 * @date 2026-07-02 10:04:33
 */
public interface QualFilingPersonnelChangeRepository extends BaseRepository<QualFilingPersonnelChangeDO> {
    /**
     * 根据ID查找
     *
     * @param id 备案申请人员-变更ID
     * @return
     */
    QualFilingPersonnelChangeDO getById(Long id);

    /**
     * 分页查找备案申请人员-变更对象
     *
     * @param iPage                            分页对象
     * @param qualFilingPersonnelChangePageQry 条件对象
     * @return ipage
     */
    IPage<QualFilingPersonnelChangeDO> listQualFilingPersonnelChangePage(IPage iPage, QualFilingPersonnelChangePageQry qualFilingPersonnelChangePageQry);

    /**
     * 新增备案申请人员-变更
     *
     * @param qualFilingPersonnelChangeDO 备案申请人员-变更
     * @return 结果
     */
    Boolean addQualFilingPersonnelChange(QualFilingPersonnelChangeDO qualFilingPersonnelChangeDO);

    /**
     * 修改备案申请人员-变更
     *
     * @param qualFilingPersonnelChangeDO 备案申请人员-变更
     * @return 结果
     */
    Boolean updateQualFilingPersonnelChange(QualFilingPersonnelChangeDO qualFilingPersonnelChangeDO);


    /**
     * 删除备案申请人员-变更
     *
     * @param id
     * @return 结果
     */
    Boolean deletedQualFilingPersonnelChangeById(Long id);

    /**
     * 删除备案申请人员-变更
     *
     * @param ids
     * @return 结果
     */
    Boolean deletedQualFilingPersonnelChangeByIds(Long[] ids);

    /**
     * 根据filingId查询列表
     */
    java.util.List<QualFilingPersonnelChangeDO> listByFilingId(Long filingId);

    /**
     * 统计指定filingId下的人员总数
     */
    int countByFilingId(Long filingId);

    /**
     * 统计指定filingId下注册工程师数量
     */
    int countByFilingIdAndRegisterEngineerFlag(Long filingId, Integer registerEngineerFlag);

    /**
     * 统计指定filingId下参加工作时间晚于指定日期的人数
     */
    int countByFilingIdAndJoinWorkDateAfter(Long filingId, java.time.LocalDate joinWorkDate);

}
