diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/ProcessDefinitionController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/ProcessDefinitionController.java index 844e78e52..dfd336872 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/ProcessDefinitionController.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/ProcessDefinitionController.java @@ -2,12 +2,11 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageItemRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.FileResp; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmDefinitionService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -16,8 +15,6 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -38,6 +35,7 @@ public class ProcessDefinitionController { return success(bpmDefinitionService.getDefinitionPage(pageReqVO)); } + // TODO 芋艿:需要重写该方法 @GetMapping(value = "/getStartForm") public CommonResult getStartForm(@RequestParam("processKey") String processKey){ // final ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery(). @@ -47,11 +45,12 @@ public class ProcessDefinitionController { return success("/flow/leave/apply"); } - @GetMapping ("/export") - @ApiOperation(value = "流程定义的bpmnXml导出") - public void getDefinitionPage(@RequestParam String processDefinitionId, HttpServletResponse response) throws IOException { - FileResp fileResp = bpmDefinitionService.export(processDefinitionId); - ServletUtils.writeAttachment(response, fileResp.getFileName(), fileResp.getFileByte()); + @GetMapping ("/get-bpmn-xml") + @ApiOperation(value = "获得流程定义的 BPMN XML") + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = String.class) + public CommonResult getDefinitionBpmnXML(@RequestParam("id") String id) { + String bpmnXML = bpmDefinitionService.getDefinitionBpmnXML(id); + return success(bpmnXML); } } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmDefinitionConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmDefinitionConvert.java index 824eaad41..e5df3771d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmDefinitionConvert.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmDefinitionConvert.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmPro import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import org.activiti.engine.impl.persistence.entity.SuspensionState; import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.ProcessDefinition; import org.mapstruct.Mapper; @@ -36,6 +37,7 @@ public interface BpmDefinitionConvert { default BpmProcessDefinitionPageItemRespVO convert(ProcessDefinition bean, Deployment deployment, BpmProcessDefinitionDO processDefinitionDO, BpmFormDO form) { BpmProcessDefinitionPageItemRespVO respVO = convert(bean); + respVO.setSuspensionState(bean.isSuspended() ? SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode()); if (deployment != null) { respVO.setDeploymentTime(deployment.getDeploymentTime()); } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmDefinitionService.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmDefinitionService.java index 58080ce90..4804d28a7 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmDefinitionService.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmDefinitionService.java @@ -1,11 +1,11 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageItemRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.FileResp; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageReqVO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import org.activiti.bpmn.model.BpmnModel; import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.ProcessDefinition; @@ -31,12 +31,20 @@ public interface BpmDefinitionService { PageResult getDefinitionPage(BpmProcessDefinitionPageReqVO pageReqVO); /** - * 导出流程 bpmn 模型 - * @param processDefinitionId 分页入参 - * @return 分页model + * 获得流程定义对应的 BPMN XML + * + * @param id 流程定义编号 + * @return BPMN XML */ - // TODO 芋艿:考虑下重写 - FileResp export(String processDefinitionId); + String getDefinitionBpmnXML(String id); + + /** + * 获得 Bpmn 模型 + * + * @param processDefinitionId 流程定义的编号 + * @return Bpmn 模型 + */ + BpmnModel getBpmnModel(String processDefinitionId); /** * 获得编号对应的 ProcessDefinition diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmDefinitionServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmDefinitionServiceImpl.java index 61552ec4d..baf8146f2 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmDefinitionServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmDefinitionServiceImpl.java @@ -48,6 +48,8 @@ public class BpmDefinitionServiceImpl implements BpmDefinitionService { private static final String BPMN_FILE_SUFFIX = ".bpmn"; + private static final BpmnXMLConverter BPMN_XML_CONVERTER = new BpmnXMLConverter(); + @Resource private RepositoryService repositoryService; @Resource @@ -92,14 +94,18 @@ public class BpmDefinitionServiceImpl implements BpmDefinitionService { } @Override - public FileResp export(String processDefinitionId) { - BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); + public String getDefinitionBpmnXML(String id) { + BpmnModel bpmnModel = repositoryService.getBpmnModel(id); + if (bpmnModel == null) { + return null; + } + byte[] bpmnBytes = BPMN_XML_CONVERTER.convertToXML(bpmnModel); + return StrUtil.utf8Str(bpmnBytes); + } - byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(bpmnModel); - FileResp fileResp = new FileResp(); - fileResp.setFileName( "export"); - fileResp.setFileByte(bpmnBytes); - return fileResp; + @Override + public BpmnModel getBpmnModel(String processDefinitionId) { + return repositoryService.getBpmnModel(processDefinitionId); } @Override diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/form/impl/BpmFormServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/form/impl/BpmFormServiceImpl.java index 582ce7878..e9d5ff1fc 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/form/impl/BpmFormServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/form/impl/BpmFormServiceImpl.java @@ -20,8 +20,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.BPM_FORM_FIELD_REPEAT; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.BPM_FORM_NOT_EXISTS; +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.FORM_FIELD_REPEAT; +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.FORM_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** @@ -66,7 +66,7 @@ public class BpmFormServiceImpl implements BpmFormService { private void validateFormExists(Long id) { if (formMapper.selectById(id) == null) { - throw exception(BPM_FORM_NOT_EXISTS); + throw exception(FORM_NOT_EXISTS); } } @@ -106,7 +106,7 @@ public class BpmFormServiceImpl implements BpmFormService { continue; } // 如果存在,则报错 - throw exception(BPM_FORM_FIELD_REPEAT, oldLabel, fieldDTO.getLabel(), fieldDTO.getVModel()); + throw exception(FORM_FIELD_REPEAT, oldLabel, fieldDTO.getLabel(), fieldDTO.getVModel()); } } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java index 13a5d4255..385517f29 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java @@ -109,7 +109,7 @@ public class BpmModelServiceImpl implements BpmModelService { // 校验流程标识已经存在 Model keyModel = this.getModelByKey(createReqVO.getKey()); if (keyModel != null) { - throw exception(BPM_MODEL_KEY_EXISTS, createReqVO.getKey()); + throw exception(MODEL_KEY_EXISTS, createReqVO.getKey()); } // 创建流程定义 @@ -129,7 +129,7 @@ public class BpmModelServiceImpl implements BpmModelService { // 校验流程模型存在 Model model = repositoryService.getModel(updateReqVO.getId()); if (model == null) { - throw exception(BPMN_MODEL_NOT_EXISTS); + throw exception(MODEL_NOT_EXISTS); } // 修改流程定义 @@ -146,11 +146,11 @@ public class BpmModelServiceImpl implements BpmModelService { // 校验流程模型存在 Model model = repositoryService.getModel(id); if (ObjectUtils.isEmpty(model)) { - throw exception(BPMN_MODEL_NOT_EXISTS); + throw exception(MODEL_NOT_EXISTS); } byte[] bpmnBytes = repositoryService.getModelEditorSource(model.getId()); if (bpmnBytes == null) { - throw exception(BPMN_MODEL_NOT_EXISTS); + throw exception(MODEL_NOT_EXISTS); } // 创建流程定义 @@ -169,7 +169,7 @@ public class BpmModelServiceImpl implements BpmModelService { // 校验流程模型存在 Model model = repositoryService.getModel(id); if (model == null) { - throw exception(BPMN_MODEL_NOT_EXISTS); + throw exception(MODEL_NOT_EXISTS); } // 执行删除 repositoryService.deleteModel(id); @@ -181,7 +181,7 @@ public class BpmModelServiceImpl implements BpmModelService { private void checkKeyNCName(String key) { if (!ValidationUtils.isXmlNCName(key)) { - throw exception(BPMN_MODEL_KEY_VALID); + throw exception(MODEL_KEY_VALID); } } diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/form/BpmFormServiceTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/form/BpmFormServiceTest.java index 704178e75..6e52b9497 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/form/BpmFormServiceTest.java +++ b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/form/BpmFormServiceTest.java @@ -13,7 +13,7 @@ import org.springframework.context.annotation.Import; import javax.annotation.Resource; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.BPM_FORM_NOT_EXISTS; +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.FORM_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; @@ -72,7 +72,7 @@ public class BpmFormServiceTest extends BaseDbUnitTest { BpmFormUpdateReqVO reqVO = randomPojo(BpmFormUpdateReqVO.class); // 调用, 并断言异常 - assertServiceException(() -> formService.updateForm(reqVO), BPM_FORM_NOT_EXISTS); + assertServiceException(() -> formService.updateForm(reqVO), FORM_NOT_EXISTS); } @Test @@ -95,7 +95,7 @@ public class BpmFormServiceTest extends BaseDbUnitTest { Long id = randomLongId(); // 调用, 并断言异常 - assertServiceException(() -> formService.deleteForm(id), BPM_FORM_NOT_EXISTS); + assertServiceException(() -> formService.deleteForm(id), FORM_NOT_EXISTS); } @Test diff --git a/yudao-admin-ui/src/api/bpm/definition.js b/yudao-admin-ui/src/api/bpm/definition.js index ef7bcbd06..b648f044a 100644 --- a/yudao-admin-ui/src/api/bpm/definition.js +++ b/yudao-admin-ui/src/api/bpm/definition.js @@ -8,9 +8,9 @@ export function getDefinitionPage(query) { }) } -export function exportProcessDefinition(query) { +export function getDefinitionBpmnXML(id) { return request({ - url: '/workflow/process/definition/export?processDefinitionId='+query.id, + url: '/bpm/definition/get-bpmn-xml?id=' + id, method: 'get' }) } diff --git a/yudao-admin-ui/src/views/bpm/definition/index.vue b/yudao-admin-ui/src/views/bpm/definition/index.vue index 3877d673c..4666a7f48 100644 --- a/yudao-admin-ui/src/views/bpm/definition/index.vue +++ b/yudao-admin-ui/src/views/bpm/definition/index.vue @@ -2,10 +2,57 @@
- - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13,10 +60,17 @@ + diff --git a/yudao-admin-ui/src/views/bpm/model/index.vue b/yudao-admin-ui/src/views/bpm/model/index.vue index 66cb96c23..93b4e42e1 100644 --- a/yudao-admin-ui/src/views/bpm/model/index.vue +++ b/yudao-admin-ui/src/views/bpm/model/index.vue @@ -26,7 +26,7 @@ 新建流程 + v-hasPermi="['infra:config:create']">新建流程模型 @@ -72,7 +72,7 @@ :active-value="1" :inactive-value="2" @change="handleStatusChange(scope.row)" /> - + @@ -256,9 +256,7 @@ export default {