package cn.fateverse.workflow.mapper;

import cn.fateverse.workflow.entity.UserInstance;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户实例mapper层
 *
 * @author Clay
 * @date 2023-03-22
 */
public interface UserInstanceMapper {


    /**
     * 根据实例id查询用户实例
     *
     * @param instanceId 实例id
     * @return 用户实例
     */
    UserInstance selectByInstanceId(String instanceId);

    /**
     * 根据用户d查询用户实例
     *
     * @param userId 实例id
     * @param state  流程状态
     * @return 用户实例
     */
    List<UserInstance> selectByUserId(@Param("userId") String userId, @Param("state") String state, @Param("deploymentName") String deploymentName);


    /**
     * 根据用户id和状态查询到关于我的流程记录
     *
     * @param userId 用户id
     * @param state  流程记录装填
     * @return 用户流程记录
     */
    List<UserInstance> selectProcessInstanceListByUserIdAndState(@Param("userId") Long userId, @Param("state") String state, @Param("deploymentName") String deploymentName);

    /**
     * 根据流程实例id查询用户实例
     *
     * @param processInstanceId 实例id
     * @return 用户实例
     */
    UserInstance selectByProcessInstanceId(String processInstanceId);

    /**
     * 新增用户实例
     *
     * @param userInstance 用户实例
     * @return 新增数量
     */
    int insert(UserInstance userInstance);

    /**
     * 更新用户实例
     *
     * @param userInstance 用户实例
     * @return 更新数量
     */
    int update(UserInstance userInstance);

    /**
     * 更新用户实例状态
     *
     * @param processInstanceId 流程id
     * @param state             需要更新的状态
     */
    int updateState(@Param("processInstanceId") String processInstanceId, @Param("state") String state);

    /**
     * 批量更新用户实例的状态
     *
     * @param processInstanceIds   流程id数组
     * @param businessStatusReject 需要更新的状态
     * @return 更新的数量
     */
    int updateStateByProcessInstanceIdList(List<String> processInstanceIds, String businessStatusReject);
}
