package com.bonus.material.approval.service;

import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.material.approval.domain.ApprovalInstance;

/**
 * 审批引擎服务接口
 * 
 * @author bonus
 * @date 2024-11-18
 */
public interface IApprovalEngineService {

    /**
     * 创建审批实例
     *
     * @param businessType 业务类型
     * @param businessId 业务ID
     * @param businessData 业务数据（JSON）
     * @return 审批实例
     */
    ApprovalInstance createApprovalInstance(String businessType, String businessId, String businessData);

    /**
     * 创建审批实例（支持多组织机构）
     *
     * @param businessType 业务类型
     * @param businessId 业务ID
     * @param businessData 业务数据（JSON）
     * @param orgId 组织机构ID
     * @return 审批实例
     */
    ApprovalInstance createApprovalInstance(String businessType, String businessId, String businessData, Long orgId);

    /**
     * 执行审批操作
     * 
     * @param instanceId 实例ID
     * @param approveResult 审批结果（1通过 2驳回）
     * @param approveOpinion 审批意见
     * @return 结果
     */
    AjaxResult doApprove(Long instanceId, String approveResult, String approveOpinion);

    /**
     * 判断是否需要审批
     * 
     * @param businessType 业务类型
     * @return true需要审批 false不需要审批
     */
    boolean needApproval(String businessType);

    /**
     * 获取审批实例详情（包含审批记录）
     * 
     * @param instanceId 实例ID
     * @return 实例详情
     */
    ApprovalInstance getApprovalDetail(Long instanceId);
}

