fix(attachment) review

approve-sys
bob 2 years ago
parent d02056c0e2
commit 76d1c33da4

@ -79,6 +79,8 @@ public class ProcessConstants {
* key * key
*/ */
public static final String USER_MODIFY_TASK_FINISH_TIME_VARIABLE_KEY = "userModifyTaskFinishTime"; public static final String USER_MODIFY_TASK_FINISH_TIME_VARIABLE_KEY = "userModifyTaskFinishTime";
// 表单变量附件id
public static final String ATTACHMENT_IDS_VARIABLE_KEY = "attachmentIds";
} }

@ -1,16 +1,19 @@
package com.ruoyi.flowable.domain.dto; package com.ruoyi.flowable.domain.dto;
import com.fasterxml.jackson.annotation.JsonFormat; 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.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
/** /**
* <p><p> * <p><p>
@ -107,4 +110,21 @@ public class FlowTaskDto implements Serializable {
@ApiModelProperty("项目名称") @ApiModelProperty("项目名称")
private String projectName; private String projectName;
public void extractIssue(Map<String, Object> 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<String, Object> 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() : "");
}
}
}
} }

@ -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);
}
}
}

@ -1,9 +1,12 @@
package com.ruoyi.flowable.domain.vo; 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.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -33,7 +36,7 @@ public class FlowTaskVo {
private String targetKey; private String targetKey;
@ApiModelProperty("流程变量信息") @ApiModelProperty("流程变量信息")
private Map<String, Object> values; private String vars;
@ApiModelProperty("审批人") @ApiModelProperty("审批人")
private String assignee; private String assignee;
@ -43,4 +46,11 @@ public class FlowTaskVo {
@ApiModelProperty("审批组") @ApiModelProperty("审批组")
private List<String> candidateGroups; private List<String> candidateGroups;
public Map<String, Object> getVars() {
if (StrUtil.isEmpty(this.vars)) {
return Collections.emptyMap();
}
return (Map<String, Object> )JSONUtil.toBean(this.vars, Map.class);
}
} }

@ -4,6 +4,7 @@ package com.ruoyi.flowable.service.impl;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.ruoyi.common.core.domain.AjaxResult; 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.FlowNextDto;
import com.ruoyi.flowable.domain.dto.FlowTaskDto; import com.ruoyi.flowable.domain.dto.FlowTaskDto;
import com.ruoyi.flowable.domain.dto.FlowViewerDto; 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.FlowTaskVo;
import com.ruoyi.flowable.domain.vo.UpdateVariablesSubmitDateVo; import com.ruoyi.flowable.domain.vo.UpdateVariablesSubmitDateVo;
import com.ruoyi.flowable.factory.FlowServiceFactory; 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.FindNextNodeUtil;
import com.ruoyi.flowable.flow.FlowableUtils; import com.ruoyi.flowable.flow.FlowableUtils;
import com.ruoyi.flowable.service.IFlowTaskService; import com.ruoyi.flowable.service.IFlowTaskService;
import com.ruoyi.flowable.service.ISysDeployFormService;
import com.ruoyi.system.domain.SysProject; import com.ruoyi.system.domain.SysProject;
import com.ruoyi.system.service.ISysAttachmentService;
import com.ruoyi.system.service.ISysProjectService; import com.ruoyi.system.service.ISysProjectService;
import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISysUserService;
@ -65,6 +67,7 @@ import java.util.function.Function;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; 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; 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 @Resource
private ISysDeployFormService sysInstanceFormService; private ISysAttachmentService sysAttachmentService;
@Resource @Resource
private ISysProjectService sysProjectService; private ISysProjectService sysProjectService;
@ -102,12 +105,12 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
} }
if (DelegationState.PENDING.equals(task.getDelegationState())) { if (DelegationState.PENDING.equals(task.getDelegationState())) {
taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.DELEGATE.getType(), taskVo.getComment()); taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.DELEGATE.getType(), taskVo.getComment());
taskService.resolveTask(taskVo.getTaskId(), taskVo.getValues()); taskService.resolveTask(taskVo.getTaskId(), taskVo.getVars());
} else { } else {
taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.NORMAL.getType(), taskVo.getComment()); taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.NORMAL.getType(), taskVo.getComment());
Long userId = SecurityUtils.getLoginUser().getUser().getUserId(); Long userId = SecurityUtils.getLoginUser().getUser().getUserId();
taskService.setAssignee(taskVo.getTaskId(), userId.toString()); 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()); runtimeService.updateBusinessStatus(taskVo.getInstanceId(), FlowStatus.APPROVING.getValue());
return AjaxResult.success(); return AjaxResult.success();
@ -647,13 +650,16 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
// 流程发起人信息 // 流程发起人信息
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(task.getProcessInstanceId()) .processInstanceId(task.getProcessInstanceId()).includeProcessVariables()
.singleResult(); .singleResult();
SysUser startUser = sysUserService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId())); SysUser startUser = sysUserService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId()));
// SysUser startUser = sysUserService.selectUserById(Long.parseLong(task.getAssignee())); // SysUser startUser = sysUserService.selectUserById(Long.parseLong(task.getAssignee()));
flowTask.setStartUserId(startUser.getNickName()); flowTask.setStartUserId(startUser.getNickName());
flowTask.setStartUserName(startUser.getNickName()); flowTask.setStartUserName(startUser.getNickName());
flowTask.setStartDeptName(startUser.getDept().getDeptName()); flowTask.setStartDeptName(startUser.getDept().getDeptName());
flowTask.extractIssue(historicProcessInstance.getProcessVariables());
flowTask.extractProjectName(historicProcessInstance.getProcessVariables(),sysProjectService);
flowList.add(flowTask); flowList.add(flowTask);
} }
@ -797,10 +803,6 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
map.put("finished", false); map.put("finished", false);
} }
// ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
// .processInstanceId(procInsId)
// .includeProcessVariables()
// .singleResult();
if (Objects.nonNull(processInstance)) { if (Objects.nonNull(processInstance)) {
map.put("form", processInstance.getProcessVariables()); map.put("form", processInstance.getProcessVariables());
} else { } else {
@ -808,15 +810,50 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
.processInstanceId(procInsId) .processInstanceId(procInsId)
.includeProcessVariables() .includeProcessVariables()
.singleResult(); .singleResult();
Optional.of(historicProcessInstance) if (Objects.nonNull(historicProcessInstance)) {
.ifPresent(e -> map.put("form", historicProcessInstance.getProcessVariables())); map.put("form", historicProcessInstance.getProcessVariables());
}
} }
map = extractAndParseAttachment(map);
} }
return AjaxResult.success(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) { public static Date parseFinishTime(Map<String, Object> userModifyTaskFinishTime ,String taskId, Date taskEndTime) {
if (MapUtils.isEmpty(userModifyTaskFinishTime)) { if (MapUtils.isEmpty(userModifyTaskFinishTime)) {
return taskEndTime; return taskEndTime;

Loading…
Cancel
Save