package org.springblade.thirdparty.mk.service;

import jakarta.servlet.http.HttpServletResponse;
import org.springblade.thirdparty.mk.pojo.dto.*;
import org.springblade.thirdparty.mk.pojo.dto.approval.MKApprovalDTO;
import org.springblade.thirdparty.mk.pojo.dto.approval.MKProcessDTO;
import org.springblade.thirdparty.mk.pojo.vo.*;

import java.util.List;

/**
 * @author bfhuange
 * @date 2024/9/11
 */
public interface IMKService {
    /**
     *  提交流程
     * @param param
     * @return
     */
    String processSubmit(MKProcessCreateDTO param);

    /**
     *  执行流程
     * @param param
     * @return
     */
    boolean processExecute(MKProcessExecuteDTO param);

    /**
     *  撤回流程，起草人撤回
     * @param bizId
     * @param loginName  MK要的是手机号,不是登录名
     * @return
     */
    boolean processRevoke(String bizId, String loginName);

    /**
     *  删除流程
     * @param processInstanceId 流程实例id
     * @param loginName  MK要的是手机号,不是登录名
     * @return
     */
    boolean processDelete(String processInstanceId, String loginName);

    /**
     *  废弃流程，起草人废弃
     * @param bizId 业务id
     * @param loginName  MK要的是手机号,不是登录名
     * @return
     */
    boolean processAbandon(String bizId, String loginName);

    /**
     *  根据 mk code 获取mk账号
     * @param mkCode
     * @return
     */
    String getMKAccount(String mkCode);

    /**
     *  获取流程当前节点详情
     * @param processInstanceId
     * @param loginName
     * @return
     */
    List<MKNodeVO> getCurrentNodes(String processInstanceId, String loginName);

    /**
     *  获取节点处理人信息
     * @param processInstanceId
     * @param loginName
     * @param nodeId
     * @return
     */
    MKAllHandlerVO getNodeHandlers(String processInstanceId, String loginName, String nodeId);

    /**
     *  推送机构部门
     * @param param
     * @return
     */
    boolean pushOrgDept(MKPushDTO<MKPushOrgDeptDTO> param);

    /**
     *  推送人员
     * @param param
     * @return
     */
    boolean pushPerson(MKPushDTO<MKPushPersonDTO> param);

    /**
     *  获取mk审批链接
     * @param processInstanceId
     * @param loginName
     * @return
     */
    String getMKApprovalUrl(String processInstanceId, String loginName);

    /**
     *  查询流程审批记录
     * @param param
     * @return
     */
    List<MKAuditNoteVO> queryAuditNotes(MKAuditNoteDTO param);

    /**
     *  查询抄送人列表
     * @param param
     * @return
     */
    List<MKSenderVO> querySenderList(MKSenderDTO param);

    /**
     *  下载文件
     * @param response
     * @param fileId
     */
    void downloadFile(HttpServletResponse response, String fileId);

    /**
     *  下载文件
     * @param fileId
     */
    String getFileBase64(String fileId);

    /**
     *  根据流程模板id和节点id查询节点编号
     * @param templateId
     * @param nodeId
     * @return
     */
    String getNodeNumber(String templateId, String nodeId);

    /**
     *  查询审批中心列表
     * @param param
     * @return
     */
    MKPageVO<MKApprovalVO> queryApprovalList(MKApprovalDTO param);

    /**
     *  查询流程列表，我参与的 待办
     * @param param
     * @return
     */
    MKPageVO<MKProcessVO> queryProcessList(MKProcessDTO param);
}
