mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-11-27 01:32:03 +08:00
工作流的 code review
This commit is contained in:
parent
848913bf2f
commit
e969dbe8b7
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow;
|
package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow;
|
||||||
|
|
||||||
|
import cn.hutool.core.io.IoUtil;
|
||||||
import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.*;
|
import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.*;
|
||||||
import cn.iocoder.yudao.adminserver.modules.bpm.service.workflow.TaskService;
|
import cn.iocoder.yudao.adminserver.modules.bpm.service.workflow.TaskService;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
@ -60,6 +61,7 @@ public class TaskController {
|
|||||||
return success(taskService.getHistorySteps(processInstanceId));
|
return success(taskService.getHistorySteps(processInstanceId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO @Li: 项目里,暂时不使用 path 路径参数,监控等麻烦
|
||||||
/**
|
/**
|
||||||
* 返回高亮的流转图SVG
|
* 返回高亮的流转图SVG
|
||||||
* @param processInstanceId
|
* @param processInstanceId
|
||||||
@ -70,6 +72,4 @@ public class TaskController {
|
|||||||
ServletUtils.writeAttachment(response, fileResp.getFileName(), fileResp.getFileByte());
|
ServletUtils.writeAttachment(response, fileResp.getFileName(), fileResp.getFileByte());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,12 +2,15 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo;
|
|||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
// TODO @Li:1)改成 HighlightImgRespVO 吧。2)swagger 注解要补充;3)fileByte => fileContent
|
||||||
/**
|
/**
|
||||||
* 文件输出类
|
* 文件输出类
|
||||||
|
*
|
||||||
* @author yunlongn
|
* @author yunlongn
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class FileResp {
|
public class FileResp {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文件名字
|
* 文件名字
|
||||||
*/
|
*/
|
||||||
@ -17,4 +20,5 @@ public class FileResp {
|
|||||||
* 文件输出流
|
* 文件输出流
|
||||||
*/
|
*/
|
||||||
private byte[] fileByte;
|
private byte[] fileByte;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package cn.iocoder.yudao.adminserver.modules.bpm.enums.oa;
|
package cn.iocoder.yudao.adminserver.modules.bpm.enums.oa;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
|
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
|
||||||
|
|
||||||
|
// TODO @jason:错误码整理下,和其它模块保持一致。包括前缀
|
||||||
/**
|
/**
|
||||||
* activiti 系统 错误码枚举类
|
* activiti 系统 错误码枚举类
|
||||||
*
|
*
|
||||||
@ -9,6 +11,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
|
|||||||
* activiti 系统,使用 1-003-000-000 段
|
* activiti 系统,使用 1-003-000-000 段
|
||||||
*/
|
*/
|
||||||
public interface OAErrorCodeConstants {
|
public interface OAErrorCodeConstants {
|
||||||
|
|
||||||
ErrorCode LEAVE_NOT_EXISTS = new ErrorCode(1003001001, "请假申请不存在");
|
ErrorCode LEAVE_NOT_EXISTS = new ErrorCode(1003001001, "请假申请不存在");
|
||||||
ErrorCode PM_POST_NOT_EXISTS = new ErrorCode(1003001002, "项目经理岗位未设置");
|
ErrorCode PM_POST_NOT_EXISTS = new ErrorCode(1003001002, "项目经理岗位未设置");
|
||||||
ErrorCode DEPART_PM_POST_NOT_EXISTS = new ErrorCode(1003001003, "部门的项目经理不存在");
|
ErrorCode DEPART_PM_POST_NOT_EXISTS = new ErrorCode(1003001003, "部门的项目经理不存在");
|
||||||
@ -19,4 +22,5 @@ public interface OAErrorCodeConstants {
|
|||||||
|
|
||||||
ErrorCode PROCESS_INSTANCE_NOT_EXISTS = new ErrorCode(1003001008, "流程实例不存在");
|
ErrorCode PROCESS_INSTANCE_NOT_EXISTS = new ErrorCode(1003001008, "流程实例不存在");
|
||||||
ErrorCode HIGHLIGHT_IMG_ERROR = new ErrorCode(1003001009, "获取高亮流程图异常");
|
ErrorCode HIGHLIGHT_IMG_ERROR = new ErrorCode(1003001009, "获取高亮流程图异常");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@ import cn.hutool.core.io.IoUtil;
|
|||||||
import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.*;
|
import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.*;
|
||||||
import cn.iocoder.yudao.adminserver.modules.bpm.convert.workflow.TaskConvert;
|
import cn.iocoder.yudao.adminserver.modules.bpm.convert.workflow.TaskConvert;
|
||||||
import cn.iocoder.yudao.adminserver.modules.bpm.service.workflow.TaskService;
|
import cn.iocoder.yudao.adminserver.modules.bpm.service.workflow.TaskService;
|
||||||
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
@ -33,17 +32,18 @@ import org.apache.commons.lang3.exception.ExceptionUtils;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.URLEncoder;
|
import java.util.ArrayList;
|
||||||
import java.util.*;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.adminserver.modules.bpm.enums.oa.OAErrorCodeConstants.*;
|
import static cn.iocoder.yudao.adminserver.modules.bpm.enums.oa.OAErrorCodeConstants.HIGHLIGHT_IMG_ERROR;
|
||||||
|
import static cn.iocoder.yudao.adminserver.modules.bpm.enums.oa.OAErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS;
|
||||||
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
@ -166,7 +166,7 @@ public class TaskServiceImpl implements TaskService {
|
|||||||
@Override
|
@Override
|
||||||
public TodoTaskRespVO getTaskFormKey(TaskQueryReqVO taskQuery) {
|
public TodoTaskRespVO getTaskFormKey(TaskQueryReqVO taskQuery) {
|
||||||
final Task task = taskRuntime.task(taskQuery.getTaskId());
|
final Task task = taskRuntime.task(taskQuery.getTaskId());
|
||||||
// 转换结果
|
// 转换结果 TODO @jason:放到 convert 类里
|
||||||
TodoTaskRespVO respVO = new TodoTaskRespVO();
|
TodoTaskRespVO respVO = new TodoTaskRespVO();
|
||||||
respVO.setFormKey(task.getFormKey());
|
respVO.setFormKey(task.getFormKey());
|
||||||
respVO.setBusinessKey(task.getBusinessKey());
|
respVO.setBusinessKey(task.getBusinessKey());
|
||||||
@ -175,7 +175,6 @@ public class TaskServiceImpl implements TaskService {
|
|||||||
return respVO;
|
return respVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FileResp getHighlightImg(String processInstanceId) {
|
public FileResp getHighlightImg(String processInstanceId) {
|
||||||
// 查询历史
|
// 查询历史
|
||||||
@ -184,7 +183,7 @@ public class TaskServiceImpl implements TaskService {
|
|||||||
HistoricProcessInstance hpi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
|
HistoricProcessInstance hpi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
|
||||||
// 如果不存在实例。 说明数据异常
|
// 如果不存在实例。 说明数据异常
|
||||||
if (hpi == null) {
|
if (hpi == null) {
|
||||||
throw ServiceExceptionUtil.exception(PROCESS_INSTANCE_NOT_EXISTS);
|
throw exception(PROCESS_INSTANCE_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
// 没有结束时间。说明流程在执行过程中
|
// 没有结束时间。说明流程在执行过程中
|
||||||
// TODO @Li:一些 runtimeService 的查询,貌似比较通用,是不是抽一些小方法出来
|
// TODO @Li:一些 runtimeService 的查询,貌似比较通用,是不是抽一些小方法出来
|
||||||
@ -194,9 +193,7 @@ public class TaskServiceImpl implements TaskService {
|
|||||||
// 获取所有活动节点
|
// 获取所有活动节点
|
||||||
List<HistoricActivityInstance> finishedInstances = historyService.createHistoricActivityInstanceQuery()
|
List<HistoricActivityInstance> finishedInstances = historyService.createHistoricActivityInstanceQuery()
|
||||||
.processInstanceId(processInstanceId).finished().list();
|
.processInstanceId(processInstanceId).finished().list();
|
||||||
// TODO @Li:highLightedActivities 结果,可以使用 CollUtils.buildList() 方法。即使不用,也应该用 stream。简洁很重要。
|
finishedInstances.stream().map(HistoricActivityInstance::getActivityId)
|
||||||
finishedInstances.stream()
|
|
||||||
.map(HistoricActivityInstance::getActivityId)
|
|
||||||
.forEach(highLightedActivities::add);
|
.forEach(highLightedActivities::add);
|
||||||
// 已完成的节点+当前节点
|
// 已完成的节点+当前节点
|
||||||
highLightedActivities.addAll(runtimeService.getActiveActivityIds(processInstanceId));
|
highLightedActivities.addAll(runtimeService.getActiveActivityIds(processInstanceId));
|
||||||
@ -209,13 +206,14 @@ public class TaskServiceImpl implements TaskService {
|
|||||||
try (InputStream inputStream = processDiagramGenerator.generateDiagram(bpmnModel, highLightedActivities, highLightedFlowIds,
|
try (InputStream inputStream = processDiagramGenerator.generateDiagram(bpmnModel, highLightedActivities, highLightedFlowIds,
|
||||||
"宋体", "宋体", "宋体")){
|
"宋体", "宋体", "宋体")){
|
||||||
FileResp fileResp = new FileResp();
|
FileResp fileResp = new FileResp();
|
||||||
String picName = hpi.getProcessDefinitionName() + ".svg";
|
String picName = hpi.getProcessDefinitionName() + ".svg"; // TODO @Li:一次性的变量,可以直接 set 的时候,直接拼接
|
||||||
fileResp.setFileName(picName);
|
fileResp.setFileName(picName);
|
||||||
fileResp.setFileByte(IoUtil.readBytes(inputStream));
|
fileResp.setFileByte(IoUtil.readBytes(inputStream));
|
||||||
return fileResp;
|
return fileResp;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
// TODO @Li:log.error("[getHighlightImg][流程({}) 生成图表失败]", processInstanceId, e)
|
||||||
log.error(ExceptionUtils.getStackTrace(e));
|
log.error(ExceptionUtils.getStackTrace(e));
|
||||||
throw ServiceExceptionUtil.exception(HIGHLIGHT_IMG_ERROR);
|
throw exception(HIGHLIGHT_IMG_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package cn.iocoder.yudao.framework.activiti.config;
|
package cn.iocoder.yudao.framework.activiti.config;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import org.activiti.api.runtime.shared.identity.UserGroupManager;
|
|
||||||
import org.activiti.image.ProcessDiagramGenerator;
|
import org.activiti.image.ProcessDiagramGenerator;
|
||||||
import org.activiti.image.impl.DefaultProcessDiagramGenerator;
|
import org.activiti.image.impl.DefaultProcessDiagramGenerator;
|
||||||
import org.activiti.spring.SpringProcessEngineConfiguration;
|
import org.activiti.spring.SpringProcessEngineConfiguration;
|
||||||
@ -14,10 +13,8 @@ import org.springframework.stereotype.Component;
|
|||||||
@Configuration
|
@Configuration
|
||||||
public class YudaoActivitiConfiguration {
|
public class YudaoActivitiConfiguration {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程中生成基于图表交换信息的 svg 的类。 提供绘制方法
|
* Activiti 流程图的生成器。目前管理后台的流程图 svg,通过它绘制生成。
|
||||||
* @return ProcessDiagramGenerator
|
|
||||||
*/
|
*/
|
||||||
@Bean
|
@Bean
|
||||||
public ProcessDiagramGenerator processDiagramGenerator() {
|
public ProcessDiagramGenerator processDiagramGenerator() {
|
||||||
|
Loading…
Reference in New Issue
Block a user