Commit 1b1f5ac8 by 赵剑炜

重写record方法

parent 520709b3
......@@ -20,8 +20,10 @@ import lombok.SneakyThrows;
import org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent;
import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType;
import org.flowable.common.engine.impl.event.FlowableEntityEventImpl;
import org.flowable.engine.HistoryService;
import org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import org.flowable.variable.api.history.HistoricVariableInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
......@@ -35,6 +37,8 @@ import java.util.Map;
public class GlobalEndListener extends AbstractFlowableEngineEventListener {
@Resource
public OrderMainService orderMainService;
@Resource
private HistoryService historyService;
protected Logger logger = LoggerFactory.getLogger(this.getClass());
@SneakyThrows
......@@ -46,6 +50,10 @@ import java.util.Map;
// 获取流程定义ID
String processDefinitionId = event.getProcessDefinitionId();
List<HistoricVariableInstance> orderType = historyService.createHistoricVariableInstanceQuery().processInstanceId(processInstanceId).variableName("orderType").list();
String Type= orderType.get(0).getValue().toString();
if (Type.equals("workOrder"))//出入库单据
{
OrderMainReq req=new OrderMainReq();
req.setProcessId(processInstanceId);
OrderMain existOrder= orderMainService.getOne(new LambdaQueryWrapper<OrderMain>()
......@@ -56,29 +64,31 @@ import java.util.Map;
updateOrderReq.setExamineState("finished");
updateOrderReq.setOrderState("ready");
orderMainService.ChangeOrderState(updateOrderReq);
}
// 获取流程实例关联的变量
Map<String, Object> processVariables = getProcessVariables(processInstanceId);
if (processVariables!=null)
{
// 获取单据类型
String documentType = (String) processVariables.get("documentType");
updateOrderReq = JSONObject.parseObject(documentType, new TypeReference<UpdateOrderReq>() {
});
updateOrderReq.setExamineState("finished");
updateOrderReq.setOrderState("ready");
orderMainService.updateOrder(updateOrderReq);
// 获取单据类型
String orderReq = (String) processVariables.get("orderReq");
// 根据单据类型执行不同的操作
if ("equipment".equals(documentType)) {
// 执行装备相关操作,防止循环应用,丢入消息队列
orderMainService.AddOrder(updateOrderReq);
} else if ("personnel".equals(documentType)) {
// 执行人员相关操作
// ...
}
}
// Map<String, Object> processVariables = getProcessVariables(processInstanceId);
// if (processVariables!=null)
// {
// // 获取单据类型
// String documentType = (String) processVariables.get("documentType");
// updateOrderReq = JSONObject.parseObject(documentType, new TypeReference<UpdateOrderReq>() {
// });
// updateOrderReq.setExamineState("finished");
// updateOrderReq.setOrderState("ready");
// orderMainService.updateOrder(updateOrderReq);
// // 获取单据类型
// String orderReq = (String) processVariables.get("orderReq");
// // 根据单据类型执行不同的操作
// if ("equipment".equals(documentType)) {
// // 执行装备相关操作,防止循环应用,丢入消息队列
// orderMainService.AddOrder(updateOrderReq);
// } else if ("personnel".equals(documentType)) {
// // 执行人员相关操作
// // ...
// }
// }
}
......
......@@ -7,6 +7,7 @@ import com.junmp.junmpProcess.dto.TaskDTO;
import com.junmp.junmpProcess.service.IFlowInstanceService;
import com.junmp.junmpProcess.service.IFlowTaskService;
import com.junmp.junmpProcess.vo.HistoryProcessInstanceVO;
import com.junmp.junmpProcess.vo.RecordVO;
import com.junmp.junmpProcess.vo.TaskDetailVO;
import com.junmp.junmpProcess.vo.TaskVO;
import com.junmp.v2.common.bean.response.ApiRes;
......@@ -62,7 +63,7 @@ public class FlowTaskController {
@ApiOperation("通过流程实例查看审批记录")
@PostMapping("record")
public ApiRes<List<TaskDetailVO>> record(@RequestBody HandleDataDTO handleDataDTO) {
public ApiRes<RecordVO> record(@RequestBody HandleDataDTO handleDataDTO) {
return FlowTaskService.record(handleDataDTO.getProcessInstanceId());
}
......
package com.junmp.junmpProcess.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class FlowViewerDto implements Serializable {
/**
* 流程key
*/
private String key;
/**
* 是否完成(已经审批)
*/
private boolean completed;
}
......@@ -5,25 +5,6 @@ import lombok.Data;
import java.util.List;
/**
* @Author:LoveMyOrange
* @Description:
* @Date:Created in 2022/10/9 16:20
* <p>
* process: "
* {\"id\":\"root\",\
* "parentId\":null,\
* "type\":\"ROOT\",\
* "name\":\"发起人\",\
* "desc\":\"任何人\",\
* "props\":{\
* "assignedUser\":
* <p>
* <p>
* [{\"id\":1486186,\"name\":\"xx科技有限公司\",\"type\":\"dept\",\"sex\":null,\"selected\":false}],\
* "formPerms\":[{\"id\":\"field6131501574832\",\"title\":\"单行文本输入\",\"required\":true,\"perm\":\"E\"}]},\
* "children\":{\"id\":\"node_040730749764\",\"parentId\":\"root\",\"props\":{\"assignedType\":\"ASSIGN_USER\",\"mode\":\"AND\",\"sign\":true,\"nobody\":{\"handler\":\"TO_PASS\",\"assignedUser\":[]},\"timeLimit\":{\"timeout\":{\"unit\":\"H\",\"value\":\"1\"},\"handler\":{\"type\":\"REFUSE\",\"notify\":{\"once\":true,\"hour\":1}}},\"assignedUser\":[{\"id\":381496,\"name\":\"旅人\",\"type\":\"user\",\"sex\":false,\"selected\":false}],\"formPerms\":[{\"id\":\"field6131501574832\",\"title\":\"单行文本输入\",\"required\":true,\"perm\":\"R\"}],\"selfSelect\":{\"multiple\":false},\"leaderTop\":{\"endCondition\":\"TOP\",\"endLevel\":1},\"leader\":{\"level\":1},\"role\":[],\"refuse\":{\"type\":\"TO_END\",\"target\":\"\"},\"formUser\":\"\"},\"type\":\"APPROVAL\",\"name\":\"审批人\",\"children\":{}}}"
*/
@Data
public class ChildNode {
private String id;
......
......@@ -5,6 +5,7 @@ import com.junmp.junmpProcess.dto.ApplyDTO;
import com.junmp.junmpProcess.dto.HandleDataDTO;
import com.junmp.junmpProcess.dto.TaskDTO;
import com.junmp.junmpProcess.vo.HistoryProcessInstanceVO;
import com.junmp.junmpProcess.vo.RecordVO;
import com.junmp.junmpProcess.vo.TaskDetailVO;
import com.junmp.junmpProcess.vo.TaskVO;
import com.junmp.v2.common.bean.response.ApiRes;
......@@ -62,5 +63,5 @@ public interface IFlowTaskService {
*
* @return
*/
ApiRes<List<TaskDetailVO>> record(String processInstanceId);
ApiRes<RecordVO> record(String processInstanceId);
}
......@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.PageUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -13,13 +15,13 @@ import com.junmp.junmpProcess.common.utils.ReturnMsg;
import com.junmp.junmpProcess.dto.*;
import com.junmp.junmpProcess.dto.json.ProcessUser;
import com.junmp.junmpProcess.dto.json.UserInfo;
import com.junmp.junmpProcess.entity.ProcessTemplates;
import com.junmp.junmpProcess.factory.FlowServiceFactory;
import com.junmp.junmpProcess.mapper.OrgUserMapper;
import com.junmp.junmpProcess.service.IFlowInstanceService;
import com.junmp.junmpProcess.service.IFlowTaskService;
import com.junmp.junmpProcess.vo.AttachmentVO;
import com.junmp.junmpProcess.vo.HistoryProcessInstanceVO;
import com.junmp.junmpProcess.vo.TaskDetailVO;
import com.junmp.junmpProcess.vo.TaskVO;
import com.junmp.junmpProcess.service.Repository.ProcessTemplateService;
import com.junmp.junmpProcess.vo.*;
import com.junmp.v2.auth.api.bean.login.LoginUser;
import com.junmp.v2.auth.api.context.LoginContext;
import com.junmp.v2.common.bean.response.ApiRes;
......@@ -28,13 +30,17 @@ import com.junmp.v2.db.api.page.PageResult;
import com.junmp.v2.sys.user.entity.SysUser;
import com.junmp.v2.sys.user.service.SysUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.EndEvent;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.UserTask;
import org.flowable.common.engine.impl.identity.Authentication;
import org.flowable.engine.TaskService;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ActivityInstance;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.engine.task.Attachment;
......@@ -43,11 +49,14 @@ import org.flowable.task.api.DelegationState;
import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.variable.api.history.HistoricVariableInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.junmp.junmpProcess.common.CommonConstants.*;
......@@ -55,10 +64,13 @@ import static com.junmp.junmpProcess.common.CommonConstants.*;
@Service
@Slf4j
public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTaskService {
@Resource
private OrgUserMapper orgUserMapper;
@Resource
private SysUserService sysUserService;
@Autowired
private ProcessTemplateService processTemplateService;
@Autowired
private IFlowInstanceService flowInstanceService;
@Override
public ResponseResult agree(HandleDataDTO handleDataDTO) {
SysUser StartUser=new SysUser();
......@@ -80,7 +92,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (task!=null)//task为空则说明当前任务可能已结束
{
taskService.setVariableLocal(taskId,"taskStatusWrapper", TASK_STATUS_1);
taskService.setVariableLocal(taskId,"taskStatusWrapper", TASK_STATUS_1);//设置当前节点任务状态
Map<String, Object> map = new HashMap<>();
if (formData != null && formData.size() > 0) {
......@@ -406,17 +418,28 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
}
@Override
public ApiRes<List<TaskDetailVO>> record(String processInstanceId) {
public ApiRes<RecordVO> record(String processInstanceId) {
RecordVO vo=new RecordVO();
String tempID= flowInstanceService.getFormIdByInstanceId(processInstanceId);//先拿到表单id,然后通过表单拿到初始表结构
ProcessTemplates processTemplates = processTemplateService.getById(tempID);
Object formJson= processTemplates.getProcessJson();
List<Comment> processInstanceComments = taskService.getProcessInstanceComments(processInstanceId);
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
String deployId = historicProcessInstance.getDeploymentId();
Map<String, Object> result= Test(processInstanceId,deployId);
vo.setResult(result);
Map<String, List<Comment>> commentsMap = processInstanceComments.stream()
.collect(Collectors.groupingBy(Comment::getTaskId, Collectors.toList()));
List<Attachment> processInstanceAttachments = taskService.getProcessInstanceAttachments(processInstanceId);
Map<String, List<Attachment>> attachmentMap = processInstanceAttachments.stream()
.collect(Collectors.groupingBy(Attachment::getTaskId));
List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list();
List<TaskDetailVO> taskDetailVOS= new ArrayList<>();
for (HistoricActivityInstance historicActivityInstance : list) {
if("startEvent".equals(historicActivityInstance.getActivityType())){
TaskDetailVO taskDetailVO= new TaskDetailVO();
......@@ -426,8 +449,6 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
taskDetailVO.setTaskStatusWrapper("发起");
taskDetailVO.setCreateTime(historicActivityInstance.getStartTime());
taskDetailVO.setEndTime(historicActivityInstance.getEndTime());
// List<Comment> comments = commentsMap.get(historicActivityInstance.getTaskId());
// taskDetailVO.setComment(comments.get(0).getFullMessage());
if (historicActivityInstance.getAssignee()!=null)
{
SysUser user= sysUserService.getById(historicActivityInstance.getAssignee());
......@@ -438,10 +459,6 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
taskDetailVOS.add(taskDetailVO);
// taskDetailVO.setSignImage();
// taskDetailVO.setAttachmentVOList();
// taskDetailVO.setOptionVOList();
// taskDetailVO.setCommentVOList();
}
else if("endEvent".equals(historicActivityInstance.getActivityType())){
TaskDetailVO taskDetailVO= new TaskDetailVO();
......@@ -451,8 +468,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
taskDetailVO.setTaskStatusWrapper("结束");
taskDetailVO.setCreateTime(historicActivityInstance.getStartTime());
taskDetailVO.setEndTime(historicActivityInstance.getEndTime());
// List<Comment> comments = commentsMap.get(historicActivityInstance.getTaskId());
// taskDetailVO.setComment(comments.get(0).getFullMessage());
taskDetailVOS.add(taskDetailVO);
}
......@@ -470,7 +486,6 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
{
taskDetailVO.setTaskStatusWrapper(taskStatusWrapper.get(0).getValue().toString());
}
// taskDetailVO.setTaskStatusWrapper(historicActivityInstance.getVariable("taskStatusWrapper"));
if (historicActivityInstance.getAssignee()!=null)
{
SysUser user= sysUserService.getById(historicActivityInstance.getAssignee());
......@@ -480,7 +495,6 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
taskDetailVO.setName(historicActivityInstance.getActivityName());
taskDetailVO.setCreateTime(historicActivityInstance.getStartTime());
taskDetailVO.setEndTime(historicActivityInstance.getEndTime());
// taskDetailVO.setComment(comment.getFullMessage());
List<Attachment> attachments = attachmentMap.get(historicActivityInstance.getTaskId());
List<AttachmentVO> attachmentVOList = new ArrayList<>();
......@@ -508,12 +522,132 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
}
}
}
}
// 查询流程定义信息
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.deploymentId(deployId)
.singleResult();
// 获取所有任务节点信息
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
Collection<FlowElement> flowElements = bpmnModel.getMainProcess().getFlowElements();
// 构建任务节点信息的映射
Map<String, FlowElement> flowElementMap = flowElements.stream()
.filter(flowElement -> flowElement instanceof UserTask)
.collect(Collectors.toMap(FlowElement::getId, Function.identity()));
// 遍历所有任务节点和结束节点,如果不在已有任务列表中,则添加到结果中
for (FlowElement flowElement : flowElements) {
if (flowElement instanceof UserTask &&
!taskDetailVOS.stream().anyMatch(task -> task.getActivityId().equals(flowElement.getId()))) {
TaskDetailVO taskDetailVO = new TaskDetailVO();
taskDetailVO.setActivityId(flowElement.getId());
taskDetailVO.setName(flowElement.getName());
// 其他属性的设置,根据需要进行修改
// 将任务节点或结束节点添加到结果列表
taskDetailVOS.add(taskDetailVO);
}
}
JSONObject jsonForm = JSON.parseObject(formJson.toString());
JSONArray jsonArray2 = new JSONArray(Collections.singletonList(taskDetailVOS));
JSONObject formJsonObj= matchAndMergeData(jsonForm,jsonArray2);
vo.setFormJson(formJsonObj);
vo.setTaskVo(taskDetailVOS);
return ApiRes.success(vo);
}
private static JSONObject matchAndMergeData(JSONObject data1, JSONArray data2) {
if (data1.containsKey("id") && data1.containsKey("childNode")) {
String id1 = data1.getString("id");
// 获取第一条数据
JSONArray jsonArray = data2.getJSONArray(0);
// 查找匹配的数据
TaskDetailVO matchingData = jsonArray.stream()
.filter(item -> item instanceof TaskDetailVO)
.map(item -> (TaskDetailVO) item)
.filter(item -> id1.equals(removeNodePrefix(item.getActivityId())))
.findFirst()
.orElse(null);
// 如果找到匹配的数据,则将匹配的值设置到 data1 中
if (matchingData != null) {
if (matchingData.getTaskStatusWrapper()==null)
{
data1.put("status", "未进行");
}
else
{
data1.put("status", matchingData.getTaskStatusWrapper());
}
}
// 递归处理子节点
if (data1.containsKey("childNode") && data1.get("childNode") instanceof JSONObject) {
matchAndMergeData(data1.getJSONObject("childNode"), data2);
}
}
return data1;
}
return ApiRes.success(taskDetailVOS);
private static String removeNodePrefix(String activityId) {
// 移除前缀"Node_"
return activityId.startsWith("Node_") ? activityId.substring(5) : activityId;
}
private Map<String, Object> Test(String procInsId,String deployId)
{
try {
List<FlowViewerDto> flowViewerList = new ArrayList<>();
// 获取已经完成的节点
List<HistoricActivityInstance> listFinished = historyService.createHistoricActivityInstanceQuery()
.processInstanceId(procInsId)
.finished()
.list();
// 保存已经完成的流程节点编号
listFinished.forEach(s -> {
FlowViewerDto flowViewerDto = new FlowViewerDto();
flowViewerDto.setKey(s.getActivityId());
flowViewerDto.setCompleted(true);
flowViewerList.add(flowViewerDto);
});
// 获取代办节点
List<HistoricActivityInstance> listUnFinished = historyService.createHistoricActivityInstanceQuery()
.processInstanceId(procInsId)
.unfinished()
.list();
// 保存需要代办的节点编号
listUnFinished.forEach(s -> {
FlowViewerDto flowViewerDto = new FlowViewerDto();
flowViewerDto.setKey(s.getActivityId());
flowViewerDto.setCompleted(false);
flowViewerList.add(flowViewerDto);
});
Map<String, Object> result = new HashMap();
// xmlData 数据
ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deployId).singleResult();
InputStream inputStream = repositoryService.getResourceAsStream(definition.getDeploymentId(), definition.getResourceName());
String xmlData = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
result.put("nodeData", flowViewerList);
result.put("xmlData", xmlData);
return result;
} catch (Exception e) {
return null;
}
}
/**
* @Author: Zhaojw
* @Description: 为用户赋值
......
......@@ -133,7 +133,6 @@ public class BpmnConvert {
*/
private static Inout drawBzNode(Process process, JsonNode node,JsonNode formJson,String typeNode) {
// String id= "Node_"+UUID.randomUUID();
String id="root";
//创建发起人结点
UserTask task = new UserTask();
......
package com.junmp.junmpProcess.vo;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class RecordVO {
private List<TaskDetailVO> taskVo;
Map<String, Object> result;
JSONObject formJson;
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论