/**
 * Copyright &copy; 2021-2026 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
 */
package com.jeeplus.flowable.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.Map;

/**
 * 流程归档数据 Mapper 接口
 * 负责冷热数据分离的归档迁移操作
 *
 * @author jeeplus
 * @version 2024-01-01
 */
@Mapper
public interface FlowArchiveMapper {

    /**
     * 查询待归档的流程实例数量
     * @param cutoffDate 截止日期
     * @return 待归档数量
     */
    Integer countPendingArchive(@Param("cutoffDate") Date cutoffDate);

    /**
     * 分批迁移流程实例到归档表
     * @param cutoffDate 截止日期
     * @param batchSize 批次大小
     * @return 影响行数
     */
    int insertProcinstArchive(@Param("cutoffDate") Date cutoffDate, @Param("batchSize") int batchSize);

    /**
     * 迁移活动实例到归档表
     * @return 影响行数
     */
    int insertActinstArchive();

    /**
     * 迁移变量实例到归档表
     * @return 影响行数
     */
    int insertVarinstArchive();

    /**
     * 迁移任务实例到归档表
     * @return 影响行数
     */
    int insertTaskinstArchive();

    /**
     * 迁移参与者链接到归档表
     * @return 影响行数
     */
    int insertIdentitylinkArchive();

    /**
     * 迁移评论到归档表
     * @return 影响行数
     */
    int insertCommentArchive();

    /**
     * 删除热表中的活动实例
     * @return 影响行数
     */
    int deleteActinst();

    /**
     * 删除热表中的变量实例
     * @return 影响行数
     */
    int deleteVarinst();

    /**
     * 删除热表中的任务实例
     * @return 影响行数
     */
    int deleteTaskinst();

    /**
     * 删除热表中的参与者链接
     * @return 影响行数
     */
    int deleteIdentitylink();

    /**
     * 删除热表中的评论
     * @return 影响行数
     */
    int deleteComment();

    /**
     * 删除热表中的流程实例
     * @return 影响行数
     */
    int deleteProcinst();

    /**
     * 记录归档日志
     * @param cutoffDate 截止日期
     * @param procinstCount 流程实例数量
     * @param actinstCount 活动实例数量
     * @param varinstCount 变量实例数量
     * @param taskinstCount 任务实例数量
     * @param identitylinkCount 参与者链接数量
     * @param commentCount 评论数量
     */
    void insertArchiveLog(@Param("cutoffDate") Date cutoffDate,
                          @Param("procinstCount") int procinstCount,
                          @Param("actinstCount") int actinstCount,
                          @Param("varinstCount") int varinstCount,
                          @Param("taskinstCount") int taskinstCount,
                          @Param("identitylinkCount") int identitylinkCount,
                          @Param("commentCount") int commentCount);
}
