package com.zg.project.wisdom.mapper;

import java.util.List;
import com.zg.project.wisdom.domain.AuditSignature;
import com.zg.project.wisdom.domain.vo.AuditSignatureVo;
import org.apache.ibatis.annotations.Param;

/**
 * 审批记录Mapper接口
 * 
 * @author zg
 * @date 2025-07-11
 */
public interface AuditSignatureMapper 
{
    /**
     * 查询审批记录
     * 
     * @param id 审批记录主键
     * @return 审批记录
     */
    public AuditSignature selectAuditSignatureById(Long id);

    /**
     * 查询审批记录列表
     * 
     * @param auditSignature 审批记录
     * @return 审批记录集合
     */
    public List<AuditSignature> selectAuditSignatureList(AuditSignature auditSignature);


    /**
     * 修改审批记录
     * 
     * @param auditSignature 审批记录
     * @return 结果
     */
    public int updateAuditSignature(AuditSignature auditSignature);

    /**
     * 删除审批记录
     * 
     * @param id 审批记录主键
     * @return 结果
     */
    public int deleteAuditSignatureById(Long id);

    /**
     * 批量删除审批记录
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteAuditSignatureByIds(Long[] ids);

    /**
     * 查询待审批列表
     * @param userId
     * @return
     */
    int countPendingByUser(String approverId);

    /**
     * 是否存在提交记录(第一次申请还是驳回后再次申请)
     * @param
     * @return
     */
    boolean existsCurrentSigner(@Param("billNo") String billNo, @Param("signerRole") String signerRole);

    /**
     * 修改当前申请数据的可用状态
     * @param
     * @return
     */
    void updateIsCurrentToZero(String billNo, String number);

    /**
     * 新增审核记录
     * @param
     * @return
     */
    void batchInsert(List<AuditSignature> recordList);

    /**
     * 查询现场图片URL（按入库ID）
     */
    AuditSignature selectPhotoUrlByRkId(@Param("rkId") Long rkId);

    /**
     * 查询审批记录列表（按主表ID）
     */
    List<AuditSignature> selectAuditMainList(AuditSignature filter);

    /**
     * 获取包含入库货物信息的现场图记录
     */
    List<AuditSignatureVo> selectScenePhotosWithGoodsByBillNo(@Param("billNo") String billNo);

    /**
     * 获取提交人列表
     */
    List<AuditSignature> selectAuditMainListBySubmitter(AuditSignature filter);

    /**
     * 审核
     * @param auditSignature
     * @return
     */
    int approveAuditByBillNo(AuditSignature auditSignature);

}
