|
|
@@ -48,7 +48,18 @@ import com.xjrsoft.module.workflow.constant.WorkflowConstant;
|
|
|
import com.xjrsoft.module.workflow.dto.*;
|
|
|
import com.xjrsoft.module.workflow.entity.*;
|
|
|
import com.xjrsoft.module.workflow.mapper.*;
|
|
|
-import com.xjrsoft.module.workflow.model.*;
|
|
|
+import com.xjrsoft.module.workflow.model.ApiConfig;
|
|
|
+import com.xjrsoft.module.workflow.model.ApiRequestParamsConfig;
|
|
|
+import com.xjrsoft.module.workflow.model.AuthConfig;
|
|
|
+import com.xjrsoft.module.workflow.model.ButtonConfig;
|
|
|
+import com.xjrsoft.module.workflow.model.FormAssignmentConfig;
|
|
|
+import com.xjrsoft.module.workflow.model.FormConfig;
|
|
|
+import com.xjrsoft.module.workflow.model.MemberConfig;
|
|
|
+import com.xjrsoft.module.workflow.model.ProcessParamConfig;
|
|
|
+import com.xjrsoft.module.workflow.model.RelationProcessConfig;
|
|
|
+import com.xjrsoft.module.workflow.model.StartNodeConfig;
|
|
|
+import com.xjrsoft.module.workflow.model.UserTaskConfig;
|
|
|
+import com.xjrsoft.module.workflow.model.WorkflowSchemaConfig;
|
|
|
import com.xjrsoft.module.workflow.service.*;
|
|
|
import com.xjrsoft.module.workflow.utils.WorkFlowUtil;
|
|
|
import com.xjrsoft.module.workflow.vo.*;
|
|
|
@@ -119,6 +130,8 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
|
|
|
private final WorkflowRecordMapper workflowRecordMapper;
|
|
|
|
|
|
+ private final XjrWorkflowOperateRecordMapper xjrWorkflowOperateRecordMapper;
|
|
|
+
|
|
|
private final IWorkflowCirculatedService circulatedService;
|
|
|
|
|
|
private final IWorkflowApproveRecordService approveRecordService;
|
|
|
@@ -1077,7 +1090,6 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
@SneakyThrows
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public List<LaunchAndApproveVo> newLaunch(LaunchDto dto) {
|
|
|
- System.out.println("newLaunch start");
|
|
|
WorkflowSchema workflowSchema = workflowSchemaMapper.selectById(dto.getSchemaId());
|
|
|
|
|
|
if (workflowSchema == null) {
|
|
|
@@ -1882,6 +1894,20 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
String oldTaskName = task.getName();
|
|
|
record.setCirculateMessage(circulateMessage);
|
|
|
|
|
|
+ //新增流程自定义发起流程记录
|
|
|
+ XjrWorkflowOperateRecord xjrWorkflowOperateRecord = new XjrWorkflowOperateRecord();
|
|
|
+ xjrWorkflowOperateRecord.setNodeId(task.getId());
|
|
|
+ xjrWorkflowOperateRecord.setNodeName(task.getName());
|
|
|
+ xjrWorkflowOperateRecord.setNodeType(WorkflowConstant.USER_TASK_TYPE_NAME);
|
|
|
+ xjrWorkflowOperateRecord.setProcessId(task.getProcessInstanceId());
|
|
|
+ xjrWorkflowOperateRecord.setSchemaId(schemaId);
|
|
|
+ xjrWorkflowOperateRecord.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
|
|
|
+ //时间设值必须写在complete上面,防止用户任务节点监听时的流程信息,在次任务前面。
|
|
|
+ xjrWorkflowOperateRecord.setRecordTime(LocalDateTime.now());
|
|
|
+ //当前任务的名称
|
|
|
+ String oldTaskNameCustom = task.getName();
|
|
|
+ xjrWorkflowOperateRecord.setCirculateMessage(circulateMessage);
|
|
|
+
|
|
|
taskService.complete(task.getId());
|
|
|
List<Task> list = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list();
|
|
|
result = isPrevChooseApprove(workflowSchemaConfig, list, variableMap);
|
|
|
@@ -1895,6 +1921,8 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
//新增工作流程信息数据
|
|
|
addWorkflowRecord(userTaskConfig, nextTaskNameList, user, record, oldTaskName, buttonConfig.getButtonName(), dto.getApprovedContent(), task, resultName);
|
|
|
|
|
|
+ addCustomWorkflowRecord(userTaskConfig, nextTaskNameList, user, xjrWorkflowOperateRecord, oldTaskNameCustom, buttonConfig.getButtonName(), dto.getApprovedContent(), task, resultName);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
//如果是驳回
|
|
|
@@ -1929,6 +1957,21 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
// record.setMessage("【审批人:" + user.getName() + "】 将 【任务:" + task.getName() + "】 驳回到 【任务:" + rejectUserTaskConfig.getName() + "】");
|
|
|
record.setMessage("审批信息:【" + user.getName() + "】【驳回】审批,由【" + task.getName() + "】 流转到【" + rejectUserTaskConfig.getName() + "】");
|
|
|
workflowRecordMapper.insert(record);
|
|
|
+
|
|
|
+ //新增自定义流程发起流程记录
|
|
|
+ XjrWorkflowOperateRecord xjrWorkflowOperateRecord = new XjrWorkflowOperateRecord();
|
|
|
+ xjrWorkflowOperateRecord.setNodeId(task.getId());
|
|
|
+ xjrWorkflowOperateRecord.setNodeName(task.getName());
|
|
|
+ xjrWorkflowOperateRecord.setNodeType(WorkflowConstant.USER_TASK_TYPE_NAME);
|
|
|
+ xjrWorkflowOperateRecord.setProcessId(task.getProcessInstanceId());
|
|
|
+ xjrWorkflowOperateRecord.setSchemaId(schemaId);
|
|
|
+ xjrWorkflowOperateRecord.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
|
|
|
+ xjrWorkflowOperateRecord.setRecordTime(LocalDateTime.now().minusSeconds(+1));//时间设置提前1秒钟,好排序
|
|
|
+
|
|
|
+// record.setMessage("【审批人:" + user.getName() + "】 将 【任务:" + task.getName() + "】 驳回到 【任务:" + rejectUserTaskConfig.getName() + "】");
|
|
|
+ String message = "审批人:" + user.getName() + ", 审批结果:驳回, 审批内容:驳回";
|
|
|
+ xjrWorkflowOperateRecord.setOperateInfo(message);
|
|
|
+ xjrWorkflowOperateRecordMapper.insert(xjrWorkflowOperateRecord);
|
|
|
});
|
|
|
|
|
|
}
|
|
|
@@ -1958,6 +2001,19 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
|
|
|
workflowRecordMapper.insert(record);
|
|
|
|
|
|
+ //新增流程发起流程记录
|
|
|
+ XjrWorkflowOperateRecord xjrWorkflowOperateRecord = new XjrWorkflowOperateRecord();
|
|
|
+ xjrWorkflowOperateRecord.setNodeId(task.getId());
|
|
|
+ xjrWorkflowOperateRecord.setNodeName(task.getName());
|
|
|
+ xjrWorkflowOperateRecord.setNodeType(WorkflowConstant.USER_TASK_TYPE_NAME);
|
|
|
+ xjrWorkflowOperateRecord.setProcessId(task.getProcessInstanceId());
|
|
|
+ xjrWorkflowOperateRecord.setSchemaId(schemaId);
|
|
|
+ xjrWorkflowOperateRecord.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
|
|
|
+ xjrWorkflowOperateRecord.setRecordTime(LocalDateTime.now());
|
|
|
+
|
|
|
+ String message = "审批人:" + user.getName() + ", 审批结果:结束, 审批内容:结束流程";
|
|
|
+ xjrWorkflowOperateRecord.setOperateInfo(message);
|
|
|
+ xjrWorkflowOperateRecordMapper.insert(xjrWorkflowOperateRecord);
|
|
|
}
|
|
|
|
|
|
updateFileInfo(dto.getFileFolderIds(), task.getProcessInstanceId());
|
|
|
@@ -2225,6 +2281,17 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
//时间设值必须写在complete上面,防止用户任务节点监听时的流程信息,在次任务前面。
|
|
|
record.setRecordTime(LocalDateTime.now());
|
|
|
|
|
|
+ //批量审批流程信息记录
|
|
|
+ XjrWorkflowOperateRecord xjrWorkflowOperateRecord = new XjrWorkflowOperateRecord();
|
|
|
+ xjrWorkflowOperateRecord.setNodeId(task.getId());
|
|
|
+ xjrWorkflowOperateRecord.setNodeName(task.getName());
|
|
|
+ xjrWorkflowOperateRecord.setNodeType(WorkflowConstant.USER_TASK_TYPE_NAME);
|
|
|
+ xjrWorkflowOperateRecord.setProcessId(task.getProcessInstanceId());
|
|
|
+ xjrWorkflowOperateRecord.setSchemaId(schemaId);
|
|
|
+ xjrWorkflowOperateRecord.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
|
|
|
+ //时间设值必须写在complete上面,防止用户任务节点监听时的流程信息,在次任务前面。
|
|
|
+ xjrWorkflowOperateRecord.setRecordTime(LocalDateTime.now());
|
|
|
+
|
|
|
//新增审批详情返回给前端
|
|
|
ApproveMultiVo approveMultiVo = new ApproveMultiVo();
|
|
|
WorkflowExtra extraFirst = workflowExtras.stream().filter(x -> x.getTaskId().equals(task.getId())).findFirst().orElse(new WorkflowExtra());
|
|
|
@@ -2234,6 +2301,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
if (dto.getApprovedType() == WorkflowApproveType.AGREE.getCode()) {
|
|
|
//新增工作流程信息数据
|
|
|
addWorkflowRecord(userTaskConfig, nextTaskNameList, user, record, task.getName(), "同意", dto.getApprovedContent(), task, resultName);
|
|
|
+ addCustomWorkflowRecord(userTaskConfig, nextTaskNameList, user, xjrWorkflowOperateRecord, task.getName(), "同意", dto.getApprovedContent(), task, resultName);
|
|
|
|
|
|
if (nextTaskNameList.size() == 0) {
|
|
|
String message = "【" + user.getName() + "】【同意】审批,审批意见为:“【" + dto.getApprovedContent() + "】”,由【" + task.getName() + "】 流转到【结束节点】";
|
|
|
@@ -2256,6 +2324,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
if (dto.getApprovedType() == WorkflowApproveType.DISAGREE.getCode()) {
|
|
|
//新增工作流程信息数据
|
|
|
addWorkflowRecord(userTaskConfig, nextTaskNameList, user, record, task.getName(), "拒绝", dto.getApprovedContent(), task, resultName);
|
|
|
+ addCustomWorkflowRecord(userTaskConfig, nextTaskNameList, user, xjrWorkflowOperateRecord, task.getName(), "拒绝", dto.getApprovedContent(), task, resultName);
|
|
|
if (nextTaskNameList.size() == 0) {
|
|
|
String message = "【" + user.getName() + "】【拒绝】审批,审批意见为:“【" + dto.getApprovedContent() + "】”,由【" + task.getName() + "】 流转到【结束节点】";
|
|
|
approveMultiVo.setApproveDetail(message);
|
|
|
@@ -4183,6 +4252,63 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
return recordListVos;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据流程id 获取流程流转信息(自定义)
|
|
|
+ *
|
|
|
+ * @param processInstanceId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<ProcessRecordListVo> getCustomProcessRecordListVos(String processInstanceId, int onlySelf) {
|
|
|
+
|
|
|
+ User user = StpUtil.getTokenSession().get(GlobalConstant.LOGIN_USER_INFO_KEY, new User());
|
|
|
+ List<Long> roleIds = StpUtil.getTokenSession().get(GlobalConstant.LOGIN_USER_ROLE_ID_KEY, new ArrayList<>());
|
|
|
+ LambdaQueryWrapper<XjrWorkflowOperateRecord> workflowOperateRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ if (onlySelf == YesOrNoEnum.YES.getCode()) {//仅查看本人
|
|
|
+ if (roleIds.contains(GlobalConstant.SUPER_ADMIN_ROLE_ID)) {//管理员数据
|
|
|
+ workflowOperateRecordLambdaQueryWrapper.eq(XjrWorkflowOperateRecord::getProcessId, processInstanceId)
|
|
|
+ .orderByAsc(XjrWorkflowOperateRecord::getRecordTime)
|
|
|
+ .like(XjrWorkflowOperateRecord::getOperateInfo, user.getName())
|
|
|
+ .or()
|
|
|
+ .like(XjrWorkflowOperateRecord::getOperateInfo, "流程结束")
|
|
|
+ .eq(XjrWorkflowOperateRecord::getProcessId, processInstanceId)
|
|
|
+ .or()
|
|
|
+ .like(XjrWorkflowOperateRecord::getOperateInfo, "脚本节点")
|
|
|
+ .eq(XjrWorkflowOperateRecord::getCreateUserId, StpUtil.getLoginIdAsLong())//脚本任务
|
|
|
+ .eq(XjrWorkflowOperateRecord::getProcessId, processInstanceId);
|
|
|
+ } else {//其他人数据
|
|
|
+ workflowOperateRecordLambdaQueryWrapper.eq(XjrWorkflowOperateRecord::getProcessId, processInstanceId)
|
|
|
+ .orderByAsc(XjrWorkflowOperateRecord::getRecordTime)
|
|
|
+ .eq(XjrWorkflowOperateRecord::getCreateUserId, StpUtil.getLoginIdAsLong())
|
|
|
+ .like(XjrWorkflowOperateRecord::getOperateInfo, user.getName())
|
|
|
+ .or()
|
|
|
+ .like(XjrWorkflowOperateRecord::getOperateInfo, user.getName())
|
|
|
+ .eq(XjrWorkflowOperateRecord::getProcessId, processInstanceId)
|
|
|
+ .or()
|
|
|
+ .like(XjrWorkflowOperateRecord::getOperateInfo, "脚本节点")
|
|
|
+ .eq(XjrWorkflowOperateRecord::getCreateUserId, StpUtil.getLoginIdAsLong())//脚本任务
|
|
|
+ .eq(XjrWorkflowOperateRecord::getProcessId, processInstanceId);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ workflowOperateRecordLambdaQueryWrapper.eq(XjrWorkflowOperateRecord::getProcessId, processInstanceId)
|
|
|
+ .orderByAsc(XjrWorkflowOperateRecord::getRecordTime);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<XjrWorkflowOperateRecord> workflowOperateRecords = xjrWorkflowOperateRecordMapper.selectList(workflowOperateRecordLambdaQueryWrapper);
|
|
|
+
|
|
|
+ List<ProcessRecordListVo> recordListVos = new ArrayList<>(workflowOperateRecords.size());
|
|
|
+ for (XjrWorkflowOperateRecord workflowOperateRecord : workflowOperateRecords) {
|
|
|
+ ProcessRecordListVo recordListVo = new ProcessRecordListVo();
|
|
|
+ recordListVo.setNodeType(workflowOperateRecord.getNodeType());
|
|
|
+ recordListVo.setNodeName(workflowOperateRecord.getNodeName());
|
|
|
+ recordListVo.setComment(workflowOperateRecord.getOperateInfo());
|
|
|
+ recordListVo.setStartTime(workflowOperateRecord.getRecordTime());
|
|
|
+ recordListVo.setCirculateMessage(workflowOperateRecord.getCirculateMessage());
|
|
|
+ recordListVos.add(recordListVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ return recordListVos;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
private void invokeAutoAgree(String processInstanceId, Long schemaId, WorkflowSchemaConfig workflowSchemaConfig, List<Task> taskList) {
|
|
|
|
|
|
@@ -4241,6 +4367,9 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
List<Long> allUserIds = new ArrayList<>();//所有自动同意审批的用户id
|
|
|
//新增流程发起流程记录
|
|
|
WorkflowRecord record = new WorkflowRecord();
|
|
|
+ //自定义流程发起记录
|
|
|
+ XjrWorkflowOperateRecord xjrWorkflowOperateRecord = new XjrWorkflowOperateRecord();
|
|
|
+
|
|
|
//候选审批人包含流程任务发起人
|
|
|
if (autoAgreeConfig.contains(WorkflowAutoAgreeType.APPROVED_INCLUDE_INITIATOR.getCode())) {
|
|
|
if (approveUserIds.contains(startUserId)) {
|
|
|
@@ -4308,6 +4437,9 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
if (isAgree) {
|
|
|
//自动同意之后完成本次任务
|
|
|
record.setRecordTime(LocalDateTime.now());
|
|
|
+
|
|
|
+ xjrWorkflowOperateRecord.setRecordTime(LocalDateTime.now());
|
|
|
+
|
|
|
taskService.complete(task.getId());
|
|
|
List<Task> list = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list();
|
|
|
String allOpinions = StringPool.EMPTY;
|
|
|
@@ -4321,12 +4453,19 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
String allNextTaskName = StrUtil.join(StringPool.SPACE, list.parallelStream().map(t -> "【" + t.getName() + "】").collect(Collectors.toList()));
|
|
|
|
|
|
String message = "【" + approveName + "】【自动同意】 审批, 审批意见为:“【" + allOpinions + "】”,由【" + task.getName() + "】流转到 " + allNextTaskName;
|
|
|
+ String operateInfo = "审批人:" + approveName + ", 审批结果:" + allOpinions + ", 审批内容:自动同意";
|
|
|
+
|
|
|
addProcessRecord(task, schemaId, message, record);
|
|
|
+ addCustomProcessRecord(task, schemaId, operateInfo, xjrWorkflowOperateRecord);
|
|
|
+
|
|
|
// 如果还有用户任务 则递归调用
|
|
|
invokeAutoAgree(processInstanceId, schemaId, workflowSchemaConfig, list);
|
|
|
} else {
|
|
|
String message = "【" + approveName + "】【自动同意】 审批, 审批意见为:“【" + allOpinions + "】”,由【" + task.getName() + "】流转到 结束节点";
|
|
|
+ String operateInfo = "审批人:" + approveName + ", 审批结果:" + allOpinions + ", 审批内容:自动同意";
|
|
|
+
|
|
|
addProcessRecord(task, schemaId, message, record);
|
|
|
+ addCustomProcessRecord(task, schemaId, operateInfo, xjrWorkflowOperateRecord);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -4642,6 +4781,22 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ private void addCustomProcessRecord(Task task, Long schemaId, String message, XjrWorkflowOperateRecord record) {
|
|
|
+
|
|
|
+ IXjrWorkflowOperateRecordService xjrWorkflowOperateRecordService = SpringUtil.getBean(IXjrWorkflowOperateRecordService.class);
|
|
|
+ //新增流程发起流程记录
|
|
|
+ record.setNodeId(task.getId());
|
|
|
+ record.setNodeName(task.getName());
|
|
|
+ record.setNodeType(WorkflowConstant.START_EVENT_TYPE_NAME);
|
|
|
+ record.setProcessId(task.getProcessInstanceId());
|
|
|
+ record.setSchemaId(schemaId);
|
|
|
+ record.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
|
|
|
+
|
|
|
+ record.setOperateInfo(message);
|
|
|
+
|
|
|
+ xjrWorkflowOperateRecordService.save(record);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 记录开始节点
|
|
|
@@ -4899,6 +5054,89 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
workflowRecordMapper.insert(record);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 新增工作流程信息数据
|
|
|
+ *
|
|
|
+ * @param userTaskConfig 用户任务配置信息
|
|
|
+ * @param nextTaskNameList 下一个节点的名称集合
|
|
|
+ * @param user 当前用户的对象
|
|
|
+ * @param record 工作流程信息的对象
|
|
|
+ * @param oldTaskName 前一个节点的名称
|
|
|
+ * @param buttonName 按钮名称
|
|
|
+ */
|
|
|
+ private void addCustomWorkflowRecord(UserTaskConfig userTaskConfig, List<String> nextTaskNameList, User user, XjrWorkflowOperateRecord record, String oldTaskName, String buttonName, String approvedContent, Task task, Object resultName) {
|
|
|
+ //单实例
|
|
|
+ if (userTaskConfig.getCountersignConfig().getMultipleInstancesType() == WorkflowMultiInstanceType.NONE.getCode()) {
|
|
|
+ //用户节点到结束节点或者脚本节点,点击按钮时,也需要设置流程信息
|
|
|
+ if (nextTaskNameList.size() == 0 && !buttonName.equals("")) {
|
|
|
+ String message = "审批人:" + user.getName() + ", 审批结果:" + buttonName + ", 审批内容:" + approvedContent;
|
|
|
+ record.setOperateInfo(message);
|
|
|
+ }
|
|
|
+ //单流向
|
|
|
+ if (nextTaskNameList.size() == 1) {
|
|
|
+ String message = "审批人:" + user.getName() + ", 审批结果:" + buttonName + ", 审批内容:" + approvedContent;
|
|
|
+ record.setOperateInfo(message);
|
|
|
+ }//多流向
|
|
|
+ if (nextTaskNameList.size() > 1) {
|
|
|
+ String message = "审批人:" + user.getName() + ", 审批结果:" + buttonName + ", 审批内容:" + approvedContent;
|
|
|
+ record.setOperateInfo(message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //多实例,判断是不是会签流程,以及会签流程的状态
|
|
|
+ else {
|
|
|
+ //判断是否达到完成条件
|
|
|
+ List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery().processInstanceIdIn(task.getProcessInstanceId()).list();
|
|
|
+ Boolean getCompleteConditional = isGetCompleteConditional(userTaskConfig, list);
|
|
|
+
|
|
|
+ //审批但未达到完成条件;审批信息:[会签][用户名] [审批按钮名称]审批,审批意见为:“[审批意见]”。
|
|
|
+ if (getCompleteConditional) {
|
|
|
+ //获取当前节点是否完成会签或者会签失败
|
|
|
+ if (ObjectUtil.isNotEmpty(resultName)) { //resultName只能从这个节点拿,不然会签节点后直接结束流程,就会拿不到流程变量信息
|
|
|
+ Boolean isSuccess = Boolean.valueOf(resultName.toString());
|
|
|
+ //审批达到完成条件,完成会签;审批信息:[会签][用户名] [审按名称]审批,审批见为:[审批意见]”,达到会签完成条件,由[上一节点名称]流转到下,多流向的情况则由[上一节点名称] 流转到[多流向节点名称]。
|
|
|
+ if (isSuccess) {
|
|
|
+ //用户节点到结束节点或者脚本节点,点击按钮时,也需要设置流程信息
|
|
|
+ if (nextTaskNameList.size() == 0 && !buttonName.equals("")) {
|
|
|
+ String message = "【会签】审批人:" + user.getName() + ", 审批结果:" + buttonName + ", 审批内容:" + approvedContent + ", 达到会签完成条件";
|
|
|
+ record.setOperateInfo(message);
|
|
|
+ }
|
|
|
+ //单流向
|
|
|
+ if (nextTaskNameList.size() == 1) {
|
|
|
+ String message = "【会签】审批人:" + user.getName() + ", 审批结果:" + buttonName + ", 审批内容:" + approvedContent + ", 达到会签完成条件";
|
|
|
+ record.setOperateInfo(message);
|
|
|
+ }//多流向
|
|
|
+ if (nextTaskNameList.size() > 1) {
|
|
|
+ String message = "【会签】审批人:" + user.getName() + ", 审批结果:" + buttonName + ", 审批内容:" + approvedContent + ", 达到会签完成条件";
|
|
|
+ record.setOperateInfo(message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //审批达到完成条件,会签失败;例如:审批信息:[会签][用户名][审按名称]审批,审批意见为:“[审批意见]”,未达到会签完成条件,由[管理层审批]流转到(部门审批]
|
|
|
+ if (buttonName.equals(WorkflowApproveType.DISAGREE.getValue())) {
|
|
|
+ //用户节点到结束节点或者脚本节点,点击按钮时,也需要设置流程信息
|
|
|
+ if (nextTaskNameList.size() == 0 && !buttonName.equals("")) {
|
|
|
+ String message = "【会签】审批人:" + user.getName() + ", 审批结果:" + buttonName + ", 审批内容:" + approvedContent + ",未达到会签完成条件";
|
|
|
+ record.setOperateInfo(message);
|
|
|
+ }
|
|
|
+ //单流向
|
|
|
+ if (nextTaskNameList.size() == 1) {
|
|
|
+ String message = "【会签】审批人:" + user.getName() + ", 审批结果:" + buttonName + ", 审批内容:" + approvedContent + ", 未达到会签完成条件";
|
|
|
+ record.setOperateInfo(message);
|
|
|
+ }//多流向
|
|
|
+ if (nextTaskNameList.size() > 1) {
|
|
|
+ String message = "【会签】审批人:" + user.getName() + ", 审批结果:" + buttonName + ", 审批内容:" + approvedContent + ", 未达到会签完成条件";
|
|
|
+ record.setOperateInfo(message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //审批但未达到完成条件;审批信息:[会签][用户名] [审批按钮名称]审批,审批意见为:“[审批意见]”。
|
|
|
+ String message = "【会签】审批人:" + user.getName() + ", 审批结果:" + buttonName + ", 审批内容:" + approvedContent + ", 未达到会签完成条件";
|
|
|
+ record.setOperateInfo(message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ xjrWorkflowOperateRecordMapper.insert(record);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 判断多实例是否达到完成条件
|
|
|
*
|
|
|
@@ -5082,6 +5320,30 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<UserDefinedProcessRecordListVo> listApproveRecord(ApproveRecordListDto dto) {
|
|
|
+ List<ProcessRecordListVo> processRecordListVos = this.getCustomProcessRecordListVos(dto.getProcessId(), 0);
|
|
|
+ List<UserDefinedProcessRecordListVo> userDefinedProcessRecordListVos = new ArrayList<>();
|
|
|
+ for(ProcessRecordListVo p : processRecordListVos){
|
|
|
+ String comment = p.getComment();
|
|
|
+ String[] commentArr = comment.split(",");
|
|
|
+ String[] approveUserNameArr = commentArr[0].split(":");
|
|
|
+ String[] approveResultArr = commentArr[1].split(":");
|
|
|
+ String[] approveCommentArr = commentArr[2].split(":");
|
|
|
+ userDefinedProcessRecordListVos.add(new UserDefinedProcessRecordListVo(){{
|
|
|
+ setNodeType(p.getNodeType());
|
|
|
+ setNodeName(p.getNodeName());
|
|
|
+ setComment(p.getComment());
|
|
|
+ setStartTime(p.getStartTime());
|
|
|
+ setCirculateMessage(p.getCirculateMessage());
|
|
|
+ setApproveUserName(approveUserNameArr[1]);
|
|
|
+ setApproveResult(approveResultArr[1]);
|
|
|
+ setApproveComment(approveCommentArr[1]);
|
|
|
+ }});
|
|
|
+ }
|
|
|
+ return userDefinedProcessRecordListVos;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 获取上一节点信息
|
|
|
* 分两种情况:
|