package com.trade.admin.workflow.service;

import com.trade.common.core.page.GridPage;
import com.trade.admin.workflow.dto.SearchFlowActivityDefinition;
import com.trade.admin.workflow.domain.FlowActivityDefinition;
/**
 * @Description:流程活动定义Service
 * @Author:wanxiangZhou
 * @E-mail:zhouyu@sunxung.cn
 * @Date:2018年6月19日 上午11:59:50
 */
public interface FlowActivityDefinitionService {

    /**
     * 新增流程活动定义信息
     *
     * @param flowActDef 流程活动定义对象
     * @return true表示新增成功，否则失败
     */
    Boolean add(FlowActivityDefinition flowActDef);

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

    /**
     * 根据ID获取流程活动定义信息
     *
     * @param id 程活动定义ID
     * @return 流程活动定义对象
     */
    FlowActivityDefinition get(Long id);

    /**
     * 设置用户任务时限，时限的单位：0.5天
     *
     * @param id 流程活动定义ID
     * @param timeLimit 时限
     * @param workingDay true表示工作日，false表示自然日
     * @return true 更新成功，否则失败
     */
    Boolean updateTimeLimit(Long id, Float timeLimit, boolean workingDay);

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

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