|
|
|
@ -4,6 +4,7 @@ package com.ruoyi.flowable.service.impl;
|
|
|
|
|
import cn.hutool.core.date.DatePattern;
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
import com.ruoyi.common.core.domain.AjaxResult;
|
|
|
|
@ -18,6 +19,7 @@ import com.ruoyi.flowable.domain.dto.FlowCommentDto;
|
|
|
|
|
import com.ruoyi.flowable.domain.dto.FlowNextDto;
|
|
|
|
|
import com.ruoyi.flowable.domain.dto.FlowTaskDto;
|
|
|
|
|
import com.ruoyi.flowable.domain.dto.FlowViewerDto;
|
|
|
|
|
import com.ruoyi.flowable.domain.vo.AttachmentInfoVO;
|
|
|
|
|
import com.ruoyi.flowable.domain.vo.FlowTaskVo;
|
|
|
|
|
import com.ruoyi.flowable.domain.vo.UpdateVariablesSubmitDateVo;
|
|
|
|
|
import com.ruoyi.flowable.factory.FlowServiceFactory;
|
|
|
|
@ -25,8 +27,8 @@ import com.ruoyi.flowable.flow.CustomProcessDiagramGenerator;
|
|
|
|
|
import com.ruoyi.flowable.flow.FindNextNodeUtil;
|
|
|
|
|
import com.ruoyi.flowable.flow.FlowableUtils;
|
|
|
|
|
import com.ruoyi.flowable.service.IFlowTaskService;
|
|
|
|
|
import com.ruoyi.flowable.service.ISysDeployFormService;
|
|
|
|
|
import com.ruoyi.system.domain.SysProject;
|
|
|
|
|
import com.ruoyi.system.service.ISysAttachmentService;
|
|
|
|
|
import com.ruoyi.system.service.ISysProjectService;
|
|
|
|
|
import com.ruoyi.system.service.ISysRoleService;
|
|
|
|
|
import com.ruoyi.system.service.ISysUserService;
|
|
|
|
@ -65,6 +67,7 @@ import java.util.function.Function;
|
|
|
|
|
import java.util.function.Predicate;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
import static com.ruoyi.flowable.common.constant.ProcessConstants.ATTACHMENT_IDS_VARIABLE_KEY;
|
|
|
|
|
import static com.ruoyi.flowable.common.constant.ProcessConstants.USER_MODIFY_TASK_FINISH_TIME_VARIABLE_KEY;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -84,7 +87,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private ISysDeployFormService sysInstanceFormService;
|
|
|
|
|
private ISysAttachmentService sysAttachmentService;
|
|
|
|
|
@Resource
|
|
|
|
|
private ISysProjectService sysProjectService;
|
|
|
|
|
|
|
|
|
@ -102,12 +105,12 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
|
|
|
|
|
}
|
|
|
|
|
if (DelegationState.PENDING.equals(task.getDelegationState())) {
|
|
|
|
|
taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.DELEGATE.getType(), taskVo.getComment());
|
|
|
|
|
taskService.resolveTask(taskVo.getTaskId(), taskVo.getValues());
|
|
|
|
|
taskService.resolveTask(taskVo.getTaskId(), taskVo.getVars());
|
|
|
|
|
} else {
|
|
|
|
|
taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.NORMAL.getType(), taskVo.getComment());
|
|
|
|
|
Long userId = SecurityUtils.getLoginUser().getUser().getUserId();
|
|
|
|
|
taskService.setAssignee(taskVo.getTaskId(), userId.toString());
|
|
|
|
|
taskService.complete(taskVo.getTaskId(), taskVo.getValues());
|
|
|
|
|
taskService.complete(taskVo.getTaskId(), taskVo.getVars());
|
|
|
|
|
}
|
|
|
|
|
runtimeService.updateBusinessStatus(taskVo.getInstanceId(), FlowStatus.APPROVING.getValue());
|
|
|
|
|
return AjaxResult.success();
|
|
|
|
@ -647,13 +650,16 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
|
|
|
|
|
|
|
|
|
|
// 流程发起人信息
|
|
|
|
|
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
|
|
|
|
|
.processInstanceId(task.getProcessInstanceId())
|
|
|
|
|
.processInstanceId(task.getProcessInstanceId()).includeProcessVariables()
|
|
|
|
|
.singleResult();
|
|
|
|
|
SysUser startUser = sysUserService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId()));
|
|
|
|
|
// SysUser startUser = sysUserService.selectUserById(Long.parseLong(task.getAssignee()));
|
|
|
|
|
flowTask.setStartUserId(startUser.getNickName());
|
|
|
|
|
flowTask.setStartUserName(startUser.getNickName());
|
|
|
|
|
flowTask.setStartDeptName(startUser.getDept().getDeptName());
|
|
|
|
|
flowTask.extractIssue(historicProcessInstance.getProcessVariables());
|
|
|
|
|
flowTask.extractProjectName(historicProcessInstance.getProcessVariables(),sysProjectService);
|
|
|
|
|
|
|
|
|
|
flowList.add(flowTask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -797,10 +803,6 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
|
|
|
|
|
map.put("finished", false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
|
|
|
|
|
// .processInstanceId(procInsId)
|
|
|
|
|
// .includeProcessVariables()
|
|
|
|
|
// .singleResult();
|
|
|
|
|
if (Objects.nonNull(processInstance)) {
|
|
|
|
|
map.put("form", processInstance.getProcessVariables());
|
|
|
|
|
} else {
|
|
|
|
@ -808,15 +810,50 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
|
|
|
|
|
.processInstanceId(procInsId)
|
|
|
|
|
.includeProcessVariables()
|
|
|
|
|
.singleResult();
|
|
|
|
|
Optional.of(historicProcessInstance)
|
|
|
|
|
.ifPresent(e -> map.put("form", historicProcessInstance.getProcessVariables()));
|
|
|
|
|
if (Objects.nonNull(historicProcessInstance)) {
|
|
|
|
|
map.put("form", historicProcessInstance.getProcessVariables());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
map = extractAndParseAttachment(map);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return AjaxResult.success(map);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Map<String, Object> extractAndParseAttachment( Map<String, Object> result) {
|
|
|
|
|
if (MapUtils.isEmpty(result)) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
Map<String, Object> variables = ( Map<String, Object>)MapUtils.getMap(result, "form",new HashMap<>());
|
|
|
|
|
// get AttachmentIds
|
|
|
|
|
if (!variables.containsKey(ATTACHMENT_IDS_VARIABLE_KEY) || StringUtils.isBlank(MapUtils.getString(variables,ATTACHMENT_IDS_VARIABLE_KEY))) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
// get Attachment info
|
|
|
|
|
List<Long> attachmentIds = StrUtil.split(MapUtils.getString(variables, ATTACHMENT_IDS_VARIABLE_KEY), ',', -1, true, Long::valueOf);
|
|
|
|
|
if (CollectionUtils.isEmpty(attachmentIds)) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
List<AttachmentInfoVO> list = attachmentIds.stream().map(e -> sysAttachmentService.selectSysAttachmentById(e)).map(e->{
|
|
|
|
|
AttachmentInfoVO vo = new AttachmentInfoVO();
|
|
|
|
|
vo.setIsImgByContentType(e.getContentType());
|
|
|
|
|
vo.setBase64ByFile(e.getPath(),e.getType());
|
|
|
|
|
vo.setId(e.getId());
|
|
|
|
|
vo.setName(e.getName());
|
|
|
|
|
vo.setType(e.getType());
|
|
|
|
|
return vo;
|
|
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
Collection<AttachmentInfoVO> imgs = CollectionUtils.select(list, e -> e.getIsImg());
|
|
|
|
|
Collection<AttachmentInfoVO> files = CollectionUtils.selectRejected(list, e -> e.getIsImg());
|
|
|
|
|
result.put("imgs", imgs);
|
|
|
|
|
result.put("files", files);
|
|
|
|
|
return result;
|
|
|
|
|
// build result Attachment type 、 name、id
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Date parseFinishTime(Map<String, Object> userModifyTaskFinishTime ,String taskId, Date taskEndTime) {
|
|
|
|
|
if (MapUtils.isEmpty(userModifyTaskFinishTime)) {
|
|
|
|
|
return taskEndTime;
|
|
|
|
|