package com.iailab.module.bpm.service.task; import com.iailab.framework.common.pojo.PageResult; import com.iailab.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import com.iailab.module.bpm.controller.admin.task.vo.instance.*; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.runtime.ProcessInstance; import javax.validation.Valid; import java.util.List; import java.util.Map; import java.util.Set; import static com.iailab.framework.common.util.collection.CollectionUtils.convertMap; /** * æµç¨‹å®žä¾‹ Service æŽ¥å£ * * @author 芋é“æºç */ public interface BpmProcessInstanceService { // ========== Query 查询相关方法 ========== /** * 获得æµç¨‹å®žä¾‹ * * @param id æµç¨‹å®žä¾‹çš„ç¼–å· * @return æµç¨‹å®žä¾‹ */ ProcessInstance getProcessInstance(String id); /** * 获得æµç¨‹å®žä¾‹åˆ—表 * * @param ids æµç¨‹å®žä¾‹çš„ç¼–å·é›†åˆ * @return æµç¨‹å®žä¾‹åˆ—表 */ List<ProcessInstance> getProcessInstances(Set<String> ids); /** * 获得æµç¨‹å®žä¾‹ Map * * @param ids æµç¨‹å®žä¾‹çš„ç¼–å·é›†åˆ * @return æµç¨‹å®žä¾‹åˆ—表 Map */ default Map<String, ProcessInstance> getProcessInstanceMap(Set<String> ids) { return convertMap(getProcessInstances(ids), ProcessInstance::getProcessInstanceId); } /** * 获得历å²çš„æµç¨‹å®žä¾‹ * * @param id æµç¨‹å®žä¾‹çš„ç¼–å· * @return 历å²çš„æµç¨‹å®žä¾‹ */ HistoricProcessInstance getHistoricProcessInstance(String id); /** * 获得历å²çš„æµç¨‹å®žä¾‹åˆ—表 * * @param ids æµç¨‹å®žä¾‹çš„ç¼–å·é›†åˆ * @return 历å²çš„æµç¨‹å®žä¾‹åˆ—表 */ List<HistoricProcessInstance> getHistoricProcessInstances(Set<String> ids); /** * 获得历å²çš„æµç¨‹å®žä¾‹ Map * * @param ids æµç¨‹å®žä¾‹çš„ç¼–å·é›†åˆ * @return 历å²çš„æµç¨‹å®žä¾‹åˆ—表 Map */ default Map<String, HistoricProcessInstance> getHistoricProcessInstanceMap(Set<String> ids) { return convertMap(getHistoricProcessInstances(ids), HistoricProcessInstance::getId); } /** * 获得æµç¨‹å®žä¾‹çš„分页 * * @param userId ç”¨æˆ·ç¼–å· * @param pageReqVO 分页请求 * @return æµç¨‹å®žä¾‹çš„分页 */ PageResult<HistoricProcessInstance> getProcessInstancePage(Long userId, @Valid BpmProcessInstancePageReqVO pageReqVO); // TODO @芋艿:é‡ç‚¹åœ¨ review 下 /** * 获å–审批详情。 * <p> * å¯ä»¥æ˜¯å‡†å¤‡å‘èµ·çš„æµç¨‹ã€è¿›è¡Œä¸çš„æµç¨‹ã€å·²ç»ç»“æŸçš„æµç¨‹ * * @param loginUserId ç™»å½•äººçš„ç”¨æˆ·ç¼–å· * @param reqVO è¯·æ±‚ä¿¡æ¯ * @return æµç¨‹å®žä¾‹çš„进度 */ BpmApprovalDetailRespVO getApprovalDetail(Long loginUserId, @Valid BpmApprovalDetailReqVO reqVO); /** * 获å–æµç¨‹å®žä¾‹çš„ BPMN 模型视图 * * @param id æµç¨‹å®žä¾‹çš„ç¼–å· * @return BPMN 模型视图 */ BpmProcessInstanceBpmnModelViewRespVO getProcessInstanceBpmnModelView(String id); // ========== Update 写入相关方法 ========== /** * 创建æµç¨‹å®žä¾‹ï¼ˆæ供给å‰ç«¯ï¼‰ * * @param userId ç”¨æˆ·ç¼–å· * @param createReqVO åˆ›å»ºä¿¡æ¯ * @return å®žä¾‹çš„ç¼–å· */ String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqVO createReqVO); /** * 创建æµç¨‹å®žä¾‹ï¼ˆæ供给内部) * * @param userId ç”¨æˆ·ç¼–å· * @param createReqDTO åˆ›å»ºä¿¡æ¯ * @return å®žä¾‹çš„ç¼–å· */ String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO createReqDTO); /** * å‘起人å–消æµç¨‹å®žä¾‹ * * @param userId ç”¨æˆ·ç¼–å· * @param cancelReqVO å–æ¶ˆä¿¡æ¯ */ void cancelProcessInstanceByStartUser(Long userId, @Valid BpmProcessInstanceCancelReqVO cancelReqVO); /** * 管ç†å‘˜å–消æµç¨‹å®žä¾‹ * * @param userId ç”¨æˆ·ç¼–å· * @param cancelReqVO å–æ¶ˆä¿¡æ¯ */ void cancelProcessInstanceByAdmin(Long userId, BpmProcessInstanceCancelReqVO cancelReqVO); /** * æ›´æ–° ProcessInstance 为ä¸é€šè¿‡ * * @param processInstance æµç¨‹å®žä¾‹ * @param reason ç†ç”±ã€‚例如说,审批ä¸é€šè¿‡æ—¶ï¼Œéœ€è¦ä¼ 递该值 */ void updateProcessInstanceReject(ProcessInstance processInstance, String reason); // ========== Event 事件相关方法 ========== /** * å¤„ç† ProcessInstance 完æˆäº‹ä»¶ï¼Œä¾‹å¦‚说:审批通过ã€ä¸é€šè¿‡ã€å–消 * * @param instance æµç¨‹ä»»åŠ¡ */ void processProcessInstanceCompleted(ProcessInstance instance); }