Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
计算机应用开发
后
后端
J
Java
后台管理
Ruoyi Vue Pro
提交
e969dbe8
R
Ruoyi Vue Pro
项目概览
计算机应用开发
/
后端
/
Java
/
后台管理
/
Ruoyi Vue Pro
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Ruoyi Vue Pro
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e969dbe8
编写于
11月 10, 2021
作者:
公众号-芋道源码
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
工作流的 code review
上级
848913bf
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
25 addition
and
22 deletion
+25
-22
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/TaskController.java
...erver/modules/bpm/controller/workflow/TaskController.java
+2
-2
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/FileResp.java
...inserver/modules/bpm/controller/workflow/vo/FileResp.java
+4
-0
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/oa/OAErrorCodeConstants.java
...dminserver/modules/bpm/enums/oa/OAErrorCodeConstants.java
+4
-0
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/workflow/impl/TaskServiceImpl.java
...er/modules/bpm/service/workflow/impl/TaskServiceImpl.java
+13
-15
yudao-framework/yudao-spring-boot-starter-activiti/src/main/java/cn/iocoder/yudao/framework/activiti/config/YudaoActivitiConfiguration.java
...framework/activiti/config/YudaoActivitiConfiguration.java
+2
-5
未找到文件。
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/TaskController.java
浏览文件 @
e969dbe8
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 {
...
@@ -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 {
...
@@ -70,6 +72,4 @@ public class TaskController {
ServletUtils
.
writeAttachment
(
response
,
fileResp
.
getFileName
(),
fileResp
.
getFileByte
());
ServletUtils
.
writeAttachment
(
response
,
fileResp
.
getFileName
(),
fileResp
.
getFileByte
());
}
}
}
}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/FileResp.java
浏览文件 @
e969dbe8
...
@@ -2,12 +2,15 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo;
...
@@ -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 {
...
@@ -17,4 +20,5 @@ public class FileResp {
* 文件输出流
* 文件输出流
*/
*/
private
byte
[]
fileByte
;
private
byte
[]
fileByte
;
}
}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/oa/OAErrorCodeConstants.java
浏览文件 @
e969dbe8
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;
...
@@ -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 {
...
@@ -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
,
"获取高亮流程图异常"
);
}
}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/workflow/impl/TaskServiceImpl.java
浏览文件 @
e969dbe8
...
@@ -5,7 +5,6 @@ import cn.hutool.core.io.IoUtil;
...
@@ -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;
...
@@ -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 {
...
@@ -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 {
...
@@ -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 {
...
@@ -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 {
...
@@ -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 {
...
@@ -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
);
}
}
}
}
...
...
yudao-framework/yudao-spring-boot-starter-activiti/src/main/java/cn/iocoder/yudao/framework/activiti/config/YudaoActivitiConfiguration.java
浏览文件 @
e969dbe8
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,13 +13,11 @@ import org.springframework.stereotype.Component;
...
@@ -14,13 +13,11 @@ 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
()
{
return
new
DefaultProcessDiagramGenerator
();
return
new
DefaultProcessDiagramGenerator
();
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录