Commit 00f59fdc75b83c1e61e19cb7e810d62e81d0eee1
1 parent
480b1750
fix: 完善 bpm 模型流程
Showing
11 changed files
with
195 additions
and
12 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/ModelController.java
| 1 | package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow; | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow; |
| 2 | 2 | ||
| 3 | import cn.hutool.core.util.StrUtil; | 3 | import cn.hutool.core.util.StrUtil; |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.FileResp; | ||
| 4 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.TodoTaskRespVO; | 5 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.TodoTaskRespVO; |
| 5 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelCreateVO; | 6 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelCreateVO; |
| 7 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelPageReqVo; | ||
| 8 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelRespVo; | ||
| 6 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelUpdateVO; | 9 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelUpdateVO; |
| 7 | import cn.iocoder.yudao.adminserver.modules.bpm.service.workflow.BpmModelService; | 10 | import cn.iocoder.yudao.adminserver.modules.bpm.service.workflow.BpmModelService; |
| 8 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 11 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 9 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 12 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 13 | +import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; | ||
| 10 | import com.fasterxml.jackson.databind.ObjectMapper; | 14 | import com.fasterxml.jackson.databind.ObjectMapper; |
| 11 | import com.fasterxml.jackson.databind.node.ObjectNode; | 15 | import com.fasterxml.jackson.databind.node.ObjectNode; |
| 12 | import io.swagger.annotations.Api; | 16 | import io.swagger.annotations.Api; |
| 17 | +import io.swagger.annotations.ApiOperation; | ||
| 13 | import lombok.RequiredArgsConstructor; | 18 | import lombok.RequiredArgsConstructor; |
| 14 | import lombok.extern.slf4j.Slf4j; | 19 | import lombok.extern.slf4j.Slf4j; |
| 15 | import org.activiti.engine.*; | 20 | import org.activiti.engine.*; |
| @@ -36,18 +41,41 @@ public class ModelController { | @@ -36,18 +41,41 @@ public class ModelController { | ||
| 36 | 41 | ||
| 37 | private final BpmModelService bpmModelService; | 42 | private final BpmModelService bpmModelService; |
| 38 | 43 | ||
| 44 | + @GetMapping ("/page") | ||
| 45 | + @ApiOperation(value = "分页数据") | ||
| 46 | + public PageResult<Model> pageList(ModelPageReqVo modelPageReqVo) { | ||
| 47 | + return bpmModelService.pageList(modelPageReqVo); | ||
| 48 | + } | ||
| 49 | + | ||
| 39 | @PostMapping("/create") | 50 | @PostMapping("/create") |
| 51 | + @ApiOperation(value = "新建模型") | ||
| 40 | public CommonResult<String> newModel(@RequestBody ModelCreateVO modelCreateVO) { | 52 | public CommonResult<String> newModel(@RequestBody ModelCreateVO modelCreateVO) { |
| 41 | return bpmModelService.newModel(modelCreateVO); | 53 | return bpmModelService.newModel(modelCreateVO); |
| 42 | } | 54 | } |
| 43 | 55 | ||
| 44 | @PostMapping("/update") | 56 | @PostMapping("/update") |
| 57 | + @ApiOperation(value = "修改模型属性") | ||
| 45 | public CommonResult<String> updateModel(@RequestBody ModelUpdateVO modelUpdateVO) { | 58 | public CommonResult<String> updateModel(@RequestBody ModelUpdateVO modelUpdateVO) { |
| 46 | return bpmModelService.updateModel(modelUpdateVO); | 59 | return bpmModelService.updateModel(modelUpdateVO); |
| 47 | } | 60 | } |
| 48 | 61 | ||
| 49 | - @PostMapping("/deploy/{modelId}") | ||
| 50 | - public CommonResult<String> updateModel(@PathVariable String modelId) { | 62 | + @PostMapping("/delete") |
| 63 | + @ApiOperation(value = "删除模型") | ||
| 64 | + public CommonResult<String> deleteModel(@RequestParam String modelId) { | ||
| 65 | + return bpmModelService.deleteModel(modelId); | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + @PostMapping("/deploy") | ||
| 69 | + @ApiOperation(value = "部署模型") | ||
| 70 | + public CommonResult<String> deploy(@RequestParam String modelId) { | ||
| 51 | return bpmModelService.deploy(modelId); | 71 | return bpmModelService.deploy(modelId); |
| 52 | } | 72 | } |
| 73 | + | ||
| 74 | + @GetMapping("/exportBpmnXml") | ||
| 75 | + @ApiOperation(value = "导出模型") | ||
| 76 | + public void export(@RequestParam String deploymentId, HttpServletResponse response) throws IOException { | ||
| 77 | + FileResp fileResp = bpmModelService.exportBpmnXml(deploymentId); | ||
| 78 | + ServletUtils.writeAttachment(response, fileResp.getFileName(), fileResp.getFileByte()); | ||
| 79 | + } | ||
| 80 | + | ||
| 53 | } | 81 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/TaskController.java
| @@ -60,13 +60,12 @@ public class TaskController { | @@ -60,13 +60,12 @@ public class TaskController { | ||
| 60 | return success(bpmTaskService.getHistorySteps(processInstanceId)); | 60 | return success(bpmTaskService.getHistorySteps(processInstanceId)); |
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | - // TODO @Li: 项目里,暂时不使用 path 路径参数,监控等麻烦 | ||
| 64 | /** | 63 | /** |
| 65 | * 返回高亮的流转图SVG | 64 | * 返回高亮的流转图SVG |
| 66 | - * @param processInstanceId | 65 | + * @param processInstanceId 流程Id |
| 67 | */ | 66 | */ |
| 68 | - @GetMapping("/process/highlight-img/{id}") | ||
| 69 | - public void getHighlightImg(@PathVariable("id") String processInstanceId, HttpServletResponse response) throws IOException { | 67 | + @GetMapping("/process/highlight-img") |
| 68 | + public void getHighlightImg(@RequestParam String processInstanceId, HttpServletResponse response) throws IOException { | ||
| 70 | FileResp fileResp = bpmTaskService.getHighlightImg(processInstanceId); | 69 | FileResp fileResp = bpmTaskService.getHighlightImg(processInstanceId); |
| 71 | ServletUtils.writeAttachment(response, fileResp.getFileName(), fileResp.getFileByte()); | 70 | ServletUtils.writeAttachment(response, fileResp.getFileName(), fileResp.getFileByte()); |
| 72 | } | 71 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/model/ModelPageReqVo.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 4 | +import io.swagger.annotations.ApiModel; | ||
| 5 | +import io.swagger.annotations.ApiModelProperty; | ||
| 6 | +import lombok.Data; | ||
| 7 | +import lombok.EqualsAndHashCode; | ||
| 8 | +import lombok.ToString; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * @author yunlong.li | ||
| 12 | + */ | ||
| 13 | +@ApiModel("模型分页 Request VO") | ||
| 14 | +@Data | ||
| 15 | +@EqualsAndHashCode(callSuper = true) | ||
| 16 | +@ToString(callSuper = true) | ||
| 17 | +public class ModelPageReqVo extends PageParam { | ||
| 18 | + @ApiModelProperty("模型名字") | ||
| 19 | + private String name; | ||
| 20 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/model/ModelRespVo.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 4 | +import io.swagger.annotations.ApiModel; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * @author yunlong.li | ||
| 11 | + */ | ||
| 12 | +@ApiModel("模型出口内容 Request VO") | ||
| 13 | +@Data | ||
| 14 | +@ToString(callSuper = true) | ||
| 15 | +public class ModelRespVo { | ||
| 16 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/workflow/ModelConvert.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.convert.workflow; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.TodoTaskRespVO; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelRespVo; | ||
| 5 | +import org.activiti.api.task.model.Task; | ||
| 6 | +import org.activiti.engine.repository.Model; | ||
| 7 | +import org.activiti.engine.repository.ProcessDefinition; | ||
| 8 | +import org.mapstruct.Mapper; | ||
| 9 | +import org.mapstruct.factory.Mappers; | ||
| 10 | + | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * @author yunlongn | ||
| 14 | + */ | ||
| 15 | +@Mapper | ||
| 16 | +public interface ModelConvert { | ||
| 17 | + ModelConvert INSTANCE = Mappers.getMapper(ModelConvert.class); | ||
| 18 | + | ||
| 19 | + ModelRespVo convert(Model model); | ||
| 20 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java
| @@ -28,5 +28,6 @@ public interface BpmErrorCodeConstants { | @@ -28,5 +28,6 @@ public interface BpmErrorCodeConstants { | ||
| 28 | ErrorCode BPMN_MODEL_EDITOR_SOURCE_NOT_EXISTS = new ErrorCode(1004001001, "模型数据为空,请先成功设计流程并保存"); | 28 | ErrorCode BPMN_MODEL_EDITOR_SOURCE_NOT_EXISTS = new ErrorCode(1004001001, "模型数据为空,请先成功设计流程并保存"); |
| 29 | ErrorCode BPMN_MODEL_ERROR = new ErrorCode(1004001002, "工作流模型异常"); | 29 | ErrorCode BPMN_MODEL_ERROR = new ErrorCode(1004001002, "工作流模型异常"); |
| 30 | ErrorCode BPMN_MODEL_PROCESS_NOT_EXISTS = new ErrorCode(1004001003, "流程数据为空"); | 30 | ErrorCode BPMN_MODEL_PROCESS_NOT_EXISTS = new ErrorCode(1004001003, "流程数据为空"); |
| 31 | + ErrorCode BPMN_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1004001004, "流程定义不存在"); | ||
| 31 | 32 | ||
| 32 | } | 33 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/workflow/BpmModelService.java
| 1 | package cn.iocoder.yudao.adminserver.modules.bpm.service.workflow; | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.service.workflow; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.FileResp; | ||
| 3 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelCreateVO; | 4 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelCreateVO; |
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelPageReqVo; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelRespVo; | ||
| 4 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelUpdateVO; | 7 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelUpdateVO; |
| 5 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 8 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 9 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 10 | +import org.activiti.engine.repository.Model; | ||
| 11 | + | ||
| 12 | +import javax.servlet.http.HttpServletResponse; | ||
| 6 | 13 | ||
| 7 | /** | 14 | /** |
| 8 | * 工作流模型接口 | 15 | * 工作流模型接口 |
| @@ -10,16 +17,45 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; | @@ -10,16 +17,45 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 10 | */ | 17 | */ |
| 11 | public interface BpmModelService { | 18 | public interface BpmModelService { |
| 12 | 19 | ||
| 20 | + | ||
| 21 | + /** | ||
| 22 | + * 模型数据分页返回 | ||
| 23 | + * @param modelPageReqVo 分页入参 | ||
| 24 | + * @return 分页model | ||
| 25 | + */ | ||
| 26 | + PageResult<Model> pageList(ModelPageReqVo modelPageReqVo); | ||
| 27 | + | ||
| 13 | /** | 28 | /** |
| 14 | * 新增一个模型 | 29 | * 新增一个模型 |
| 15 | * @param modelCreateVO 模型对象 | 30 | * @param modelCreateVO 模型对象 |
| 16 | * @return 返回成功 | 31 | * @return 返回成功 |
| 17 | */ | 32 | */ |
| 18 | CommonResult<String> newModel(ModelCreateVO modelCreateVO); | 33 | CommonResult<String> newModel(ModelCreateVO modelCreateVO); |
| 19 | - | 34 | + /** |
| 35 | + * 修改模型属性,填充bpmn数据 | ||
| 36 | + * @param modelUpdateVO 模型对象 | ||
| 37 | + * @return 返回成功 | ||
| 38 | + */ | ||
| 20 | CommonResult<String> updateModel(ModelUpdateVO modelUpdateVO); | 39 | CommonResult<String> updateModel(ModelUpdateVO modelUpdateVO); |
| 21 | 40 | ||
| 41 | + /** | ||
| 42 | + * 部署模型 使模型成为一个 process | ||
| 43 | + * @param modelId 模型Id | ||
| 44 | + * @return 返回成功 | ||
| 45 | + */ | ||
| 22 | CommonResult<String> deploy(String modelId); | 46 | CommonResult<String> deploy(String modelId); |
| 23 | 47 | ||
| 48 | + /** | ||
| 49 | + * 导出模型 | ||
| 50 | + * @param modelId 模型Id | ||
| 51 | + * @return {@link FileResp} 返回文件 | ||
| 52 | + */ | ||
| 53 | + FileResp exportBpmnXml(String modelId); | ||
| 24 | 54 | ||
| 55 | + /** | ||
| 56 | + * 删除模型 | ||
| 57 | + * @param modelId 模型Id | ||
| 58 | + * @return 返回成功 | ||
| 59 | + */ | ||
| 60 | + CommonResult<String> deleteModel(String modelId); | ||
| 25 | } | 61 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/workflow/BpmTaskService.java
| @@ -51,6 +51,7 @@ public interface BpmTaskService { | @@ -51,6 +51,7 @@ public interface BpmTaskService { | ||
| 51 | /** | 51 | /** |
| 52 | * 返回高亮的流转进程 | 52 | * 返回高亮的流转进程 |
| 53 | * @param processInstanceId 实例Id | 53 | * @param processInstanceId 实例Id |
| 54 | + * @return {@link FileResp} 返回文件 | ||
| 54 | */ | 55 | */ |
| 55 | FileResp getHighlightImg(String processInstanceId); | 56 | FileResp getHighlightImg(String processInstanceId); |
| 56 | } | 57 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/workflow/impl/BpmModelServiceImpl.java
| 1 | package cn.iocoder.yudao.adminserver.modules.bpm.service.workflow.impl; | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.service.workflow.impl; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.io.IoUtil; | ||
| 4 | +import cn.hutool.core.util.StrUtil; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.FileResp; | ||
| 3 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelCreateVO; | 6 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelCreateVO; |
| 7 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelPageReqVo; | ||
| 8 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelRespVo; | ||
| 4 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelUpdateVO; | 9 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.model.ModelUpdateVO; |
| 5 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants; | 10 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants; |
| 6 | import cn.iocoder.yudao.adminserver.modules.bpm.service.workflow.BpmModelService; | 11 | import cn.iocoder.yudao.adminserver.modules.bpm.service.workflow.BpmModelService; |
| 7 | import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; | 12 | import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; |
| 8 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 13 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 14 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 9 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | 15 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| 10 | import lombok.RequiredArgsConstructor; | 16 | import lombok.RequiredArgsConstructor; |
| 11 | import lombok.extern.slf4j.Slf4j; | 17 | import lombok.extern.slf4j.Slf4j; |
| 18 | +import org.activiti.api.runtime.shared.query.Pageable; | ||
| 12 | import org.activiti.bpmn.converter.BpmnXMLConverter; | 19 | import org.activiti.bpmn.converter.BpmnXMLConverter; |
| 13 | import org.activiti.bpmn.model.BpmnModel; | 20 | import org.activiti.bpmn.model.BpmnModel; |
| 14 | import org.activiti.engine.RepositoryService; | 21 | import org.activiti.engine.RepositoryService; |
| 15 | import org.activiti.engine.repository.Deployment; | 22 | import org.activiti.engine.repository.Deployment; |
| 16 | import org.activiti.engine.repository.Model; | 23 | import org.activiti.engine.repository.Model; |
| 24 | +import org.activiti.engine.repository.ModelQuery; | ||
| 25 | +import org.activiti.engine.repository.ProcessDefinition; | ||
| 17 | import org.apache.commons.lang3.exception.ExceptionUtils; | 26 | import org.apache.commons.lang3.exception.ExceptionUtils; |
| 18 | import org.springframework.stereotype.Service; | 27 | import org.springframework.stereotype.Service; |
| 19 | import org.springframework.util.ObjectUtils; | 28 | import org.springframework.util.ObjectUtils; |
| 20 | 29 | ||
| 30 | +import javax.servlet.http.HttpServletResponse; | ||
| 21 | import javax.xml.stream.XMLInputFactory; | 31 | import javax.xml.stream.XMLInputFactory; |
| 22 | import javax.xml.stream.XMLStreamReader; | 32 | import javax.xml.stream.XMLStreamReader; |
| 23 | import java.io.ByteArrayInputStream; | 33 | import java.io.ByteArrayInputStream; |
| 34 | +import java.io.IOException; | ||
| 35 | +import java.io.InputStream; | ||
| 24 | import java.io.InputStreamReader; | 36 | import java.io.InputStreamReader; |
| 37 | +import java.net.URLEncoder; | ||
| 25 | import java.nio.charset.StandardCharsets; | 38 | import java.nio.charset.StandardCharsets; |
| 39 | +import java.util.List; | ||
| 26 | import java.util.Optional; | 40 | import java.util.Optional; |
| 27 | 41 | ||
| 28 | /** | 42 | /** |
| @@ -36,6 +50,19 @@ public class BpmModelServiceImpl implements BpmModelService { | @@ -36,6 +50,19 @@ public class BpmModelServiceImpl implements BpmModelService { | ||
| 36 | 50 | ||
| 37 | private final RepositoryService repositoryService; | 51 | private final RepositoryService repositoryService; |
| 38 | 52 | ||
| 53 | + | ||
| 54 | + @Override | ||
| 55 | + public PageResult<Model> pageList(ModelPageReqVo modelPageReqVo) { | ||
| 56 | + ModelQuery modelQuery = repositoryService.createModelQuery(); | ||
| 57 | + String likeName = modelPageReqVo.getName(); | ||
| 58 | + if (StrUtil.isNotBlank(likeName)){ | ||
| 59 | + modelQuery.modelNameLike("%"+likeName+"%"); | ||
| 60 | + } | ||
| 61 | + List<Model> models = modelQuery.orderByCreateTime().desc() | ||
| 62 | + .listPage((modelPageReqVo.getPageNo() - 1) * modelPageReqVo.getPageSize(), modelPageReqVo.getPageSize()); | ||
| 63 | + return new PageResult<>(models, modelQuery.count()); | ||
| 64 | + } | ||
| 65 | + | ||
| 39 | @Override | 66 | @Override |
| 40 | public CommonResult<String> newModel(ModelCreateVO modelCreateVO) { | 67 | public CommonResult<String> newModel(ModelCreateVO modelCreateVO) { |
| 41 | try { | 68 | try { |
| @@ -119,4 +146,28 @@ public class BpmModelServiceImpl implements BpmModelService { | @@ -119,4 +146,28 @@ public class BpmModelServiceImpl implements BpmModelService { | ||
| 119 | throw ServiceExceptionUtil.exception(BpmErrorCodeConstants.BPMN_MODEL_ERROR); | 146 | throw ServiceExceptionUtil.exception(BpmErrorCodeConstants.BPMN_MODEL_ERROR); |
| 120 | } | 147 | } |
| 121 | } | 148 | } |
| 149 | + | ||
| 150 | + @Override | ||
| 151 | + public FileResp exportBpmnXml(String deploymentId) { | ||
| 152 | + | ||
| 153 | + // 查询流程定义 | ||
| 154 | + ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().deploymentId(deploymentId).singleResult(); | ||
| 155 | + if (ObjectUtils.isEmpty(pd)) { | ||
| 156 | + throw ServiceExceptionUtil.exception(BpmErrorCodeConstants.BPMN_PROCESS_DEFINITION_NOT_EXISTS); | ||
| 157 | + } | ||
| 158 | + String resourceName = Optional.ofNullable(pd.getDiagramResourceName()).orElse(pd.getResourceName()); | ||
| 159 | + InputStream inputStream = repositoryService.getResourceAsStream(deploymentId, | ||
| 160 | + resourceName); | ||
| 161 | + FileResp fileResp = new FileResp(); | ||
| 162 | + | ||
| 163 | + fileResp.setFileName(String.format("%s.bpmn", Optional.ofNullable(pd.getName()).orElse("流程图"))); | ||
| 164 | + fileResp.setFileByte(IoUtil.readBytes(inputStream)); | ||
| 165 | + return fileResp; | ||
| 166 | + } | ||
| 167 | + | ||
| 168 | + @Override | ||
| 169 | + public CommonResult<String> deleteModel(String modelId) { | ||
| 170 | + repositoryService.deleteModel(modelId); | ||
| 171 | + return CommonResult.success("删除成功"); | ||
| 172 | + } | ||
| 122 | } | 173 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/workflow/impl/BpmTaskServiceImpl.java
| @@ -31,6 +31,7 @@ import org.activiti.image.ProcessDiagramGenerator; | @@ -31,6 +31,7 @@ import org.activiti.image.ProcessDiagramGenerator; | ||
| 31 | import org.apache.commons.lang3.exception.ExceptionUtils; | 31 | import org.apache.commons.lang3.exception.ExceptionUtils; |
| 32 | import org.springframework.stereotype.Service; | 32 | import org.springframework.stereotype.Service; |
| 33 | import org.springframework.transaction.annotation.Transactional; | 33 | import org.springframework.transaction.annotation.Transactional; |
| 34 | +import org.springframework.util.ObjectUtils; | ||
| 34 | 35 | ||
| 35 | import javax.annotation.Resource; | 36 | import javax.annotation.Resource; |
| 36 | import java.io.IOException; | 37 | import java.io.IOException; |
| @@ -174,6 +175,18 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -174,6 +175,18 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 174 | if (hpi == null) { | 175 | if (hpi == null) { |
| 175 | throw exception(PROCESS_INSTANCE_NOT_EXISTS); | 176 | throw exception(PROCESS_INSTANCE_NOT_EXISTS); |
| 176 | } | 177 | } |
| 178 | + // 如果有结束时间 返回model的流程图 | ||
| 179 | + if (!ObjectUtils.isEmpty(hpi.getEndTime())) { | ||
| 180 | + ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionId(hpi.getProcessDefinitionId()).singleResult(); | ||
| 181 | + String resourceName = Optional.ofNullable(pd.getDiagramResourceName()).orElse(pd.getResourceName()); | ||
| 182 | + BpmnModel bpmnModel = repositoryService.getBpmnModel(pd.getId()); | ||
| 183 | + InputStream inputStream = processDiagramGenerator.generateDiagram(bpmnModel, new ArrayList<>(1), new ArrayList<>(1), | ||
| 184 | + "宋体", "宋体", "宋体"); | ||
| 185 | + FileResp fileResp = new FileResp(); | ||
| 186 | + fileResp.setFileName( resourceName + ".svg"); | ||
| 187 | + fileResp.setFileByte(IoUtil.readBytes(inputStream)); | ||
| 188 | + return fileResp; | ||
| 189 | + } | ||
| 177 | // 没有结束时间。说明流程在执行过程中 | 190 | // 没有结束时间。说明流程在执行过程中 |
| 178 | // TODO @Li:一些 runtimeService 的查询,貌似比较通用,是不是抽一些小方法出来 | 191 | // TODO @Li:一些 runtimeService 的查询,貌似比较通用,是不是抽一些小方法出来 |
| 179 | ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); | 192 | ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); |
| @@ -195,13 +208,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -195,13 +208,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 195 | try (InputStream inputStream = processDiagramGenerator.generateDiagram(bpmnModel, highLightedActivities, highLightedFlowIds, | 208 | try (InputStream inputStream = processDiagramGenerator.generateDiagram(bpmnModel, highLightedActivities, highLightedFlowIds, |
| 196 | "宋体", "宋体", "宋体")){ | 209 | "宋体", "宋体", "宋体")){ |
| 197 | FileResp fileResp = new FileResp(); | 210 | FileResp fileResp = new FileResp(); |
| 198 | - String picName = hpi.getProcessDefinitionName() + ".svg"; // TODO @Li:一次性的变量,可以直接 set 的时候,直接拼接 | ||
| 199 | - fileResp.setFileName(picName); | 211 | + fileResp.setFileName( hpi.getProcessDefinitionName() + ".svg"); |
| 200 | fileResp.setFileByte(IoUtil.readBytes(inputStream)); | 212 | fileResp.setFileByte(IoUtil.readBytes(inputStream)); |
| 201 | return fileResp; | 213 | return fileResp; |
| 202 | } catch (IOException e) { | 214 | } catch (IOException e) { |
| 203 | - // TODO @Li:log.error("[getHighlightImg][流程({}) 生成图表失败]", processInstanceId, e) | ||
| 204 | - log.error(ExceptionUtils.getStackTrace(e)); | 215 | + log.error("[getHighlightImg][流程({}) 生成图表失败]", processInstanceId, e); |
| 205 | throw exception(HIGHLIGHT_IMG_ERROR); | 216 | throw exception(HIGHLIGHT_IMG_ERROR); |
| 206 | } | 217 | } |
| 207 | } | 218 | } |
yudao-admin-ui/src/api/oa/todo.js
| @@ -85,7 +85,7 @@ export function processHistorySteps(id) { | @@ -85,7 +85,7 @@ export function processHistorySteps(id) { | ||
| 85 | 85 | ||
| 86 | export function getHighlightImg(id) { | 86 | export function getHighlightImg(id) { |
| 87 | return request({ | 87 | return request({ |
| 88 | - url: '/workflow/task/process/highlight-img/'+id, | 88 | + url: '/workflow/task/process/highlight-img?processInstanceId='+id, |
| 89 | method: 'get' | 89 | method: 'get' |
| 90 | }) | 90 | }) |
| 91 | } | 91 | } |