diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/ProcessConstants.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/ProcessConstants.java
index ca064a0..3633543 100644
--- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/ProcessConstants.java
+++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/ProcessConstants.java
@@ -79,6 +79,8 @@ public class ProcessConstants {
* 用户修改的任务完成时间字段key
*/
public static final String USER_MODIFY_TASK_FINISH_TIME_VARIABLE_KEY = "userModifyTaskFinishTime";
+// 表单变量,附件id
+ public static final String ATTACHMENT_IDS_VARIABLE_KEY = "attachmentIds";
}
diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/dto/FlowTaskDto.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/dto/FlowTaskDto.java
index 1bd7d5b..79e3e18 100644
--- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/dto/FlowTaskDto.java
+++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/dto/FlowTaskDto.java
@@ -1,16 +1,19 @@
package com.ruoyi.flowable.domain.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.system.domain.SysProject;
+import com.ruoyi.system.service.ISysProjectService;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
import java.util.Date;
-import java.util.List;
import java.util.Map;
+import java.util.Objects;
/**
*
工作流任务
@@ -100,11 +103,28 @@ public class FlowTaskDto implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date finishTime;
@ApiModelProperty("任务状态")
- private String status;
+ private String status;
@ApiModelProperty("工作问题")
- private String workIssue;
+ private String workIssue;
@ApiModelProperty("项目名称")
- private String projectName;
+ private String projectName;
+
+ public void extractIssue(Map variables) {
+ if (MapUtils.isNotEmpty(variables)) {
+ if (variables.containsKey("issue") && StringUtils.isNotBlank(MapUtils.getString(variables, "issue"))) {
+ this.setWorkIssue(MapUtils.getString(variables, "issue"));
+ }
+ }
+ }
+ public void extractProjectName(Map variables, ISysProjectService sysProjectService) {
+ if (MapUtils.isNotEmpty(variables)) {
+ if (variables.containsKey("projectId") && Objects.nonNull(MapUtils.getLong(variables, "projectId"))) {
+ Long projectId = MapUtils.getLong(variables, "projectId");
+ SysProject project = sysProjectService.selectSysProjectById(projectId);
+ this.setProjectName(Objects.nonNull(project) ? project.getName() : "");
+ }
+ }
+ }
}
diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/vo/AttachmentInfoVO.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/vo/AttachmentInfoVO.java
new file mode 100644
index 0000000..0fc63ca
--- /dev/null
+++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/vo/AttachmentInfoVO.java
@@ -0,0 +1,31 @@
+package com.ruoyi.flowable.domain.vo;
+
+import cn.hutool.core.img.ImgUtil;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.apache.commons.lang3.StringUtils;
+
+@Data
+@Accessors(chain = true)
+public class AttachmentInfoVO {
+
+ private String name;
+ private String type;
+ private String base64;
+ private Boolean isImg;
+ private Long id;
+
+ public void setIsImgByContentType(String contentType) {
+ if (StringUtils.contains(contentType, "image")) {
+ this.isImg = true;
+ return;
+ }
+ this.isImg = false;
+ }
+
+ public void setBase64ByFile(String path, String type) {
+ if (this.isImg) {
+ this.base64 = ImgUtil.toBase64(ImgUtil.read(path), type);
+ }
+ }
+}
diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/vo/FlowTaskVo.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/vo/FlowTaskVo.java
index c483430..ece4432 100644
--- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/vo/FlowTaskVo.java
+++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/vo/FlowTaskVo.java
@@ -1,9 +1,12 @@
package com.ruoyi.flowable.domain.vo;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -33,7 +36,7 @@ public class FlowTaskVo {
private String targetKey;
@ApiModelProperty("流程变量信息")
- private Map values;
+ private String vars;
@ApiModelProperty("审批人")
private String assignee;
@@ -43,4 +46,11 @@ public class FlowTaskVo {
@ApiModelProperty("审批组")
private List candidateGroups;
+
+ public Map getVars() {
+ if (StrUtil.isEmpty(this.vars)) {
+ return Collections.emptyMap();
+ }
+ return (Map )JSONUtil.toBean(this.vars, Map.class);
+ }
}
diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java
index a3d285f..e0e170d 100644
--- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java
+++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java
@@ -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 extractAndParseAttachment( Map result) {
+ if (MapUtils.isEmpty(result)) {
+ return result;
+ }
+ Map variables = ( Map)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 attachmentIds = StrUtil.split(MapUtils.getString(variables, ATTACHMENT_IDS_VARIABLE_KEY), ',', -1, true, Long::valueOf);
+ if (CollectionUtils.isEmpty(attachmentIds)) {
+ return result;
+ }
+ List 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 imgs = CollectionUtils.select(list, e -> e.getIsImg());
+ Collection 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 userModifyTaskFinishTime ,String taskId, Date taskEndTime) {
if (MapUtils.isEmpty(userModifyTaskFinishTime)) {
return taskEndTime;