package com.trade.admin.workflow.mapper;


import com.trade.admin.workflow.dto.SearchFlowActivityDefinition;
import com.trade.admin.workflow.domain.FlowActivityDefinition;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface FlowActivityDefinitionMapper {

    /**
     * 新增流程活动定义信息
     *
     * @param flowActDef 流程活动定义对象
     * @return 成功新增的条数
     */
    int add(FlowActivityDefinition flowActDef);

    /**
     * 设置用户任务时限
     *
     * @param id 流程活动定义ID
     * @param timeLimit 时限
     * @param workingDay true表示工作日，false表示自然日
     * @return 受影响等记录条数
     */
    int updateTimeLimit(@Param("id") Long id, @Param("timeLimit") Float timeLimit,
            @Param("workingDay") boolean workingDay);

    FlowActivityDefinition get(Long id);

    /**
     * 查询流程定义信息
     *
     * @param search 查询条件
     * @return
     */
    List<FlowActivityDefinition> findBySearch(SearchFlowActivityDefinition search);

    /**
     * 获取流程实例所引用的流程定义中具体活动（如用户任务）的时限信息
     *
     * @param procDefId 部署的流程定义ID
     * @param activityKey 活动（如用户任务）KEY
     * @return 流程活动定义信息
     */
    FlowActivityDefinition getByProcActKey(@Param("procDefId") String procDefId,
            @Param("activityKey") String activityKey);

    /**
     * 获取流程实例所引用的流程定义中具体活动（如用户任务）的最大的时限信息
     *
     * @param procDefKey
     * @param activityKey
     * @return FlowActivityDefinition 流程活动定义信息
     */
    FlowActivityDefinition getMaxTimeLimitByProcDefKeyActKey(@Param("procDefKey") String procDefKey,
            @Param("activityKey") String activityKey);

    Integer existTask(String historicTaskId);
}

