Commit e969dbe8b74a770828c4c9b6ec69ac6ceb05d120

Authored by YunaiV
1 parent 848913bf

工作流的 code review

yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/TaskController.java
1 1 package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow;
2 2  
  3 +import cn.hutool.core.io.IoUtil;
3 4 import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.*;
4 5 import cn.iocoder.yudao.adminserver.modules.bpm.service.workflow.TaskService;
5 6 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
... ... @@ -60,6 +61,7 @@ public class TaskController {
60 61 return success(taskService.getHistorySteps(processInstanceId));
61 62 }
62 63  
  64 + // TODO @Li: 项目里,暂时不使用 path 路径参数,监控等麻烦
63 65 /**
64 66 * 返回高亮的流转图SVG
65 67 * @param processInstanceId
... ... @@ -70,6 +72,4 @@ public class TaskController {
70 72 ServletUtils.writeAttachment(response, fileResp.getFileName(), fileResp.getFileByte());
71 73 }
72 74  
73   -
74   -
75 75 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/FileResp.java
... ... @@ -2,12 +2,15 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo;
2 2  
3 3 import lombok.Data;
4 4  
  5 +// TODO @Li:1)改成 HighlightImgRespVO 吧。2)swagger 注解要补充;3)fileByte => fileContent
5 6 /**
6 7 * 文件输出类
  8 + *
7 9 * @author yunlongn
8 10 */
9 11 @Data
10 12 public class FileResp {
  13 +
11 14 /**
12 15 * 文件名字
13 16 */
... ... @@ -17,4 +20,5 @@ public class FileResp {
17 20 * 文件输出流
18 21 */
19 22 private byte[] fileByte;
  23 +
20 24 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/oa/OAErrorCodeConstants.java
1 1 package cn.iocoder.yudao.adminserver.modules.bpm.enums.oa;
2 2  
3 3 import cn.iocoder.yudao.framework.common.exception.ErrorCode;
  4 +
  5 +// TODO @jason:错误码整理下,和其它模块保持一致。包括前缀
4 6 /**
5 7 * activiti 系统 错误码枚举类
6 8 *
... ... @@ -9,6 +11,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
9 11 * activiti 系统,使用 1-003-000-000 段
10 12 */
11 13 public interface OAErrorCodeConstants {
  14 +
12 15 ErrorCode LEAVE_NOT_EXISTS = new ErrorCode(1003001001, "请假申请不存在");
13 16 ErrorCode PM_POST_NOT_EXISTS = new ErrorCode(1003001002, "项目经理岗位未设置");
14 17 ErrorCode DEPART_PM_POST_NOT_EXISTS = new ErrorCode(1003001003, "部门的项目经理不存在");
... ... @@ -19,4 +22,5 @@ public interface OAErrorCodeConstants {
19 22  
20 23 ErrorCode PROCESS_INSTANCE_NOT_EXISTS = new ErrorCode(1003001008, "流程实例不存在");
21 24 ErrorCode HIGHLIGHT_IMG_ERROR = new ErrorCode(1003001009, "获取高亮流程图异常");
  25 +
22 26 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/workflow/impl/TaskServiceImpl.java
... ... @@ -5,7 +5,6 @@ import cn.hutool.core.io.IoUtil;
5 5 import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.*;
6 6 import cn.iocoder.yudao.adminserver.modules.bpm.convert.workflow.TaskConvert;
7 7 import cn.iocoder.yudao.adminserver.modules.bpm.service.workflow.TaskService;
8   -import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
9 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
10 9 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
11 10 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
... ... @@ -33,17 +32,18 @@ import org.apache.commons.lang3.exception.ExceptionUtils;
33 32 import org.springframework.stereotype.Service;
34 33 import org.springframework.transaction.annotation.Transactional;
35 34  
36   -
37 35 import javax.annotation.Resource;
38   -import javax.servlet.http.HttpServletResponse;
39   -import java.io.ByteArrayOutputStream;
40 36 import java.io.IOException;
41 37 import java.io.InputStream;
42   -import java.net.URLEncoder;
43   -import java.util.*;
  38 +import java.util.ArrayList;
  39 +import java.util.List;
  40 +import java.util.Map;
  41 +import java.util.Optional;
44 42 import java.util.stream.Collectors;
45 43  
46   -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.oa.OAErrorCodeConstants.*;
  44 +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.oa.OAErrorCodeConstants.HIGHLIGHT_IMG_ERROR;
  45 +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.oa.OAErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS;
  46 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
47 47  
48 48 @Slf4j
49 49 @Service
... ... @@ -166,7 +166,7 @@ public class TaskServiceImpl implements TaskService {
166 166 @Override
167 167 public TodoTaskRespVO getTaskFormKey(TaskQueryReqVO taskQuery) {
168 168 final Task task = taskRuntime.task(taskQuery.getTaskId());
169   - // 转换结果
  169 + // 转换结果 TODO @jason:放到 convert 类里
170 170 TodoTaskRespVO respVO = new TodoTaskRespVO();
171 171 respVO.setFormKey(task.getFormKey());
172 172 respVO.setBusinessKey(task.getBusinessKey());
... ... @@ -175,7 +175,6 @@ public class TaskServiceImpl implements TaskService {
175 175 return respVO;
176 176 }
177 177  
178   -
179 178 @Override
180 179 public FileResp getHighlightImg(String processInstanceId) {
181 180 // 查询历史
... ... @@ -184,7 +183,7 @@ public class TaskServiceImpl implements TaskService {
184 183 HistoricProcessInstance hpi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
185 184 // 如果不存在实例。 说明数据异常
186 185 if (hpi == null) {
187   - throw ServiceExceptionUtil.exception(PROCESS_INSTANCE_NOT_EXISTS);
  186 + throw exception(PROCESS_INSTANCE_NOT_EXISTS);
188 187 }
189 188 // 没有结束时间。说明流程在执行过程中
190 189 // TODO @Li:一些 runtimeService 的查询,貌似比较通用,是不是抽一些小方法出来
... ... @@ -194,9 +193,7 @@ public class TaskServiceImpl implements TaskService {
194 193 // 获取所有活动节点
195 194 List<HistoricActivityInstance> finishedInstances = historyService.createHistoricActivityInstanceQuery()
196 195 .processInstanceId(processInstanceId).finished().list();
197   - // TODO @Li:highLightedActivities 结果,可以使用 CollUtils.buildList() 方法。即使不用,也应该用 stream。简洁很重要。
198   - finishedInstances.stream()
199   - .map(HistoricActivityInstance::getActivityId)
  196 + finishedInstances.stream().map(HistoricActivityInstance::getActivityId)
200 197 .forEach(highLightedActivities::add);
201 198 // 已完成的节点+当前节点
202 199 highLightedActivities.addAll(runtimeService.getActiveActivityIds(processInstanceId));
... ... @@ -209,13 +206,14 @@ public class TaskServiceImpl implements TaskService {
209 206 try (InputStream inputStream = processDiagramGenerator.generateDiagram(bpmnModel, highLightedActivities, highLightedFlowIds,
210 207 "宋体", "宋体", "宋体")){
211 208 FileResp fileResp = new FileResp();
212   - String picName = hpi.getProcessDefinitionName() + ".svg";
  209 + String picName = hpi.getProcessDefinitionName() + ".svg"; // TODO @Li:一次性的变量,可以直接 set 的时候,直接拼接
213 210 fileResp.setFileName(picName);
214 211 fileResp.setFileByte(IoUtil.readBytes(inputStream));
215 212 return fileResp;
216 213 } catch (IOException e) {
  214 + // TODO @Li:log.error("[getHighlightImg][流程({}) 生成图表失败]", processInstanceId, e)
217 215 log.error(ExceptionUtils.getStackTrace(e));
218   - throw ServiceExceptionUtil.exception(HIGHLIGHT_IMG_ERROR);
  216 + throw exception(HIGHLIGHT_IMG_ERROR);
219 217 }
220 218 }
221 219  
... ...
yudao-framework/yudao-spring-boot-starter-activiti/src/main/java/cn/iocoder/yudao/framework/activiti/config/YudaoActivitiConfiguration.java
1 1 package cn.iocoder.yudao.framework.activiti.config;
2 2  
3 3 import lombok.AllArgsConstructor;
4   -import org.activiti.api.runtime.shared.identity.UserGroupManager;
5 4 import org.activiti.image.ProcessDiagramGenerator;
6 5 import org.activiti.image.impl.DefaultProcessDiagramGenerator;
7 6 import org.activiti.spring.SpringProcessEngineConfiguration;
... ... @@ -14,13 +13,11 @@ import org.springframework.stereotype.Component;
14 13 @Configuration
15 14 public class YudaoActivitiConfiguration {
16 15  
17   -
18 16 /**
19   - * 流程中生成基于图表交换信息的 svg 的类。 提供绘制方法
20   - * @return ProcessDiagramGenerator
  17 + * Activiti 流程图的生成器。目前管理后台的流程图 svg,通过它绘制生成。
21 18 */
22 19 @Bean
23   - public ProcessDiagramGenerator processDiagramGenerator (){
  20 + public ProcessDiagramGenerator processDiagramGenerator() {
24 21 return new DefaultProcessDiagramGenerator();
25 22 }
26 23  
... ...