Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
项目统一框架
amos-boot-biz
Commits
3f2daf47
Commit
3f2daf47
authored
Sep 24, 2021
by
chenhao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改工作流执行权限校验的方法
parent
b16a9093
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
57 additions
and
40 deletions
+57
-40
IWorkflowExcuteService.java
.../amos/boot/biz/common/service/IWorkflowExcuteService.java
+5
-3
WorkflowExcuteServiceImpl.java
...ot/biz/common/service/impl/WorkflowExcuteServiceImpl.java
+52
-37
No files found.
amos-boot-biz-common/src/main/java/com/yeejoin/amos/boot/biz/common/service/IWorkflowExcuteService.java
View file @
3f2daf47
...
...
@@ -2,6 +2,8 @@ package com.yeejoin.amos.boot.biz.common.service;
import
java.util.Map
;
import
com.yeejoin.amos.boot.biz.common.bo.ReginParams
;
public
interface
IWorkflowExcuteService
{
/**
...
...
@@ -16,14 +18,14 @@ public interface IWorkflowExcuteService{
* @param processInstanceId 流程定义的ID
* @return true 可以执行,false 无执行权限
*/
boolean
checkTaskAuth
(
String
processInstanceId
);
boolean
checkTaskAuth
(
String
processInstanceId
,
ReginParams
userInfo
);
/**
* 检查当前登录人有没有流程操作权限
* @param processInstanceId 流程定义的ID
* @return 包含是否执行的角色权限flag,以及当前任务的id
*/
Map
<
String
,
Object
>
checkTaskAuthMap
(
String
processInstanceId
);
Map
<
String
,
Object
>
checkTaskAuthMap
(
String
processInstanceId
,
ReginParams
userInfo
);
/**
* 设置当前任务的执行人,只支持当前节点流程拥有单个可执行任务的情况,不支持并行网关产生的多条任务设置人的任务情况
* @param processInstanceId
...
...
@@ -37,7 +39,7 @@ public interface IWorkflowExcuteService{
* @param userInfo
* @return
*/
boolean
CompleteTask
(
String
processInstanceId
,
String
condition
);
boolean
CompleteTask
(
String
processInstanceId
,
String
condition
,
ReginParams
userInfo
);
}
amos-boot-biz-common/src/main/java/com/yeejoin/amos/boot/biz/common/service/impl/WorkflowExcuteServiceImpl.java
View file @
3f2daf47
...
...
@@ -7,15 +7,19 @@ import java.util.Map;
import
java.util.Random
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.yeejoin.amos.boot.biz.common.bo.ReginParams
;
import
com.yeejoin.amos.boot.biz.common.service.IWorkflowExcuteService
;
import
com.yeejoin.amos.boot.biz.common.workflow.feign.WorkflowFeignService
;
import
ch.qos.logback.core.joran.conditional.IfAction
;
@Service
public
class
WorkflowExcuteServiceImpl
implements
IWorkflowExcuteService
{
...
...
@@ -43,49 +47,60 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService {
}
@Override
public
boolean
checkTaskAuth
(
String
processInstanceId
)
{
Map
<
String
,
Object
>
map
=
checkTaskAuthMap
(
processInstanceId
);
public
boolean
checkTaskAuth
(
String
processInstanceId
,
ReginParams
userInfo
)
{
Map
<
String
,
Object
>
map
=
checkTaskAuthMap
(
processInstanceId
,
userInfo
);
return
Boolean
.
parseBoolean
(
map
.
get
(
"checkFlag"
).
toString
());
}
@Override
public
Map
<
String
,
Object
>
checkTaskAuthMap
(
String
processInstanceId
)
{
public
Map
<
String
,
Object
>
checkTaskAuthMap
(
String
processInstanceId
,
ReginParams
userInfo
)
{
// 获取当前登录用户的角色
String
currentLoginUserRole
=
userInfo
.
getRole
().
getRoleName
();
String
currentLoginUserId
=
userInfo
.
getUserModel
().
getUserId
();
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
map
.
put
(
"checkFlag"
,
false
);
JSONObject
teskObject
=
workflowFeignService
.
getTask
(
processInstanceId
);
if
(
ObjectUtils
.
isNotEmpty
(
teskObject
.
getJSONObject
(
"data"
)))
{
map
.
put
(
"taskId"
,
teskObject
.
getJSONObject
(
"data"
).
getString
(
"id"
));
map
.
put
(
"checkFlag"
,
true
);
map
.
put
(
"name"
,
teskObject
.
getJSONObject
(
"data"
).
getString
(
"name"
));
JSONObject
teskObject
=
workflowFeignService
.
getTaskList
(
processInstanceId
);
if
(
ObjectUtils
.
isNotEmpty
(
teskObject
))
{
JSONArray
taskDetailArray
=
teskObject
.
getJSONArray
(
"data"
);
for
(
Object
obj
:
taskDetailArray
)
{
JSONObject
detail
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
obj
));
if
(
"制定计划+内容"
.
equals
(
detail
.
getString
(
"name"
))
||
"现场确认"
.
equals
(
detail
.
getString
(
"name"
))
)
{
map
.
put
(
"taskId"
,
detail
.
getString
(
"id"
));
map
.
put
(
"checkFlag"
,
true
);
map
.
put
(
"name"
,
detail
.
getString
(
"name"
));
return
map
;
}
JSONObject
taskGroupNameObject
=
workflowFeignService
.
getTaskGroupName
(
detail
.
getString
(
"id"
));
// 获取流程中原本设置的当前节点的执行权限
JSONArray
taskGroupNameDetail
=
taskGroupNameObject
.
getJSONArray
(
"data"
);
// 如果拿不到当前任务的执行角色,再去获取当前任务有没有默认的执行人,如果都没有则返回校验失败
if
(
ObjectUtils
.
isEmpty
(
taskGroupNameDetail
))
{
JSONObject
taskAssignObject
=
workflowFeignService
.
getTaskAssign
(
detail
.
getString
(
"id"
));
String
assignUser
=
taskAssignObject
.
getJSONObject
(
"data"
).
getString
(
"assignee"
);
if
(
StringUtils
.
isNotBlank
(
assignUser
))
{
// 如果当前登录人与当前任务的设定人不一定,则直接返回权限校验失败
if
(!
currentLoginUserId
.
equals
(
assignUser
))
{
return
map
;
}
map
.
put
(
"taskId"
,
detail
.
getString
(
"id"
));
map
.
put
(
"checkFlag"
,
true
);
map
.
put
(
"name"
,
detail
.
getString
(
"name"
));
map
.
put
(
"assign"
,
assignUser
);
return
map
;
}
continue
;
}
String
defaultExecutionRoleProcess
=
taskGroupNameDetail
.
getJSONObject
(
0
).
getString
(
"groupId"
);
// 判断当前登录人的角色是不是与流程中设置的当前任务节点权限一致,一致则执行,不一致则退出
if
(!
defaultExecutionRoleProcess
.
equals
(
currentLoginUserRole
))
{
continue
;
}
map
.
put
(
"taskId"
,
detail
.
getString
(
"id"
));
map
.
put
(
"checkFlag"
,
true
);
map
.
put
(
"name"
,
detail
.
getString
(
"name"
));
map
.
put
(
"groupName"
,
currentLoginUserRole
);
}
}
/*
* JSONObject teskObject = workflowFeignService.getTaskList(processInstanceId);
* if (ObjectUtils.isNotEmpty(teskObject)) { JSONArray taskDetailArray =
* teskObject.getJSONArray("data"); for (Object obj : taskDetailArray) {
* JSONObject detail = JSONObject.parseObject(JSONObject.toJSONString(obj));
* JSONObject taskGroupNameObject =
* workflowFeignService.getTaskGroupName(detail.getString("id")); //
* 获取流程中原本设置的当前节点的执行权限 JSONArray taskGroupNameDetail =
* taskGroupNameObject.getJSONArray("data"); //
* 如果拿不到当前任务的执行角色,再去获取当前任务有没有默认的执行人,如果都没有则返回校验失败 if
* (ObjectUtils.isEmpty(taskGroupNameDetail)) { JSONObject taskAssignObject =
* workflowFeignService.getTaskAssign(detail.getString("id")); String assignUser
* = taskAssignObject.getJSONObject("data").getString("assignee"); if
* (StringUtils.isNotBlank(assignUser)) { // 如果当前登录人与当前任务的设定人不一定,则直接返回权限校验失败 if
* (!currentLoginUserId.equals(assignUser)) { return map; } else {
* map.put("taskId", detail.getString("id")); map.put("checkFlag", true);
* map.put("name", detail.getString("name")); map.put("assign", assignUser);
* return map; } } continue; } String defaultExecutionRoleProcess =
* taskGroupNameDetail.getJSONObject(0).getString("groupId"); //
* 判断当前登录人的角色是不是与流程中设置的当前任务节点权限一致,一致则执行,不一致则退出 if
* (!defaultExecutionRoleProcess.equals(currentLoginUserRole)) { continue; }
* map.put("taskId", detail.getString("id")); map.put("checkFlag", true);
* map.put("name", detail.getString("name"));
* map.put("groupName",currentLoginUserRole); } }
*/
return
map
;
}
...
...
@@ -126,8 +141,8 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService {
}
@Override
public
boolean
CompleteTask
(
String
processInstanceId
,
String
condition
)
{
Map
<
String
,
Object
>
map
=
checkTaskAuthMap
(
processInstanceId
);
public
boolean
CompleteTask
(
String
processInstanceId
,
String
condition
,
ReginParams
userInfo
)
{
Map
<
String
,
Object
>
map
=
checkTaskAuthMap
(
processInstanceId
,
userInfo
);
if
(
Boolean
.
parseBoolean
(
map
.
get
(
"checkFlag"
).
toString
()))
{
HashMap
<
String
,
Object
>
conditionMap
=
new
HashMap
<
String
,
Object
>();
conditionMap
.
put
(
"condition"
,
condition
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment