|
@@ -13,11 +13,15 @@ import com.qmth.distributed.print.business.entity.*;
|
|
import com.qmth.distributed.print.business.enums.*;
|
|
import com.qmth.distributed.print.business.enums.*;
|
|
import com.qmth.distributed.print.business.service.*;
|
|
import com.qmth.distributed.print.business.service.*;
|
|
import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
|
|
import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
|
|
|
|
+import com.qmth.teachcloud.common.bean.params.SysRoleGroupMemberMatch;
|
|
|
|
+import com.qmth.teachcloud.common.bean.params.SysRoleGroupMemberMatchParams;
|
|
|
|
+import com.qmth.teachcloud.common.bean.result.SysRoleGroupMemberMatchResult;
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
import com.qmth.teachcloud.common.entity.SysOrg;
|
|
import com.qmth.teachcloud.common.entity.SysOrg;
|
|
import com.qmth.teachcloud.common.entity.SysUser;
|
|
import com.qmth.teachcloud.common.entity.SysUser;
|
|
import com.qmth.teachcloud.common.enums.*;
|
|
import com.qmth.teachcloud.common.enums.*;
|
|
import com.qmth.teachcloud.common.service.CommonCacheService;
|
|
import com.qmth.teachcloud.common.service.CommonCacheService;
|
|
|
|
+import com.qmth.teachcloud.common.service.SysRoleGroupMemberService;
|
|
import com.qmth.teachcloud.common.service.SysUserService;
|
|
import com.qmth.teachcloud.common.service.SysUserService;
|
|
import com.qmth.teachcloud.common.util.JacksonUtil;
|
|
import com.qmth.teachcloud.common.util.JacksonUtil;
|
|
import com.qmth.teachcloud.common.util.RedisUtil;
|
|
import com.qmth.teachcloud.common.util.RedisUtil;
|
|
@@ -49,6 +53,7 @@ import java.io.InputStream;
|
|
import java.text.MessageFormat;
|
|
import java.text.MessageFormat;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
+import java.util.function.Function;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -101,6 +106,12 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
@Resource
|
|
@Resource
|
|
CommonCacheService commonCacheService;
|
|
CommonCacheService commonCacheService;
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ SysRoleGroupMemberService sysRoleGroupMemberService;
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ BasicMessageService basicMessageService;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 启动流程
|
|
* 启动流程
|
|
*
|
|
*
|
|
@@ -109,6 +120,7 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public ProcessInstance flowStart(Map<String, Object> map) {
|
|
public ProcessInstance flowStart(Map<String, Object> map) {
|
|
|
|
+ Long approveId = Objects.nonNull(map.get(SystemConstant.APPROVE_ID)) ? (Long) map.get(SystemConstant.APPROVE_ID) : null;
|
|
String id = (String) map.get(SystemConstant.ID);
|
|
String id = (String) map.get(SystemConstant.ID);
|
|
Long objectId = (Long) map.get(SystemConstant.OBJECT_ID);
|
|
Long objectId = (Long) map.get(SystemConstant.OBJECT_ID);
|
|
TFCustomTypeEnum flowType = (TFCustomTypeEnum) map.get(SystemConstant.FLOW_TYPE);
|
|
TFCustomTypeEnum flowType = (TFCustomTypeEnum) map.get(SystemConstant.FLOW_TYPE);
|
|
@@ -116,21 +128,73 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
Boolean flowSubmit = (Boolean) map.get(SystemConstant.FLOW_SUBMIT);
|
|
Boolean flowSubmit = (Boolean) map.get(SystemConstant.FLOW_SUBMIT);
|
|
Map flowProcessVarMap = (Map) map.get(SystemConstant.FLOW_PROCESS_VAR_MAP);
|
|
Map flowProcessVarMap = (Map) map.get(SystemConstant.FLOW_PROCESS_VAR_MAP);
|
|
Map<String, CustomFlowVarDto> agginessMap = (Map<String, CustomFlowVarDto>) flowProcessVarMap.get(SystemConstant.AGGINESS_MAP);
|
|
Map<String, CustomFlowVarDto> agginessMap = (Map<String, CustomFlowVarDto>) flowProcessVarMap.get(SystemConstant.AGGINESS_MAP);
|
|
|
|
+ SysRoleGroupMemberMatchParams roleGroupMemberMatchParams = null;
|
|
|
|
+ Map<String, SysRoleGroupMemberMatch> flowRoleGroupMemberMatchMap = null;
|
|
Map<String, Object> varMap = new HashMap<>();
|
|
Map<String, Object> varMap = new HashMap<>();
|
|
Gson gson = new Gson();
|
|
Gson gson = new Gson();
|
|
for (Map.Entry<String, CustomFlowVarDto> entry : agginessMap.entrySet()) {
|
|
for (Map.Entry<String, CustomFlowVarDto> entry : agginessMap.entrySet()) {
|
|
CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(entry.getValue()), CustomFlowVarDto.class);
|
|
CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(entry.getValue()), CustomFlowVarDto.class);
|
|
if (Objects.nonNull(customFlowVarDto.getFlowTaskVar()) && customFlowVarDto.getFlowTaskVar().contains(DefaultInstanceConvertToMultiInstance.DEFAULT_ASSIGNEE_LIST)) {
|
|
if (Objects.nonNull(customFlowVarDto.getFlowTaskVar()) && customFlowVarDto.getFlowTaskVar().contains(DefaultInstanceConvertToMultiInstance.DEFAULT_ASSIGNEE_LIST)) {
|
|
- Set<String> set = new LinkedHashSet(customFlowVarDto.getApproveIds());
|
|
|
|
- if (customFlowVarDto.getMultipleUserApproveType() == CustomFlowMultipleUserApproveTypeEnum.SOME) {
|
|
|
|
- varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> set.toString().replaceAll("\\[", "").replaceAll("\\]", "").trim());
|
|
|
|
- } else {
|
|
|
|
- varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> set);
|
|
|
|
|
|
+ if (customFlowVarDto.getApproveUserType() == CustomFlowApproveUserTypeEnum.USER) {
|
|
|
|
+ Set<String> set = new LinkedHashSet(customFlowVarDto.getApproveIds());
|
|
|
|
+ if (customFlowVarDto.getMultipleUserApproveType() == CustomFlowMultipleUserApproveTypeEnum.SOME) {
|
|
|
|
+ varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> set.toString().replaceAll("\\[", "").replaceAll("\\]", "").trim());
|
|
|
|
+ } else {
|
|
|
|
+ varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> set);
|
|
|
|
+ }
|
|
|
|
+ } else if (customFlowVarDto.getApproveUserType() == CustomFlowApproveUserTypeEnum.ROLE) {
|
|
|
|
+ roleGroupMemberMatchParams = Objects.isNull(roleGroupMemberMatchParams) ? new SysRoleGroupMemberMatchParams() : roleGroupMemberMatchParams;
|
|
|
|
+ if (Objects.isNull(roleGroupMemberMatchParams.getFlowRoleGroupMemberMatchMap()) || roleGroupMemberMatchParams.getFlowRoleGroupMemberMatchMap().size() == 0) {
|
|
|
|
+ flowRoleGroupMemberMatchMap = new LinkedHashMap<>();
|
|
|
|
+ } else {
|
|
|
|
+ flowRoleGroupMemberMatchMap = roleGroupMemberMatchParams.getFlowRoleGroupMemberMatchMap();
|
|
|
|
+ }
|
|
|
|
+ if (flowRoleGroupMemberMatchMap.size() == 0) {
|
|
|
|
+ flowRoleGroupMemberMatchMap.computeIfAbsent(entry.getKey(), v -> new SysRoleGroupMemberMatch(customFlowVarDto.getApproveRoleIds().stream().map(s -> SystemConstant.convertIdToLong(s)).collect(Collectors.toList()), approveId));
|
|
|
|
+ } else {
|
|
|
|
+ flowRoleGroupMemberMatchMap.computeIfAbsent(entry.getKey(), v -> new SysRoleGroupMemberMatch(customFlowVarDto.getApproveRoleIds().stream().map(s -> SystemConstant.convertIdToLong(s)).collect(Collectors.toList())));
|
|
|
|
+ }
|
|
|
|
+ roleGroupMemberMatchParams.setFlowRoleGroupMemberMatchMap(flowRoleGroupMemberMatchMap);
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> customFlowVarDto.getApproveIds().get(0));
|
|
varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> customFlowVarDto.getApproveIds().get(0));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ if (Objects.nonNull(roleGroupMemberMatchParams)) {
|
|
|
|
+ Map<String, SysRoleGroupMemberMatchResult> sysRoleGroupMemberMatchResultMap = sysRoleGroupMemberService.matchList(roleGroupMemberMatchParams);
|
|
|
|
+ if (Objects.nonNull(sysRoleGroupMemberMatchResultMap) && sysRoleGroupMemberMatchResultMap.size() > 0) {
|
|
|
|
+ sysRoleGroupMemberMatchResultMap.forEach((k, v) -> {
|
|
|
|
+ String userTaskId = k.substring(k.length() - 1, k.length());
|
|
|
|
+ CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(agginessMap.get(k)), CustomFlowVarDto.class);
|
|
|
|
+ if (Objects.isNull(v)) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("流程第" + userTaskId + "个审批节点没有审批人或成员数据已发生改变,请重新选择!");
|
|
|
|
+ }
|
|
|
|
+ int count = sysRoleGroupMemberService.findByIdsCount(v.getSysRoleGroupMemberIdList());
|
|
|
|
+ if (count == 0 || count != v.getSysRoleGroupMemberIdList().size()) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("流程第" + userTaskId + "个审批节点成员数据已发生改变,请重新选择!");
|
|
|
|
+ }
|
|
|
|
+ List<ApproveUserResult> approveUserResultList = v.getApproveUserResultList();
|
|
|
|
+ List<String> approveUserList = new ArrayList<>();
|
|
|
|
+ StringJoiner approveUserNamesSj = new StringJoiner("");
|
|
|
|
+ for (ApproveUserResult a : approveUserResultList) {
|
|
|
|
+ approveUserList.add(String.valueOf(a.getId()));
|
|
|
|
+ approveUserNamesSj.add(a.getRealName()).add("(").add(a.getOrgName()).add(")").add(",");
|
|
|
|
+ }
|
|
|
|
+ customFlowVarDto.setApproveIds(approveUserList);
|
|
|
|
+ Set<String> set = new LinkedHashSet(approveUserList);
|
|
|
|
+ String approveUserNames = approveUserNamesSj.toString();
|
|
|
|
+ approveUserNames = !Objects.equals(approveUserNames, "") ? approveUserNames.substring(0, approveUserNames.length() - 1) : null;
|
|
|
|
+ customFlowVarDto.setApproveUserNames(approveUserNames);
|
|
|
|
+ if (customFlowVarDto.getMultipleUserApproveType() == CustomFlowMultipleUserApproveTypeEnum.SOME) {
|
|
|
|
+ varMap.put(customFlowVarDto.getFlowTaskVar(), set.toString().replaceAll("\\[", "").replaceAll("\\]", "").trim());
|
|
|
|
+ } else {
|
|
|
|
+ varMap.put(customFlowVarDto.getFlowTaskVar(), set);
|
|
|
|
+ }
|
|
|
|
+ agginessMap.put(k, customFlowVarDto);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ flowProcessVarMap.put(SystemConstant.AGGINESS_MAP, agginessMap);
|
|
|
|
+ }
|
|
varMap.computeIfAbsent(SystemConstant.OBJECT_ID, v -> objectId);
|
|
varMap.computeIfAbsent(SystemConstant.OBJECT_ID, v -> objectId);
|
|
varMap.computeIfAbsent(SystemConstant.OBJECT_DATA, v -> o);
|
|
varMap.computeIfAbsent(SystemConstant.OBJECT_DATA, v -> o);
|
|
varMap.computeIfAbsent(SystemConstant.FLOW_TYPE, v -> flowType);
|
|
varMap.computeIfAbsent(SystemConstant.FLOW_TYPE, v -> flowType);
|
|
@@ -208,10 +272,13 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
}
|
|
}
|
|
try {
|
|
try {
|
|
SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
- ExamTask examTask = examTaskService.findByFlowId(SystemConstant.convertIdToLong(flowId));
|
|
|
|
|
|
+ TFFlowJoin tfFlowJoin = tfFlowJoinService.findByFlowId(SystemConstant.convertIdToLong(flowId));
|
|
|
|
+ Object o = null;
|
|
|
|
+ if (Objects.nonNull(tfFlowJoin.getObjectTable()) && Objects.equals(tfFlowJoin.getObjectTable(), TFCustomTypeEnum.ELECTRON_FLOW.getTable())) {
|
|
|
|
+ o = examTaskService.findByFlowId(SystemConstant.convertIdToLong(flowId));
|
|
|
|
+ }
|
|
//流程审批
|
|
//流程审批
|
|
TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(SystemConstant.convertIdToLong(flowId));
|
|
TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(SystemConstant.convertIdToLong(flowId));
|
|
- TFFlowJoin tfFlowJoin = tfFlowJoinService.findByFlowId(SystemConstant.convertIdToLong(flowId));
|
|
|
|
if (Objects.isNull(tfFlowApprove)) {
|
|
if (Objects.isNull(tfFlowApprove)) {
|
|
tfFlowApprove = new TFFlowApprove(sysUser.getSchoolId(), sysUser.getOrgId(), SystemConstant.convertIdToLong(flowId), sysUser.getId(), FlowStatusEnum.END, sysUser.getId());
|
|
tfFlowApprove = new TFFlowApprove(sysUser.getSchoolId(), sysUser.getOrgId(), SystemConstant.convertIdToLong(flowId), sysUser.getId(), FlowStatusEnum.END, sysUser.getId());
|
|
} else {
|
|
} else {
|
|
@@ -222,16 +289,19 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
tfFlowApproveService.saveOrUpdate(tfFlowApprove);
|
|
tfFlowApproveService.saveOrUpdate(tfFlowApprove);
|
|
|
|
|
|
//流程流水日志
|
|
//流程流水日志
|
|
- TFFlowLog tfFlowLog = new TFFlowLog(sysUser.getSchoolId(), sysUser.getOrgId(), examTask.getFlowId(), examTask.getId(), sysUser.getId(), sysUser.getId(), FlowApproveSetupEnum.END.getTitle(), tfFlowJoin.getObjectTable());
|
|
|
|
|
|
+ TFFlowLog tfFlowLog = new TFFlowLog(sysUser.getSchoolId(), sysUser.getOrgId(), tfFlowJoin.getFlowId(), tfFlowJoin.getObjectId(), sysUser.getId(), sysUser.getId(), FlowApproveSetupEnum.END.getTitle(), tfFlowJoin.getObjectTable());
|
|
tfFlowLog.setApproveOperation(FlowApproveOperationEnum.END);
|
|
tfFlowLog.setApproveOperation(FlowApproveOperationEnum.END);
|
|
tfFlowLog.setApproveSetup(FlowApproveSetupEnum.END.getSetup());
|
|
tfFlowLog.setApproveSetup(FlowApproveSetupEnum.END.getSetup());
|
|
tfFlowLogService.save(tfFlowLog);
|
|
tfFlowLogService.save(tfFlowLog);
|
|
|
|
|
|
//命题任务修改
|
|
//命题任务修改
|
|
// examTask.setFlowId(null);
|
|
// examTask.setFlowId(null);
|
|
- examTask.setStatus(ExamStatusEnum.STAGE);
|
|
|
|
- examTask.updateInfo(sysUser.getId());
|
|
|
|
- examTaskService.updateById(examTask);
|
|
|
|
|
|
+ if (Objects.nonNull(o) && o instanceof ExamTask) {
|
|
|
|
+ ExamTask examTask = (ExamTask) o;
|
|
|
|
+ examTask.setStatus(ExamStatusEnum.STAGE);
|
|
|
|
+ examTask.updateInfo(sysUser.getId());
|
|
|
|
+ examTaskService.updateById(examTask);
|
|
|
|
+ }
|
|
runtimeService.deleteProcessInstance(flowId, FlowApproveSetupEnum.END.getTitle());
|
|
runtimeService.deleteProcessInstance(flowId, FlowApproveSetupEnum.END.getTitle());
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
log.error(SystemConstant.LOG_ERROR, e);
|
|
log.error(SystemConstant.LOG_ERROR, e);
|
|
@@ -300,7 +370,11 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
throw ExceptionResultEnum.ERROR.exception("正在审批中,请稍候再试!");
|
|
throw ExceptionResultEnum.ERROR.exception("正在审批中,请稍候再试!");
|
|
}
|
|
}
|
|
try {
|
|
try {
|
|
- ExamTask examTask = examTaskService.findByFlowId(flowId);
|
|
|
|
|
|
+ TFFlowJoin tfFlowJoin = tfFlowJoinService.findByFlowId(flowId);
|
|
|
|
+ Object o = null;
|
|
|
|
+ if (Objects.nonNull(tfFlowJoin.getObjectTable()) && Objects.equals(tfFlowJoin.getObjectTable(), TFCustomTypeEnum.ELECTRON_FLOW.getTable())) {
|
|
|
|
+ o = examTaskService.findByFlowId(flowId);
|
|
|
|
+ }
|
|
|
|
|
|
//获取当前流程节点
|
|
//获取当前流程节点
|
|
String currActivityId = task.getTaskDefinitionKey();
|
|
String currActivityId = task.getTaskDefinitionKey();
|
|
@@ -316,8 +390,6 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
TFCustomFlowEntity tfCustomFlowEntity = tfCustomFlowEntityService.findByFlowId(flowId);
|
|
TFCustomFlowEntity tfCustomFlowEntity = tfCustomFlowEntityService.findByFlowId(flowId);
|
|
Map<String, Object> flowProcessVarMap = this.getFlowProcessVarMap(tfCustomFlowEntity);
|
|
Map<String, Object> flowProcessVarMap = this.getFlowProcessVarMap(tfCustomFlowEntity);
|
|
|
|
|
|
- TFFlowJoin tfFlowJoin = tfFlowJoinService.findByFlowId(flowId);
|
|
|
|
-
|
|
|
|
String remark = null;
|
|
String remark = null;
|
|
FlowTaskResult currFlowTaskResult = null, nextFlowTaskResult = null;
|
|
FlowTaskResult currFlowTaskResult = null, nextFlowTaskResult = null;
|
|
Map<String, CustomFlowVarDto> agginessMap = (Map<String, CustomFlowVarDto>) flowProcessVarMap.get(SystemConstant.AGGINESS_MAP);
|
|
Map<String, CustomFlowVarDto> agginessMap = (Map<String, CustomFlowVarDto>) flowProcessVarMap.get(SystemConstant.AGGINESS_MAP);
|
|
@@ -338,7 +410,7 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
}
|
|
}
|
|
remark = Objects.nonNull(map.get(SystemConstant.APPROVE_REMARK)) ? map.get(SystemConstant.APPROVE_REMARK).toString() : null;
|
|
remark = Objects.nonNull(map.get(SystemConstant.APPROVE_REMARK)) ? map.get(SystemConstant.APPROVE_REMARK).toString() : null;
|
|
//流程流水日志
|
|
//流程流水日志
|
|
- tfFlowLog = new TFFlowLog(sysUser.getSchoolId(), sysUser.getOrgId(), flowId, examTask.getId(), sysUser.getId(), sysUser.getId(), remark, tfFlowJoin.getObjectTable());
|
|
|
|
|
|
+ tfFlowLog = new TFFlowLog(sysUser.getSchoolId(), sysUser.getOrgId(), flowId, tfFlowJoin.getObjectId(), sysUser.getId(), sysUser.getId(), remark, tfFlowJoin.getObjectTable());
|
|
//判断流程审批是通过还是驳回
|
|
//判断流程审批是通过还是驳回
|
|
FlowApprovePassEnum approvePass = (FlowApprovePassEnum) map.get(SystemConstant.APPROVE_OPERATION);
|
|
FlowApprovePassEnum approvePass = (FlowApprovePassEnum) map.get(SystemConstant.APPROVE_OPERATION);
|
|
Map<String, FlowTaskResult> setupMap = (Map<String, FlowTaskResult>) flowProcessVarMap.get(SystemConstant.SETUP_MAP);
|
|
Map<String, FlowTaskResult> setupMap = (Map<String, FlowTaskResult>) flowProcessVarMap.get(SystemConstant.SETUP_MAP);
|
|
@@ -423,7 +495,7 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
nextFlowTaskResult,
|
|
nextFlowTaskResult,
|
|
gson,
|
|
gson,
|
|
agginessMap,
|
|
agginessMap,
|
|
- examTask);
|
|
|
|
|
|
+ o);
|
|
//当前实例的执行到哪个节点
|
|
//当前实例的执行到哪个节点
|
|
taskService.complete(String.valueOf(flowTaskId), map);
|
|
taskService.complete(String.valueOf(flowTaskId), map);
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
@@ -453,7 +525,7 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
* @param nextFlowTaskResult
|
|
* @param nextFlowTaskResult
|
|
* @param gson
|
|
* @param gson
|
|
* @param agginessMap
|
|
* @param agginessMap
|
|
- * @param examTask
|
|
|
|
|
|
+ * @param o
|
|
*/
|
|
*/
|
|
protected void setApproveInfo(TFFlowApprove tfFlowApprove,
|
|
protected void setApproveInfo(TFFlowApprove tfFlowApprove,
|
|
TFFlowLog tfFlowLog,
|
|
TFFlowLog tfFlowLog,
|
|
@@ -466,7 +538,7 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
FlowTaskResult nextFlowTaskResult,
|
|
FlowTaskResult nextFlowTaskResult,
|
|
Gson gson,
|
|
Gson gson,
|
|
Map<String, CustomFlowVarDto> agginessMap,
|
|
Map<String, CustomFlowVarDto> agginessMap,
|
|
- ExamTask examTask) {
|
|
|
|
|
|
+ Object o) {
|
|
tfFlowApprove.updateInfo(sysUser.getId());
|
|
tfFlowApprove.updateInfo(sysUser.getId());
|
|
if (tfFlowLog.getApproveOperation() == FlowApproveOperationEnum.APPROVE) {
|
|
if (tfFlowLog.getApproveOperation() == FlowApproveOperationEnum.APPROVE) {
|
|
tfFlowApprove.setApproveSetup(nrOfCompletedInstances);
|
|
tfFlowApprove.setApproveSetup(nrOfCompletedInstances);
|
|
@@ -517,8 +589,11 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
map.put(SystemConstant.APPROVE_TF_FLOW_LOG, tfFlowLog);
|
|
map.put(SystemConstant.APPROVE_TF_FLOW_LOG, tfFlowLog);
|
|
tfFlowApproveService.saveOrUpdate(tfFlowApprove);
|
|
tfFlowApproveService.saveOrUpdate(tfFlowApprove);
|
|
tfFlowLogService.save(tfFlowLog);
|
|
tfFlowLogService.save(tfFlowLog);
|
|
- examTask.updateInfo(sysUser.getId());
|
|
|
|
- examTaskService.updateById(examTask);
|
|
|
|
|
|
+ if (Objects.nonNull(o) && o instanceof ExamTask) {
|
|
|
|
+ ExamTask examTask = (ExamTask) o;
|
|
|
|
+ examTask.updateInfo(sysUser.getId());
|
|
|
|
+ examTaskService.updateById(examTask);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -809,17 +884,18 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
throw ExceptionResultEnum.ERROR.exception("该审批人已有审批权限,无需流转");
|
|
throw ExceptionResultEnum.ERROR.exception("该审批人已有审批权限,无需流转");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- ExamTask examTask = examTaskService.findByFlowId(SystemConstant.convertIdToLong(flowId));
|
|
|
|
|
|
+ TFFlowJoin tfFlowJoin = tfFlowJoinService.findByFlowId(SystemConstant.convertIdToLong(flowId));
|
|
|
|
+ Object o = null;
|
|
|
|
+ if (Objects.nonNull(tfFlowJoin.getObjectTable()) && Objects.equals(tfFlowJoin.getObjectTable(), TFCustomTypeEnum.ELECTRON_FLOW.getTable())) {
|
|
|
|
+ o = examTaskService.findByFlowId(SystemConstant.convertIdToLong(flowId));
|
|
|
|
+ }
|
|
SysUser exchangeUser = sysUserService.getById(userId);
|
|
SysUser exchangeUser = sysUserService.getById(userId);
|
|
SysOrg exchangeSysOrg = commonCacheService.orgCache(exchangeUser.getOrgId());
|
|
SysOrg exchangeSysOrg = commonCacheService.orgCache(exchangeUser.getOrgId());
|
|
|
|
|
|
- TFFlowJoin tfFlowJoin = tfFlowJoinService.findByFlowId(SystemConstant.convertIdToLong(flowId));
|
|
|
|
-
|
|
|
|
String remark = Objects.nonNull(sysOrg) ? sysOrg.getName() : "无机构";
|
|
String remark = Objects.nonNull(sysOrg) ? sysOrg.getName() : "无机构";
|
|
String exchangeRemark = Objects.nonNull(exchangeSysOrg) ? exchangeSysOrg.getName() : "无机构";
|
|
String exchangeRemark = Objects.nonNull(exchangeSysOrg) ? exchangeSysOrg.getName() : "无机构";
|
|
//流程流水日志
|
|
//流程流水日志
|
|
- TFFlowLog tfFlowLog = new TFFlowLog(sysUser.getSchoolId(), sysUser.getOrgId(), examTask.getFlowId(), examTask.getId(), sysUser.getId(), sysUser.getRealName() + "(" + remark + ")转" + exchangeUser.getRealName() + "(" + exchangeRemark + ")审批", FlowApproveOperationEnum.EXCHANGE, sysUser.getId(), String.valueOf(exchangeUser.getId()), tfFlowJoin.getObjectTable());
|
|
|
|
|
|
+ TFFlowLog tfFlowLog = new TFFlowLog(sysUser.getSchoolId(), sysUser.getOrgId(), tfFlowJoin.getFlowId(), tfFlowJoin.getObjectId(), sysUser.getId(), sysUser.getRealName() + "(" + remark + ")转" + exchangeUser.getRealName() + "(" + exchangeRemark + ")审批", FlowApproveOperationEnum.EXCHANGE, sysUser.getId(), String.valueOf(exchangeUser.getId()), tfFlowJoin.getObjectTable());
|
|
CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(agginessMap.get(userTask.getId())), CustomFlowVarDto.class);
|
|
CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(agginessMap.get(userTask.getId())), CustomFlowVarDto.class);
|
|
if (customFlowVarDto.getApproveIds().size() == 1) {
|
|
if (customFlowVarDto.getApproveIds().size() == 1) {
|
|
customFlowVarDto.setApproveIds(new ArrayList<>(Arrays.asList(userId)));
|
|
customFlowVarDto.setApproveIds(new ArrayList<>(Arrays.asList(userId)));
|
|
@@ -860,7 +936,7 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
tfFlowApprove.setTransferAssignee(JacksonUtil.parseJson(agginessMap));
|
|
tfFlowApprove.setTransferAssignee(JacksonUtil.parseJson(agginessMap));
|
|
tfFlowApproveService.updateById(tfFlowApprove);
|
|
tfFlowApproveService.updateById(tfFlowApprove);
|
|
|
|
|
|
- tfFlowLog.setApproveMultiSetup(Objects.nonNull(nrOfCompletedInstances) ? nrOfCompletedInstances++ : nrOfCompletedInstances);
|
|
|
|
|
|
+ tfFlowLog.setApproveMultiSetup(Objects.nonNull(nrOfCompletedInstances) ? ++nrOfCompletedInstances : nrOfCompletedInstances);
|
|
tfFlowLog.setApproveSetup(tfFlowApprove.getSetup());
|
|
tfFlowLog.setApproveSetup(tfFlowApprove.getSetup());
|
|
tfFlowLog.setApproveUserApproveType(customFlowVarDto.getMultipleUserApproveType());
|
|
tfFlowLog.setApproveUserApproveType(customFlowVarDto.getMultipleUserApproveType());
|
|
tfFlowLogService.save(tfFlowLog);
|
|
tfFlowLogService.save(tfFlowLog);
|
|
@@ -871,6 +947,10 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
} else {
|
|
} else {
|
|
taskService.setAssignee(taskId, userId);
|
|
taskService.setAssignee(taskId, userId);
|
|
}
|
|
}
|
|
|
|
+ ApproveUserResult approveUserResultExchange = gson.fromJson(gson.toJson(exchangeUser), ApproveUserResult.class);
|
|
|
|
+ if (Objects.nonNull(o) && o instanceof ExamTask) {
|
|
|
|
+ basicMessageService.sendNoticeTaskAuditFlow((ExamTask) o, Arrays.asList(approveUserResultExchange), MessageEnum.NOTICE_OF_AUDIT_CREATED);
|
|
|
|
+ }
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -909,9 +989,9 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
Map<CustomFlowTypeEnum, CustomFlowDto> customFlowTypeEnumCustomFlowDtoMap = new HashMap<>();
|
|
Map<CustomFlowTypeEnum, CustomFlowDto> customFlowTypeEnumCustomFlowDtoMap = new HashMap<>();
|
|
FlowTaskLink flowTaskLink = new FlowTaskLink();//流程双向链表
|
|
FlowTaskLink flowTaskLink = new FlowTaskLink();//流程双向链表
|
|
Map<String, Object> flowProcessVarMap = new HashMap<>();//流程变量
|
|
Map<String, Object> flowProcessVarMap = new HashMap<>();//流程变量
|
|
- Map<String, CustomFlowVarDto> agginessMap = new HashMap<>();//流程审核人数据
|
|
|
|
|
|
+ Map<String, CustomFlowVarDto> agginessMap = new LinkedHashMap<>();//流程审核人数据
|
|
Map<String, CustomFlowGatewayDto> approveDataMap = new HashMap<>();//流程审批数据
|
|
Map<String, CustomFlowGatewayDto> approveDataMap = new HashMap<>();//流程审批数据
|
|
- Map<String, FlowTaskResult> setupMap = new HashMap<>();//流程审批步骤map
|
|
|
|
|
|
+ Map<String, FlowTaskResult> setupMap = new LinkedHashMap<>();//流程审批步骤map
|
|
LinkedMultiValueMap<String, CustomFlowSequenceDto> approvePassMap = new LinkedMultiValueMap<>();//流程审批通过数据
|
|
LinkedMultiValueMap<String, CustomFlowSequenceDto> approvePassMap = new LinkedMultiValueMap<>();//流程审批通过数据
|
|
LinkedMultiValueMap<String, CustomFlowSequenceDto> approveRejectMap = new LinkedMultiValueMap<>();//流程审批驳回数据
|
|
LinkedMultiValueMap<String, CustomFlowSequenceDto> approveRejectMap = new LinkedMultiValueMap<>();//流程审批驳回数据
|
|
flowProcessVarMap.computeIfAbsent(SystemConstant.AGGINESS_MAP, v -> agginessMap);
|
|
flowProcessVarMap.computeIfAbsent(SystemConstant.AGGINESS_MAP, v -> agginessMap);
|
|
@@ -938,16 +1018,18 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
//默认在开始节点后新增一个审批节点
|
|
//默认在开始节点后新增一个审批节点
|
|
customFlowDefaultDto = multiWorkFlow.createDefaultUserTask(customFlowDto, flowTaskLink, DefaultInstanceConvertToMultiInstance.DEFAULT_USER_TASK);
|
|
customFlowDefaultDto = multiWorkFlow.createDefaultUserTask(customFlowDto, flowTaskLink, DefaultInstanceConvertToMultiInstance.DEFAULT_USER_TASK);
|
|
setupMap.put(customFlowDefaultDto.getFlowTaskId(), new FlowTaskResult(customFlowDefaultDto.getContent(), customFlowDefaultDto.getFlowTaskId(), customFlowDefaultDto.getSetup()));
|
|
setupMap.put(customFlowDefaultDto.getFlowTaskId(), new FlowTaskResult(customFlowDefaultDto.getContent(), customFlowDefaultDto.getFlowTaskId(), customFlowDefaultDto.getSetup()));
|
|
- agginessMap.computeIfAbsent(customFlowDefaultDto.getFlowTaskId(), v -> new CustomFlowVarDto(SystemConstant.APPROVE_ID, new ArrayList(Arrays.asList("")), null, null));
|
|
|
|
|
|
+ agginessMap.computeIfAbsent(customFlowDefaultDto.getFlowTaskId(), v -> new CustomFlowVarDto(SystemConstant.APPROVE_ID, new ArrayList(Arrays.asList("")), null, null, null));
|
|
process.addFlowElement(createUserTask(CustomFlowTypeEnum.USER_TASK.getId() + DefaultInstanceConvertToMultiInstance.DEFAULT_USER_TASK, Objects.nonNull(flowTaskLink.getLast().getTask().getContent()) && !Objects.equals(flowTaskLink.getLast().getTask().getContent(), "") ? flowTaskLink.getLast().getTask().getContent() : DefaultInstanceConvertToMultiInstance.DEFAULT_USER_TASK_NAME, DefaultInstanceConvertToMultiInstance.APPROVE_ID_EXP));
|
|
process.addFlowElement(createUserTask(CustomFlowTypeEnum.USER_TASK.getId() + DefaultInstanceConvertToMultiInstance.DEFAULT_USER_TASK, Objects.nonNull(flowTaskLink.getLast().getTask().getContent()) && !Objects.equals(flowTaskLink.getLast().getTask().getContent(), "") ? flowTaskLink.getLast().getTask().getContent() : DefaultInstanceConvertToMultiInstance.DEFAULT_USER_TASK_NAME, DefaultInstanceConvertToMultiInstance.APPROVE_ID_EXP));
|
|
break;
|
|
break;
|
|
case PROCESS://过程节点
|
|
case PROCESS://过程节点
|
|
customFlowDto.setSetup(setup.getAndIncrement());
|
|
customFlowDto.setSetup(setup.getAndIncrement());
|
|
customFlowDto.setFlowTaskId(CustomFlowTypeEnum.USER_TASK.getId() + i);
|
|
customFlowDto.setFlowTaskId(CustomFlowTypeEnum.USER_TASK.getId() + i);
|
|
- setupMap.put(customFlowDto.getFlowTaskId(), new FlowTaskResult(Objects.nonNull(customFlowDto.getContent()) && !Objects.equals(customFlowDto.getContent(), "") ? customFlowDto.getContent() : DefaultInstanceConvertToMultiInstance.USER_TASK_APPROVE_NAME, customFlowDto.getFlowTaskId(), customFlowDto.getSetup()));
|
|
|
|
|
|
+ FlowTaskResult flowTaskResult = new FlowTaskResult(Objects.nonNull(customFlowDto.getContent()) && !Objects.equals(customFlowDto.getContent(), "") ? customFlowDto.getContent() : DefaultInstanceConvertToMultiInstance.USER_TASK_APPROVE_NAME, customFlowDto.getFlowTaskId(), customFlowDto.getSetup());
|
|
|
|
+ setupMap.put(customFlowDto.getFlowTaskId(), flowTaskResult);
|
|
CustomFlowPropertyDto customFlowPropertyDto = customFlowDto.getProperty();
|
|
CustomFlowPropertyDto customFlowPropertyDto = customFlowDto.getProperty();
|
|
List<String> approveUserIds = new ArrayList<>();//审批用户
|
|
List<String> approveUserIds = new ArrayList<>();//审批用户
|
|
List<String> copyUserIds = new ArrayList<>();//抄送用户
|
|
List<String> copyUserIds = new ArrayList<>();//抄送用户
|
|
|
|
+ List<String> approveRoleIds = null;//审批角色
|
|
//抄送用户
|
|
//抄送用户
|
|
if (Objects.nonNull(customFlowPropertyDto.getCopyForUsers()) && customFlowPropertyDto.getCopyForUsers().size() > 0) {
|
|
if (Objects.nonNull(customFlowPropertyDto.getCopyForUsers()) && customFlowPropertyDto.getCopyForUsers().size() > 0) {
|
|
copyUserIds.addAll(customFlowPropertyDto.getCopyForUsers().stream().map(x -> String.valueOf(x.getId())).collect(Collectors.toList()));
|
|
copyUserIds.addAll(customFlowPropertyDto.getCopyForUsers().stream().map(x -> String.valueOf(x.getId())).collect(Collectors.toList()));
|
|
@@ -962,21 +1044,23 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
break;
|
|
break;
|
|
case ROLE://角色
|
|
case ROLE://角色
|
|
if (Objects.nonNull(customFlowPropertyDto.getApproveRoles()) && customFlowPropertyDto.getApproveRoles().size() > 0) {
|
|
if (Objects.nonNull(customFlowPropertyDto.getApproveRoles()) && customFlowPropertyDto.getApproveRoles().size() > 0) {
|
|
-// List<SysUser> sysUserList = sysUserService.findByRoleIds(customFlowPropertyDto.getApproveRoles().stream().map(x -> x.getId()).collect(Collectors.toList()));
|
|
|
|
-// approveUserIds.addAll(sysUserList.stream().map(x -> String.valueOf(x.getId())).collect(Collectors.toList()));
|
|
|
|
|
|
+ approveRoleIds = customFlowPropertyDto.getApproveRoles().stream().map(x -> String.valueOf(x.getId())).collect(Collectors.toList());
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- Set<String> set = new LinkedHashSet(approveUserIds);
|
|
|
|
- ApproveUserResult approveUserResult = sysUserService.findByIds(set.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
|
|
|
|
|
|
+ ApproveUserResult approveUserResult = null;
|
|
|
|
+ if (approveUserIds.size() > 0) {
|
|
|
|
+ Set<String> set = new LinkedHashSet(approveUserIds);
|
|
|
|
+ approveUserResult = sysUserService.findByIds(set.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
|
|
|
|
+ }
|
|
ApproveUserResult approveUserResultCopyUser = null;
|
|
ApproveUserResult approveUserResultCopyUser = null;
|
|
if (copyUserIds.size() > 0) {
|
|
if (copyUserIds.size() > 0) {
|
|
Set<String> copyUserSet = new LinkedHashSet(copyUserIds);
|
|
Set<String> copyUserSet = new LinkedHashSet(copyUserIds);
|
|
approveUserResultCopyUser = sysUserService.findByIds(copyUserSet.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
|
|
approveUserResultCopyUser = sysUserService.findByIds(copyUserSet.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
|
|
}
|
|
}
|
|
- agginessMap.put(node.getTask().getFlowTaskId(), new CustomFlowVarDto(DefaultInstanceConvertToMultiInstance.DEFAULT_ASSIGNEE_LIST + i, approveUserIds, node.getTask().getProperty().getApproveUserType(), node.getTask().getProperty().getMultipleUserApproveType(), node.getTask().getProperty().getRejectType(), node.getTask().getProperty().getRejectResubmitType(), approveUserResult.getPendApproveUsers(), copyUserIds, Objects.nonNull(approveUserResultCopyUser) ? approveUserResultCopyUser.getPendApproveUsers() : null));
|
|
|
|
|
|
+ agginessMap.put(node.getTask().getFlowTaskId(), new CustomFlowVarDto(DefaultInstanceConvertToMultiInstance.DEFAULT_ASSIGNEE_LIST + i, approveUserIds, node.getTask().getProperty().getApproveUserType(), node.getTask().getProperty().getMultipleUserApproveType(), node.getTask().getProperty().getRejectType(), node.getTask().getProperty().getRejectResubmitType(), Objects.nonNull(approveUserResult) ? approveUserResult.getPendApproveUsers() : null, copyUserIds, Objects.nonNull(approveUserResultCopyUser) ? approveUserResultCopyUser.getPendApproveUsers() : null, approveRoleIds));
|
|
if (Objects.nonNull(customFlowPropertyDto.getRejectType()) && !Objects.equals(customFlowPropertyDto.getRejectType(), "")) {
|
|
if (Objects.nonNull(customFlowPropertyDto.getRejectType()) && !Objects.equals(customFlowPropertyDto.getRejectType(), "")) {
|
|
//驳回属性
|
|
//驳回属性
|
|
switch (customFlowPropertyDto.getRejectType()) {
|
|
switch (customFlowPropertyDto.getRejectType()) {
|
|
@@ -1075,6 +1159,8 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ flowTaskResult.setApproveRoleIds(approveRoleIds);
|
|
|
|
+ flowTaskResult.setApproveUserType(customFlowPropertyDto.getApproveUserType());
|
|
process.addFlowElement(createUserTask(CustomFlowTypeEnum.USER_TASK.getId() + i, Objects.nonNull(customFlowDto.getContent()) && !Objects.equals(customFlowDto.getContent(), "") ? customFlowDto.getContent() : DefaultInstanceConvertToMultiInstance.USER_TASK_APPROVE_NAME, approveUserIds, customFlowPropertyDto.getMultipleUserApproveType()));
|
|
process.addFlowElement(createUserTask(CustomFlowTypeEnum.USER_TASK.getId() + i, Objects.nonNull(customFlowDto.getContent()) && !Objects.equals(customFlowDto.getContent(), "") ? customFlowDto.getContent() : DefaultInstanceConvertToMultiInstance.USER_TASK_APPROVE_NAME, approveUserIds, customFlowPropertyDto.getMultipleUserApproveType()));
|
|
break;
|
|
break;
|
|
case END://结束节点
|
|
case END://结束节点
|
|
@@ -1310,7 +1396,7 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
List<String> approveUserIds = new ArrayList(Arrays.asList(String.valueOf(approveId)));
|
|
List<String> approveUserIds = new ArrayList(Arrays.asList(String.valueOf(approveId)));
|
|
Set<String> set = new LinkedHashSet(approveUserIds);
|
|
Set<String> set = new LinkedHashSet(approveUserIds);
|
|
ApproveUserResult approveUserResult = sysUserService.findByIds(set.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
|
|
ApproveUserResult approveUserResult = sysUserService.findByIds(set.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
|
|
- agginessMap.put(CustomFlowTypeEnum.USER_TASK.getId() + DefaultInstanceConvertToMultiInstance.DEFAULT_USER_TASK, new CustomFlowVarDto(SystemConstant.APPROVE_ID, approveUserIds, approveUserResult.getPendApproveUsers(), null, null));
|
|
|
|
|
|
+ agginessMap.put(CustomFlowTypeEnum.USER_TASK.getId() + DefaultInstanceConvertToMultiInstance.DEFAULT_USER_TASK, new CustomFlowVarDto(SystemConstant.APPROVE_ID, approveUserIds, approveUserResult.getPendApproveUsers(), null, null, null));
|
|
flowProcessVarMap.put(SystemConstant.AGGINESS_MAP, agginessMap);
|
|
flowProcessVarMap.put(SystemConstant.AGGINESS_MAP, agginessMap);
|
|
|
|
|
|
map.computeIfAbsent(SystemConstant.ID, v -> tfCustomFlow.getFlowKey());
|
|
map.computeIfAbsent(SystemConstant.ID, v -> tfCustomFlow.getFlowKey());
|
|
@@ -1343,7 +1429,6 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public TaskInfoResult getTaskInfo(Long taskId) {
|
|
public TaskInfoResult getTaskInfo(Long taskId) {
|
|
- SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
|
|
Task task = taskService.createTaskQuery().taskId(String.valueOf(taskId)).singleResult();
|
|
Task task = taskService.createTaskQuery().taskId(String.valueOf(taskId)).singleResult();
|
|
Optional.ofNullable(task).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程任务为空或该流程已被他人审核,请刷新再试!"));
|
|
Optional.ofNullable(task).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程任务为空或该流程已被他人审核,请刷新再试!"));
|
|
Long flowId = SystemConstant.convertIdToLong(task.getProcessInstanceId());
|
|
Long flowId = SystemConstant.convertIdToLong(task.getProcessInstanceId());
|
|
@@ -1450,27 +1535,78 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
* 根据流程类型获取流程节点
|
|
* 根据流程类型获取流程节点
|
|
*
|
|
*
|
|
* @param type
|
|
* @param type
|
|
|
|
+ * @param flowId
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public FlowInfoResult getFlowInfoByType(TFCustomTypeEnum type) {
|
|
|
|
|
|
+ public FlowInfoResult getFlowInfoByType(TFCustomTypeEnum type, Long flowId) {
|
|
SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
- TFCustomFlow tfCustomFlow = tfCustomFlowService.findMaxVersion(sysUser.getSchoolId(), null, type);
|
|
|
|
- Optional.ofNullable(tfCustomFlow).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未找到自定义流程数据"));
|
|
|
|
-
|
|
|
|
- List<FlowTaskResult> flowTaskResultList = this.getFlowTaskResult(tfCustomFlow);
|
|
|
|
- Map<String, Object> flowProcessVarMap = this.getFlowProcessVarMap(tfCustomFlow);
|
|
|
|
|
|
+ TFCustomFlow tfCustomFlow = null;
|
|
|
|
+ TFCustomFlowEntity tfCustomFlowEntity = null;
|
|
|
|
+ List<FlowTaskResult> flowTaskResultList = null;
|
|
|
|
+ Map<String, Object> flowProcessVarMap = null;
|
|
|
|
+ if (Objects.isNull(flowId)) {
|
|
|
|
+ tfCustomFlow = tfCustomFlowService.findMaxVersion(sysUser.getSchoolId(), null, type);
|
|
|
|
+ Optional.ofNullable(tfCustomFlow).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未找到自定义流程数据"));
|
|
|
|
+ flowTaskResultList = this.getFlowTaskResult(tfCustomFlow);
|
|
|
|
+ flowProcessVarMap = this.getFlowProcessVarMap(tfCustomFlow);
|
|
|
|
+ } else {
|
|
|
|
+ tfCustomFlowEntity = tfCustomFlowEntityService.findByFlowId(flowId);
|
|
|
|
+ Optional.ofNullable(tfCustomFlowEntity).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未找到自定义流程实体数据"));
|
|
|
|
+ flowTaskResultList = this.getFlowTaskResult(tfCustomFlowEntity);
|
|
|
|
+ flowProcessVarMap = this.getFlowProcessVarMap(tfCustomFlowEntity);
|
|
|
|
+ }
|
|
|
|
+ Optional.ofNullable(flowProcessVarMap).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未找到自定义流程变量数据"));
|
|
|
|
+ Map<String, FlowTaskResult> flowTaskResultMap = flowTaskResultList.stream().collect(Collectors.toMap(FlowTaskResult::getTaskKey, Function.identity(), (dto1, dto2) -> dto1));
|
|
Map<String, CustomFlowVarDto> agginessMap = (Map<String, CustomFlowVarDto>) flowProcessVarMap.get(SystemConstant.AGGINESS_MAP);
|
|
Map<String, CustomFlowVarDto> agginessMap = (Map<String, CustomFlowVarDto>) flowProcessVarMap.get(SystemConstant.AGGINESS_MAP);
|
|
- Optional.ofNullable(tfCustomFlow).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未找到自定义流程数据"));
|
|
|
|
|
|
|
|
Gson gson = new Gson();
|
|
Gson gson = new Gson();
|
|
|
|
+ SysRoleGroupMemberMatchParams roleGroupMemberMatchParams = null;
|
|
|
|
+ Map<String, SysRoleGroupMemberMatch> flowRoleGroupMemberMatchMap = null;
|
|
for (FlowTaskResult f : flowTaskResultList) {
|
|
for (FlowTaskResult f : flowTaskResultList) {
|
|
CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(agginessMap.get(f.getTaskKey())), CustomFlowVarDto.class);
|
|
CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(agginessMap.get(f.getTaskKey())), CustomFlowVarDto.class);
|
|
if (Objects.nonNull(customFlowVarDto)) {
|
|
if (Objects.nonNull(customFlowVarDto)) {
|
|
- f.setApproveUserNames(customFlowVarDto.getApproveUserNames());
|
|
|
|
|
|
+ if (Objects.isNull(customFlowVarDto.getApproveUserNames()) && customFlowVarDto.getApproveUserType() == CustomFlowApproveUserTypeEnum.ROLE) {
|
|
|
|
+ roleGroupMemberMatchParams = Objects.isNull(roleGroupMemberMatchParams) ? new SysRoleGroupMemberMatchParams() : roleGroupMemberMatchParams;
|
|
|
|
+ if (Objects.isNull(roleGroupMemberMatchParams.getFlowRoleGroupMemberMatchMap()) || roleGroupMemberMatchParams.getFlowRoleGroupMemberMatchMap().size() == 0) {
|
|
|
|
+ flowRoleGroupMemberMatchMap = new LinkedHashMap<>();
|
|
|
|
+ } else {
|
|
|
|
+ flowRoleGroupMemberMatchMap = roleGroupMemberMatchParams.getFlowRoleGroupMemberMatchMap();
|
|
|
|
+ }
|
|
|
|
+ if (flowRoleGroupMemberMatchMap.size() == 0) {
|
|
|
|
+ flowRoleGroupMemberMatchMap.computeIfAbsent(f.getTaskKey(), v -> new SysRoleGroupMemberMatch(customFlowVarDto.getApproveRoleIds().stream().map(s -> SystemConstant.convertIdToLong(s)).collect(Collectors.toList()), sysUser.getId()));
|
|
|
|
+ } else {
|
|
|
|
+ flowRoleGroupMemberMatchMap.computeIfAbsent(f.getTaskKey(), v -> new SysRoleGroupMemberMatch(customFlowVarDto.getApproveRoleIds().stream().map(s -> SystemConstant.convertIdToLong(s)).collect(Collectors.toList())));
|
|
|
|
+ }
|
|
|
|
+ roleGroupMemberMatchParams.setFlowRoleGroupMemberMatchMap(flowRoleGroupMemberMatchMap);
|
|
|
|
+ } else {
|
|
|
|
+ f.setApproveUserNames(customFlowVarDto.getApproveUserNames());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (Objects.nonNull(roleGroupMemberMatchParams)) {
|
|
|
|
+ Map<String, SysRoleGroupMemberMatchResult> sysRoleGroupMemberMatchResultMap = sysRoleGroupMemberService.matchList(roleGroupMemberMatchParams);
|
|
|
|
+ if (Objects.nonNull(sysRoleGroupMemberMatchResultMap) && sysRoleGroupMemberMatchResultMap.size() > 0) {
|
|
|
|
+ sysRoleGroupMemberMatchResultMap.forEach((k, v) -> {
|
|
|
|
+ String userTaskId = k.substring(k.length() - 1, k.length());
|
|
|
|
+ if (Objects.isNull(v)) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("流程第" + userTaskId + "个审批节点没有审批人或成员数据已发生改变,请重新选择!");
|
|
|
|
+ }
|
|
|
|
+ int count = sysRoleGroupMemberService.findByIdsCount(v.getSysRoleGroupMemberIdList());
|
|
|
|
+ if (count == 0 || count != v.getSysRoleGroupMemberIdList().size()) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("流程第" + userTaskId + "个审批节点成员数据已发生改变,请重新选择!");
|
|
|
|
+ }
|
|
|
|
+ List<String> approveUserNamesList = v.getApproveUserResultList().stream().map(s -> s.getRealName() + "(" + s.getOrgName() + ")").collect(Collectors.toList());
|
|
|
|
+ FlowTaskResult flowTaskResult = flowTaskResultMap.get(k);
|
|
|
|
+ flowTaskResult.setApproveUserNames(approveUserNamesList.toString().replaceAll("\\[", "").replaceAll("\\]", "").trim());
|
|
|
|
+ });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return new FlowInfoResult(tfCustomFlow.getId(), tfCustomFlow.getVersion(), flowTaskResultList);
|
|
|
|
|
|
+ if (Objects.nonNull(tfCustomFlow)) {
|
|
|
|
+ return new FlowInfoResult(tfCustomFlow.getId(), tfCustomFlow.getVersion(), flowTaskResultList);
|
|
|
|
+ } else {
|
|
|
|
+ return new FlowInfoResult(tfCustomFlowEntity.gettFCustomFlowId(), null, flowTaskResultList);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|