package org.jeecg.modules.activiti.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.activiti.engine.repository.Model;
import org.jeecg.modules.activiti.model.entity.ReProcdefEntity;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.xml.stream.XMLStreamException;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;

/**
 * 流程接口
 *
 * @author yao
 * @date 2019/06/12
 */
public interface ReProcdefService extends IService<ReProcdefEntity> {
    /**
     * 通过部署ID读取资源
     *
     * @param id
     *            流程部署标识
     * @param proInsId
     *            流程实例表示
     * @param resType
     *            部署文件类型
     * @return 文件流
     */
    InputStream resourceRead(String id, String proInsId, String resType);

    /**
     * 启动流程实例，通过processDefinitionId
     *
     * @param processDefinitionId
     */
    void startProcessInstanceById(String processDefinitionId);

    /**
     * 分页查询
     *
     * @param req
     *            查询参数
     * @return Page
     */
    IPage queryPage(Integer pageNo,Integer pageSize,HttpServletRequest req);

    /**
     * 删除部署流程
     *
     * @param deploymentId
     *            流程部署标识
     */
    void delete(String deploymentId);

    /**
     * 删除部署流程
     *
     * @param deploymentIds
     *            流程部署标识
     */
    void deleteBatch(String[] deploymentIds);

    /**
     * 删除部署流程
     *
     * @param deploymentId
     *            流程部署标识
     */
    void deleteByDeploymentId(String deploymentId);

    /**
     * 根据文件部署工作流
     *
     * @param exportDir
     *            文件地址
     * @param file
     *            上传文件
     * @return 部署信息
     * @throws IOException
     */
    String deploy(String exportDir, MultipartFile file,HttpServletRequest request) throws IOException;

    /**
     * 转为模型
     *
     * @param id
     *            id
     * @return Model
     * @throws UnsupportedEncodingException
     * @throws XMLStreamException
     */
    Model convertToModel(String id,HttpServletRequest request) throws UnsupportedEncodingException, XMLStreamException;

    /**
     * 流程挂起和激活
     *
     * @param state
     *            流程状态
     * @param id
     *            流程部署标识
     * @return 操作信息
     */
    String updateState(int state, String id);

    /**
     * 获取激活的流程
     *
     * @return
     */
    List<ReProcdefEntity> listActive(HttpServletRequest request);
}
