package com.iailab.module.bpm.service.definition; import com.iailab.framework.common.pojo.PageResult; import com.iailab.module.bpm.controller.admin.definition.vo.model.BpmModelMetaInfoVO; import com.iailab.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageReqVO; import com.iailab.module.bpm.dal.dataobject.definition.BpmFormDO; import com.iailab.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; import com.iailab.module.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; import org.flowable.bpmn.model.BpmnModel; import org.flowable.engine.repository.Deployment; import org.flowable.engine.repository.Model; import org.flowable.engine.repository.ProcessDefinition; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import static com.iailab.framework.common.util.collection.CollectionUtils.convertMap; /** * Flowable流程定义接口 * * @author yunlong.li * @author ZJQ * @author iailab */ public interface BpmProcessDefinitionService { /** * 获得流程定义分页 * * @param pageReqVO 分页入参 * @return 流程定义 Page */ PageResult getProcessDefinitionPage(BpmProcessDefinitionPageReqVO pageReqVO); /** * 获得流程定义列表 * * @param suspensionState 中断状态 * @return 流程定义列表 */ List getProcessDefinitionListBySuspensionState(Integer suspensionState, String categoryId); /** * 基于流程模型,创建流程定义 * * @param model 流程模型 * @param modelMetaInfo 流程模型元信息 * @param bpmnBytes BPMN XML 字节数组 * @param simpleJson SIMPLE Model JSON * @param form 表单 * @return 流程编号 */ String createProcessDefinition(Model model, BpmModelMetaInfoVO modelMetaInfo, byte[] bpmnBytes, String simpleJson, BpmFormDO form); /** * 更新流程定义状态 * * @param id 流程定义的编号 * @param state 状态 */ void updateProcessDefinitionState(String id, Integer state); /** * 更新模型编号 * * @param modelId 流程定义编号 * @param sort 排序 */ void updateProcessDefinitionSortByModelId(String modelId, Long sort); /** * 获得流程定义对应的 BPMN * * @param id 流程定义编号 * @return BPMN */ BpmnModel getProcessDefinitionBpmnModel(String id); /** * 获得流程定义的信息 * * @param id 流程定义编号 * @return 流程定义信息 */ BpmProcessDefinitionInfoDO getProcessDefinitionInfo(String id); /** * 获得流程定义的信息 List * * @param ids 流程定义编号数组 * @return 流程额定义信息数组 */ List getProcessDefinitionInfoList(Collection ids); default Map getProcessDefinitionInfoMap(Set ids) { return convertMap(getProcessDefinitionInfoList(ids), BpmProcessDefinitionInfoDO::getProcessDefinitionId); } /** * 获得流程定义编号对应的 ProcessDefinition * * @param id 流程定义编号 * @return 流程定义 */ ProcessDefinition getProcessDefinition(String id); /** * 获得 ids 对应的 ProcessDefinition 数组 * * @param ids 编号的数组 * @return 流程定义的数组 */ List getProcessDefinitionList(Set ids); default Map getProcessDefinitionMap(Set ids) { return convertMap(getProcessDefinitionList(ids), ProcessDefinition::getId); } /** * 获得 deploymentId 对应的 ProcessDefinition * * @param deploymentId 部署编号 * @return 流程定义 */ ProcessDefinition getProcessDefinitionByDeploymentId(String deploymentId); /** * 获得 deploymentIds 对应的 ProcessDefinition 数组 * * @param deploymentIds 部署编号的数组 * @return 流程定义的数组 */ List getProcessDefinitionListByDeploymentIds(Set deploymentIds); /** * 获得流程定义标识对应的激活的流程定义 * * @param key 流程定义的标识 * @return 流程定义 */ ProcessDefinition getActiveProcessDefinition(String key); /** * 判断用户是否可以使用该流程定义,进行流程的发起 * * @param processDefinition 流程定义 * @param userId 用户编号 * @return 是否可以发起流程 */ boolean canUserStartProcessDefinition(BpmProcessDefinitionInfoDO processDefinition, Long userId); /** * 获得 ids 对应的 Deployment Map * * @param ids 部署编号的数组 * @return 流程部署 Map */ default Map getDeploymentMap(Set ids) { return convertMap(getDeploymentList(ids), Deployment::getId); } /** * 获得 ids 对应的 Deployment 数组 * * @param ids 部署编号的数组 * @return 流程部署的数组 */ List getDeploymentList(Set ids); /** * 获得 id 对应的 Deployment * * @param id 部署编号 * @return 流程部署 */ Deployment getDeployment(String id); }