package com.chinaweal.aiccs.aiccs.business.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.chinaweal.aiccs.aiccs.business.entity.XrActivity;
import com.chinaweal.aiccs.aiccs.business.entity.XrOpinion;
import com.chinaweal.aiccs.aiccs.business.entity.XrTaskList;
import com.chinaweal.aiccs.aiccs.business.rules.model.NodeModel;
import com.chinaweal.aiccs.aiccs.business.rules.model.SequenceFlowModel;
import com.chinaweal.aicorg.model.AICUser;
import com.chinaweal.aicorg.pojo.AICPermission;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author quebh
 * @since 2023-05-04
 */
public interface IXrActivityService extends IService<XrActivity> {


    /**
     * 开启待办
     *
     * @param taskListModel
     * @param user
     * @param definitionName
     * @return
     */
    @Deprecated
    String startWorkFlow(XrTaskList taskListModel, AICUser user, String definitionName);

    /**
     * 处理待办
     *
     * @param taskLikeId
     * @param nextNodeID
     * @param nextPerformerIds
     * @param user
     * @return
     */
    @Deprecated
    String processWork(String taskLikeId, String nextNodeID, String[] nextPerformerIds, AICUser user);

    /**
     * 通过流程模板开启待办
     *
     * @param xrTaskList
     * @param userList
     * @param ident
     * @return
     * @author ymc
     * @since 2024年3月7日 11:11
     */
    String startWorkFlowByTemplate(XrTaskList xrTaskList, List<AICUser> userList, String ident);

    /**
     * 通过流程模板推进流程
     *
     * @param taskListModel 待办信息
     * @param userList      下一环节用户列表
     * @param nextNodeID    下一环节节点
     * @param opinion       环节意见
     * @param ident
     * @return 环节名称
     * @author ymc
     * @since 2024年3月7日 11:11
     */
    String processWorkByTemplate(XrTaskList taskListModel, List<AICUser> userList, String nextNodeID, XrOpinion opinion, String ident);

    /**
     * 查找当前节点的下一步路线
     *
     * @param taskId     待办主键
     * @return
     * @author ymc
     * @since 2024年3月6日 19:44
     */
    List<SequenceFlowModel> findNextSequenceFlowList(String taskId);

    /**
     * 获取当前节点
     *
     * @param taskId
     * @return 环节信息
     * @author ymc
     * @since 2024年3月7日 13:41
     */
    NodeModel findCurrentNode(String taskId);

    /**
     * 查找经办人环节
     *
     * @param taskId
     * @param linkType
     * @return
     * @author ymc
     * @since 2024年3月8日 14:54
     */
    XrActivity findOperator(String taskId, String linkType);

    boolean checkPermissionsAndNodeID(Map<String, AICPermission> aicPermissions,String currentNodeID,String nextNodeID,String inWorkFlow);
}
