Commit 04c5f577 authored by chenhao's avatar chenhao

添加查询当前登录用户所能执行的所有任务列表

parent cca8a9b0
...@@ -17,6 +17,7 @@ public enum WorkFlowEnum { ...@@ -17,6 +17,7 @@ public enum WorkFlowEnum {
GROUPID("groupId","角色组的key"), GROUPID("groupId","角色组的key"),
GROUPNAME("groupName","角色组的key"), GROUPNAME("groupName","角色组的key"),
NAME("name","任务节点的key"), NAME("name","任务节点的key"),
PROCESSINSTANCEID("processInstanceId",""),
ASSIGN("assign","角色执行人key"); ASSIGN("assign","角色执行人key");
private String code;//对应菜单组件名称 private String code;//对应菜单组件名称
......
...@@ -51,5 +51,14 @@ public interface IWorkflowExcuteService{ ...@@ -51,5 +51,14 @@ public interface IWorkflowExcuteService{
*/ */
boolean excuteTask(String procressId, String condition) throws Exception; boolean excuteTask(String procressId, String condition) throws Exception;
/**
* 获取当前登录用户所能执行的任务信息列表
* @param key 流程定义的key ,例如 :fire_supervision 防火监督
* @param userInfo
* @return List<map<String,String>> eg: [{ "processInstanceId": "110d3af9-1f5a-11ec-a26e-b07b25133c48"}]
* @throws Exception
*/
public Object getCurrentUserAllTaskList(String key, ReginParams userInfo) throws Exception;
} }
...@@ -64,23 +64,26 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService { ...@@ -64,23 +64,26 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService {
JSONArray taskDetailArray = teskObject.getJSONArray(WorkFlowEnum.DATA.getCode()); JSONArray taskDetailArray = teskObject.getJSONArray(WorkFlowEnum.DATA.getCode());
for (Object obj : taskDetailArray) { for (Object obj : taskDetailArray) {
JSONObject detail = JSONObject.parseObject(JSONObject.toJSONString(obj)); JSONObject detail = JSONObject.parseObject(JSONObject.toJSONString(obj));
if (WorkFlowEnum.制定计划内容.getCode().equals(detail.getString(WorkFlowEnum.NAME.getCode())) || WorkFlowEnum.现场确认.getCode().equals(detail.getString(WorkFlowEnum.NAME.getCode()))) { if (WorkFlowEnum.制定计划内容.getCode().equals(detail.getString(WorkFlowEnum.NAME.getCode()))
|| WorkFlowEnum.现场确认.getCode().equals(detail.getString(WorkFlowEnum.NAME.getCode()))) {
String groupName = getFristFlowDetail(processInstanceId); String groupName = getFristFlowDetail(processInstanceId);
if (StringUtils.isBlank(groupName)) { if (StringUtils.isNotBlank(groupName) && currentLoginUserRole.equals(groupName)) {
map.put(WorkFlowEnum.TASKID.getCode(), detail.getString(WorkFlowEnum.ID.getCode()));
map.put(WorkFlowEnum.CHECKFLAG.getCode(), true);
map.put(WorkFlowEnum.NAME.getCode(), detail.getString(WorkFlowEnum.NAME.getCode()));
return map; return map;
} }
map.put(WorkFlowEnum.TASKID.getCode(), detail.getString(WorkFlowEnum.ID.getCode()));
map.put(WorkFlowEnum.CHECKFLAG.getCode(), true);
map.put(WorkFlowEnum.NAME.getCode(), detail.getString(WorkFlowEnum.NAME.getCode()));
return map;
} }
JSONObject taskGroupNameObject = workflowFeignService.getTaskGroupName(detail.getString(WorkFlowEnum.ID.getCode())); JSONObject taskGroupNameObject = workflowFeignService
.getTaskGroupName(detail.getString(WorkFlowEnum.ID.getCode()));
// 获取流程中原本设置的当前节点的执行权限 // 获取流程中原本设置的当前节点的执行权限
JSONArray taskGroupNameDetail = taskGroupNameObject.getJSONArray(WorkFlowEnum.DATA.getCode()); JSONArray taskGroupNameDetail = taskGroupNameObject.getJSONArray(WorkFlowEnum.DATA.getCode());
// 如果拿不到当前任务的执行角色,再去获取当前任务有没有默认的执行人,如果都没有则返回校验失败 // 如果拿不到当前任务的执行角色,再去获取当前任务有没有默认的执行人,如果都没有则返回校验失败
if (ObjectUtils.isEmpty(taskGroupNameDetail.getJSONObject(0))) { if (ObjectUtils.isEmpty(taskGroupNameDetail.getJSONObject(0))) {
JSONObject taskAssignObject = workflowFeignService.getTaskAssign(detail.getString(WorkFlowEnum.ID.getCode())); JSONObject taskAssignObject = workflowFeignService
String assignUser = taskAssignObject.getJSONObject(WorkFlowEnum.DATA.getCode()).getString(WorkFlowEnum.ASSIGN.getCode()); .getTaskAssign(detail.getString(WorkFlowEnum.ID.getCode()));
String assignUser = taskAssignObject.getJSONObject(WorkFlowEnum.DATA.getCode())
.getString(WorkFlowEnum.ASSIGN.getCode());
if (StringUtils.isNotBlank(assignUser)) { if (StringUtils.isNotBlank(assignUser)) {
// 如果当前登录人与当前任务的设定人不一定,则直接返回权限校验失败 // 如果当前登录人与当前任务的设定人不一定,则直接返回权限校验失败
if (!assignUser.contains(currentLoginUserId)) { if (!assignUser.contains(currentLoginUserId)) {
...@@ -94,7 +97,8 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService { ...@@ -94,7 +97,8 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService {
} }
continue; continue;
} }
String defaultExecutionRoleProcess = taskGroupNameDetail.getJSONObject(0).getString(WorkFlowEnum.GROUPID.getCode()); String defaultExecutionRoleProcess = taskGroupNameDetail.getJSONObject(0)
.getString(WorkFlowEnum.GROUPID.getCode());
// 判断当前登录人的角色是不是与流程中设置的当前任务节点权限一致,一致则执行,不一致则退出 // 判断当前登录人的角色是不是与流程中设置的当前任务节点权限一致,一致则执行,不一致则退出
if (!defaultExecutionRoleProcess.equals(currentLoginUserRole)) { if (!defaultExecutionRoleProcess.equals(currentLoginUserRole)) {
continue; continue;
...@@ -132,7 +136,8 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService { ...@@ -132,7 +136,8 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService {
JSONArray taskDetailArray = teskObject.getJSONArray(WorkFlowEnum.DATA.getCode()); JSONArray taskDetailArray = teskObject.getJSONArray(WorkFlowEnum.DATA.getCode());
for (Object obj : taskDetailArray) { for (Object obj : taskDetailArray) {
JSONObject detail = JSONObject.parseObject(JSONObject.toJSONString(obj)); JSONObject detail = JSONObject.parseObject(JSONObject.toJSONString(obj));
JSONObject taskGroupNameObject = workflowFeignService.getTaskGroupName(detail.getString(WorkFlowEnum.ID.getCode())); JSONObject taskGroupNameObject = workflowFeignService
.getTaskGroupName(detail.getString(WorkFlowEnum.ID.getCode()));
try { try {
if (taskGroupNameObject.getJSONArray(WorkFlowEnum.DATA.getCode()) == null if (taskGroupNameObject.getJSONArray(WorkFlowEnum.DATA.getCode()) == null
&& taskGroupNameObject.getJSONArray(WorkFlowEnum.DATA.getCode()).size() < 1) { && taskGroupNameObject.getJSONArray(WorkFlowEnum.DATA.getCode()).size() < 1) {
...@@ -152,7 +157,8 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService { ...@@ -152,7 +157,8 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService {
HashMap<String, Object> conditionMap = new HashMap<String, Object>(); HashMap<String, Object> conditionMap = new HashMap<String, Object>();
conditionMap.put(WorkFlowEnum.CONDITION.getCode(), condition); conditionMap.put(WorkFlowEnum.CONDITION.getCode(), condition);
try { try {
workflowFeignService.pickupAndCompleteTask(map.get(WorkFlowEnum.TASKID.getCode()).toString(), conditionMap); workflowFeignService.pickupAndCompleteTask(map.get(WorkFlowEnum.TASKID.getCode()).toString(),
conditionMap);
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException("完成任务失败"); throw new RuntimeException("完成任务失败");
} }
...@@ -188,8 +194,10 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService { ...@@ -188,8 +194,10 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService {
if (ObjectUtils.isEmpty(historyTaskJsonObject.getJSONArray(WorkFlowEnum.DATA.getCode()))) { if (ObjectUtils.isEmpty(historyTaskJsonObject.getJSONArray(WorkFlowEnum.DATA.getCode()))) {
return null; return null;
} }
JSONObject historyTaskObject = historyTaskJsonObject.getJSONArray(WorkFlowEnum.DATA.getCode()).getJSONObject(0); JSONObject historyTaskObject = historyTaskJsonObject.getJSONArray(WorkFlowEnum.DATA.getCode())
JSONObject detail = workflowFeignService.getHistoricIdentityLinksForTask(historyTaskObject.getString(WorkFlowEnum.ID.getCode())); .getJSONObject(0);
JSONObject detail = workflowFeignService
.getHistoricIdentityLinksForTask(historyTaskObject.getString(WorkFlowEnum.ID.getCode()));
JSONArray resultArray = detail.getJSONArray(WorkFlowEnum.DATA.getCode()); JSONArray resultArray = detail.getJSONArray(WorkFlowEnum.DATA.getCode());
if (ObjectUtils.isNotEmpty(resultArray)) { if (ObjectUtils.isNotEmpty(resultArray)) {
for (int i = 0; i < resultArray.size(); i++) { for (int i = 0; i < resultArray.size(); i++) {
...@@ -204,4 +212,35 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService { ...@@ -204,4 +212,35 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService {
} }
return null; return null;
} }
/**
* 获取当前登录用户所能执行的任务信息列表
* @param key
* @param userInfo
* @return List<map<String,String>> eg: [{ "processInstanceId": "110d3af9-1f5a-11ec-a26e-b07b25133c48"}]
* @throws Exception
*/
public Object getCurrentUserAllTaskList(String key, ReginParams userInfo) throws Exception {
String currentLoginUserRole = userInfo.getRole().getRoleName();
JSONObject CurrentUserAllTaskResult = null;
try {
//获取该登录用户已经分配到他名下和他对应的角色权限所能执行的任务组
CurrentUserAllTaskResult = workflowFeignService.getCurrentUserAllTaskList(key);
} catch (Exception e) {
throw new RuntimeException("获取当前角色所能执行的任务失败");
}
JSONArray allTaskResultList = CurrentUserAllTaskResult.getJSONArray(WorkFlowEnum.DATA.getCode());
//获取制定计划节点任务的所有可执行任务
JSONObject SpecifyTask = workflowFeignService.getTaskListForTaskName(WorkFlowEnum.制定计划内容.getCode(), key);
JSONArray SpecifyTaskArray = SpecifyTask.getJSONArray(WorkFlowEnum.DATA.getCode());
//判断该执行任务的历史执行节点的角色是否与当前登录用户的角色一致,如果一致就添加到根据用户角色ID和userID所属的任务列表中
SpecifyTaskArray.stream().forEach(i -> {
JSONObject json = JSONObject.parseObject(JSONObject.toJSONString(i));
String groupName = getFristFlowDetail(json.getString(WorkFlowEnum.PROCESSINSTANCEID.getCode()));
if (StringUtils.isNotBlank(groupName) && currentLoginUserRole.equals(groupName)) {
allTaskResultList.add(i);
}
});
return allTaskResultList;
}
} }
...@@ -203,4 +203,14 @@ public interface WorkflowFeignService { ...@@ -203,4 +203,14 @@ public interface WorkflowFeignService {
*/ */
@RequestMapping(value = "/activitiHistory/processes/historytasks/getHistoricTaskForProcessInstanceId/{processInstanceId}",method = RequestMethod.GET) @RequestMapping(value = "/activitiHistory/processes/historytasks/getHistoricTaskForProcessInstanceId/{processInstanceId}",method = RequestMethod.GET)
JSONObject getHistoricTaskForProcessInstanceId(@PathVariable("processInstanceId") String processInstanceId) throws ParseException; JSONObject getHistoricTaskForProcessInstanceId(@PathVariable("processInstanceId") String processInstanceId) throws ParseException;
/**'
* 查询指定任务名称的任务列表
* @param taskName
* @return
* @throws Exception
*/
@RequestMapping(value = "/activitiHistory/getTaskListForTaskName/{taskName}/{definitionKey}",method = RequestMethod.GET)
JSONObject getTaskListForTaskName(@PathVariable String taskName,@PathVariable String definitionKey) throws Exception ;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment