Commit e44d51d5 by 赵剑炜

Merge branch 'develop' of http://gitlab.sothing.top/843502640/jyzb_platformV2 into develop-zhaojw

parents 62bdc370 07b39c93
...@@ -115,4 +115,121 @@ Thumbs.db ...@@ -115,4 +115,121 @@ Thumbs.db
/jyzb-api/src/main/java/com/junmp/jyzb/api/bean/req/UpdateOrderReq.java /jyzb-api/src/main/java/com/junmp/jyzb/api/bean/req/UpdateOrderReq.java
/jyzb-boot/src/main/resources/application-local.yml /jyzb-boot/src/main/resources/application-local.yml
/jyzb-boot/src/main/resources/application-local.yml /jyzb-boot/src/main/resources/application-local.yml
/jyzb-process/target
/jyzb-api/target/
/jyzb-biz/target/
##ignore this file##
/target/
.classpath
.project
/.settings/
##filter databfile、sln file##
*.mdb
*.ldb
*.sln
##class file##
*.com
*.class
*.dll
*.exe
*.o
*.so
# compression file
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
*.via
*.tmp
*.err
# OS generated files #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db
/*/target/*
/.idea/misc.xml
/.idea/jyzb_platformV2.iml
/.idea/artifacts/jyzb3.xml
/jyzb-mq/jyzb-mq-consumer/target/classes/application.yml
/jyzb-mq/jyzb-mq-producer/target/classes/application.yml
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
/jyzb-mq/jyzb-mq-producer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
/jyzb-mq/jyzb-mq-producer/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
/jyzb-mq/jyzb-mq-producer/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
/jyzb-boot/src/main/resources/application.yml
/jyzb-boot/pom.xml
/.idea/encodings.xml
/jyzb-api/jyzb-api.iml
/jyzb-boot/pom.xml
/jyzb-boot/src/main/resources/application-local.yml
/.idea/modules.xml
/.idea/modules.xml
/jyzb-biz/jyzb-biz.iml
/.idea/modules.xml
/jyzb-boot/jyzb-boot.iml
/jyzb-mq/jyzb-mq-producer/jyzb-mq-producer.iml
/jyzb-mq/jyzb-mq-consumer/jyzb-mq-consumer.iml
/.idea/modules.xml
/.idea/compiler.xml
/.idea/modules.xml
/.idea/dataSources.xml
/.idea/mybatisx/templates.xml
/.idea/dataSources.xml
/pom.xml
/.idea/compiler.xml
/.idea/modules.xml
/pom.xml
/jyzb-biz/jyzb-biz.iml
/jyzb-biz/jyzb-biz.iml
/jyzb-mq/jyzb-mq-producer/pom.xml
/jyzb-biz/jyzb-biz.iml
/jyzb-mq/pom.xml
/jyzb-mq/jyzb-mq.iml
/jyzb-mq/jyzb-mq-consumer/pom.xml
/jyzb-mq/jyzb-mq-consumer/src/main/java/com/junmp/jyzb/config/DirectRabbitConfig.java
/jyzb-mq/jyzb-mq-consumer/src/main/java/com/junmp/jyzb/config/DirectReceiver.java
/jyzb-mq/jyzb-mq-consumer/src/main/java/com/junmp/jyzb/config/DirectReceiver.java.orig
/jyzb-mq/jyzb-mq-consumer/src/main/java/com/junmp/jyzb/controller/SendMsgController.java
/jyzb-mq/jyzb-mq-consumer/src/main/java/com/junmp/jyzb/MqConsumerApplication.java
/jyzb-mq/jyzb-mq-consumer/src/main/resources/application.yml
/jyzb-mq/jyzb-mq-consumer/target/maven-archiver/pom.properties
/jyzb-mq/jyzb-mq-producer/src/main/java/com/junmp/jyzb/config/DirectRabbitConfig.java
/jyzb-mq/jyzb-mq-producer/src/main/java/com/junmp/jyzb/controller/SendMsgController.java
/jyzb-mq/jyzb-mq-producer/src/main/java/com/junmp/jyzb/MqProducerApplication.java
/jyzb-mq/jyzb-mq-producer/src/main/resources/application.yml
/jyzb-mq/jyzb-mq-producer/target/maven-archiver/pom.properties
/jyzb-biz/jyzb-biz.iml
/jyzb-biz/src/main/java/com/junmp/jyzb/config/rabbitMQ/RabbitmqConfig.java
/jyzb-boot/src/main/resources/application.yml
/jyzb-boot/src/main/resources/application-local.yml
/jyzb-boot/src/main/resources/application.yml
/jyzb-boot/src/main/resources/application-local.yml
/jyzb-boot/src/main/resources/application.yml
/jyzb-boot/src/main/resources/application-local.yml
/pom.xml
/pom.xml
/jyzb-biz/src/main/java/com/junmp/jyzb/service/impl/OrderMainServiceImpl.java.orig
/jyzb-biz/pom.xml
/.idea/compiler.xml
/jyzb-api/src/main/java/com/junmp/jyzb/api/bean/req/UpdateOrderReq.java
/jyzb-boot/src/main/resources/application-local.yml
/jyzb-boot/src/main/resources/application-local.yml /jyzb-boot/src/main/resources/application-local.yml
/jyzb-biz/jyzb-biz.iml
/jyzb-process/target
/jyzb-api/target/
/jyzb-biz/target/
##ignore this file##
/target/
.classpath
.project
/.settings/
##filter databfile、sln file##
*.mdb
*.ldb
*.sln
##class file##
*.com
*.class
*.dll
*.exe
*.o
*.so
# compression file
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
*.via
*.tmp
*.err
# OS generated files #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db
/*/target/*
/.idea/misc.xml
/.idea/jyzb_platformV2.iml
/.idea/artifacts/jyzb3.xml
/jyzb-mq/jyzb-mq-consumer/target/classes/application.yml
/jyzb-mq/jyzb-mq-producer/target/classes/application.yml
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
/jyzb-mq/jyzb-mq-producer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
/jyzb-mq/jyzb-mq-producer/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
/jyzb-mq/jyzb-mq-producer/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
/jyzb-mq/jyzb-mq-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
/jyzb-boot/src/main/resources/application.yml
/jyzb-boot/pom.xml
/.idea/encodings.xml
<<<<<<< HEAD
/jyzb-boot/src/main/resources/application.yml
=======
/jyzb-api/jyzb-api.iml
/jyzb-api/jyzb-api.iml
>>>>>>> develop
package com.junmp.junmpProcess.service.Bussiness.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.PageUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import com.junmp.junmpProcess.cmd.DeleteFlowableProcessInstanceCmd;
import com.junmp.junmpProcess.common.utils.HttpStatus;
import com.junmp.junmpProcess.common.utils.ResponseResult;
import com.junmp.junmpProcess.common.utils.ReturnMsg;
import com.junmp.junmpProcess.dto.*;
import com.junmp.junmpProcess.dto.json.*;
import com.junmp.junmpProcess.entity.ProcessTemplates;
import com.junmp.junmpProcess.exception.WorkFlowException;
import com.junmp.junmpProcess.mapper.OrgUserMapper;
import com.junmp.junmpProcess.mapper.ProcessTemplatesMapper;
import com.junmp.junmpProcess.mapper.TemplateGroupMapper;
import com.junmp.junmpProcess.service.Bussiness.WorkProcessService;
import com.junmp.junmpProcess.service.Repository.ProcessTemplateService;
import com.junmp.junmpProcess.utils.IdWorker;
import com.junmp.junmpProcess.utils.SpringContextHolder;
import com.junmp.junmpProcess.vo.*;
import com.junmp.jyzb.api.bean.query.ProcessReq.FormReq;
import com.junmp.jyzb.api.bean.query.ProcessReq.SuspendOrActivateDefinitionReq;
import com.junmp.v2.auth.api.LoginUserApi;
import com.junmp.v2.auth.api.bean.login.LoginUser;
import com.junmp.v2.auth.api.context.LoginContext;
import com.junmp.v2.common.bean.request.BaseRequest;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.db.api.factory.PageResultFactory;
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 org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.flowable.bpmn.BpmnAutoLayout;
import org.flowable.bpmn.model.*;
import org.flowable.bpmn.model.Process;
import org.flowable.common.engine.impl.identity.Authentication;
import org.flowable.engine.*;
import org.flowable.engine.delegate.ExecutionListener;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.history.HistoricProcessInstanceQuery;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ActivityInstance;
import org.flowable.engine.runtime.Execution;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.engine.runtime.ProcessInstanceBuilder;
import org.flowable.engine.task.Attachment;
import org.flowable.engine.task.Comment;
import org.flowable.task.api.DelegationState;
import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance;
import com.junmp.junmpProcess.common.Result;
import com.junmp.junmpProcess.common.WorkFlowConstants;
import com.junmp.junmpProcess.dto.json.flowJson.FlowChildNode;
import com.junmp.junmpProcess.dto.json.flowJson.Inout;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import org.flowable.task.service.impl.persistence.entity.TaskEntityImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
import static com.junmp.junmpProcess.common.CommonConstants.*;
import static com.junmp.junmpProcess.common.WorkFlowConstants.PROCESS_PREFIX;
import static com.junmp.junmpProcess.utils.BpmnConvert.toBpmn;
import static com.junmp.junmpProcess.utils.BpmnModelUtils.*;
@Service
public class WorkProcessServiceImpl extends ServiceImpl<ProcessTemplatesMapper, ProcessTemplates> implements WorkProcessService {
@Autowired
private ProcessTemplateService processTemplateService;
@Resource
private RepositoryService repositoryService;
@Autowired
protected ManagementService managementService;
@Resource
private OrgUserMapper orgUserMapper;
@Resource
private SysUserService sysUserService;
@Resource
private RuntimeService runtimeService;
@Resource
private HistoryService historyService;
@Resource
private TaskService taskService;
@Resource
private IdWorker idWorker;
/**
* 创建子任务
*
* @param ptask 创建子任务
* @param assignee 子任务的执行人
* @return
*/
protected TaskEntity createSubTask(TaskEntity ptask, String ptaskId, String assignee) {
TaskEntity task = null;
if (ptask != null) {
//1.生成子任务
task = (TaskEntity) taskService.newTask(UUID.randomUUID().toString());
task.setCategory(ptask.getCategory());
task.setDescription(ptask.getDescription());
task.setTenantId(ptask.getTenantId());
task.setAssignee(assignee);
task.setName(ptask.getName());
task.setParentTaskId(ptaskId);
task.setProcessDefinitionId(ptask.getProcessDefinitionId());
task.setProcessInstanceId(ptask.getProcessInstanceId());
task.setTaskDefinitionKey(ptask.getTaskDefinitionKey());
task.setTaskDefinitionId(ptask.getTaskDefinitionId());
task.setPriority(ptask.getPriority());
task.setCreateTime(new Date());
taskService.saveTask(task);
}
return task;
}
public Boolean turn(TurnVo turns)
{
TaskEntityImpl currTask = (TaskEntityImpl) taskService.createTaskQuery().taskId(turns.getTaskId()).singleResult();
if (currTask != null) {
//1.生成历史记录
TaskEntity task =this.createSubTask(currTask,currTask.getId(),turns.getUserId());
//2.添加审批意见
// this.addComment(task.getId(), turnTaskVo.getUserCode(), turnTaskVo.getProcessInstanceId(), CommentTypeEnum.ZB.toString(), turnTaskVo.getMessage());
taskService.saveTask(task);
taskService.complete(task.getId());
//3.转办
taskService.setAssignee(turns.getTaskId(), turns.getUserId());
String[] assigneeList=turns.getAssigneeList();
for (String owner :assigneeList
) {
taskService.setOwner(turns.getTaskId(), owner);
}
return true;
} else {
return false;
}
}
public PageResult<TemplateGroupVo> getFormList(BaseRequest br)
{
LambdaQueryWrapper<ProcessTemplates> wrapper = new LambdaQueryWrapper<ProcessTemplates>();
wrapper.orderByDesc(ProcessTemplates::getUpdated);
TemplateGroupMapper templateGroupMapper = SpringContextHolder.getBean(TemplateGroupMapper.class);
Page<ProcessTemplates> allformAndGroups =this.page(PageFactory.getDefaultPage(),wrapper);
// templateGroupMapper.getAllFormAndGroups();
Map<Integer, List<ProcessTemplates>> coverMap = new LinkedHashMap<>();
allformAndGroups.getRecords().forEach(fg -> {
List<ProcessTemplates> bos = coverMap.get(fg.getGroupId());
if (CollectionUtil.isEmpty(bos)) {
List<ProcessTemplates> list = new ArrayList<>();
list.add(fg);
coverMap.put(fg.getGroupId(), list);
} else {
bos.add(fg);
}
});
PageResult<TemplateGroupVo> pageResult=new PageResult<TemplateGroupVo>();
coverMap.forEach((key, val) -> {
List<TemplateGroupVo> templates = new ArrayList<>();
val.forEach(v -> {
if (ObjectUtil.isNotNull(v.getTemplateId())) {
String defId="";
ProcessDefinition ProDef=repositoryService.createProcessDefinitionQuery()
.processDefinitionKey("Process_"+v.getTemplateId())
.latestVersion()
.singleResult();
if(ProDef!=null)
{
defId=ProDef.getId();
}
templates.add(TemplateGroupVo.builder()
.formId(v.getTemplateId())
.remark(v.getRemark())
.formName(v.getFormName())
.isStop(v.getIsStop())
.updated(DateFormatUtils.format(v.getUpdated(),"yyyy年MM月dd日 HH时:mm分:ss秒"))
.templateId(v.getTemplateId())
.processDefinitionId(defId)
.build());
}
});
pageResult.setRecords( templates);
});
pageResult.setPageSize(allformAndGroups.getSize());
pageResult.setTotalRows( allformAndGroups.getTotal());
pageResult.setPageNo(allformAndGroups.getPages());
pageResult.setTotalPage(PageUtil.totalPage(Convert.toInt(pageResult.getTotalRows()), Convert.toInt(pageResult.getPageSize())));
return pageResult;
}
public List<EndEvent> findEndFlowElement(String processDefId) {
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefId);
if (bpmnModel != null) {
Process process = bpmnModel.getMainProcess();
return process.findFlowElementsOfType(EndEvent.class);
} else {
return null;
}
}
// /**
// * @Author: Zhaojw
// * @Description: 终止流程实例
// * @DateTime: 2023/7/24 15:17
// * @Params:
// * @Return
// */
public ApiRes<Boolean> stopProcessInstanceById(HandleDataDTO handleDataDTO)
{
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(handleDataDTO.getProcessInstanceId()).singleResult();
if (processInstance != null) {
//2、执行终止
List<Execution> executions = runtimeService.createExecutionQuery().parentId(handleDataDTO.getProcessInstanceId()).list();
List<String> executionIds = new ArrayList<>();
List<EndEvent> endNodes = this.findEndFlowElement(processInstance.getProcessDefinitionId());
String endId = endNodes.get(0).getId();
executions.forEach(execution -> executionIds.add(execution.getId()));
runtimeService.createChangeActivityStateBuilder()
.moveExecutionsToSingleActivityId(executionIds, endId)
.changeState();
return ApiRes.success(true);
}else {
return ApiRes.failure("不存在运行的流程实例,请确认!");
}
}
/**
* @Author: Zhaojw
* @Description: 创建新表单
* @DateTime: 2023/7/24 11:50
* @Params:
* @Return
*/
public Boolean createNewForm(FormReq req) {
ProcessTemplates processTemplates = ProcessTemplates.builder().build();
String templateId = idWorker.nextId()+"";
processTemplates.setTemplateId(templateId);
processTemplates.setFormName(req.getFormName());
processTemplates.setRemark(req.getRemark());
processTemplates.setIsStop(true);
Date date= new Date();
processTemplates.setUpdated(date);
processTemplateService.save(processTemplates);
return true;
}
@Override
public Boolean suspendOrActivateProcessDefinitionById(SuspendOrActivateDefinitionReq req) {
<<<<<<< HEAD
ProcessTemplates processTemplates = processTemplateService.getById(req.getFormId());
=======
// ProcessTemplates processTemplates = processTemplateService.getById(req.getTemplateId());
ProcessTemplates processTemplates = processTemplateService.getById(req.getProcessDefinitionId());
>>>>>>> e81b1ed8a1eb0658c7920604e063a9d64b1edd64
if (req.getIsStop() == true){
repositoryService.suspendProcessDefinitionById(req.getProcessDefinitionId(), true, null);
processTemplates.setIsStop(true);
}else {
processTemplates.setIsStop(false);
repositoryService.activateProcessDefinitionById(req.getProcessDefinitionId(), true, null);
}
processTemplates.setUpdated(new Date());
return processTemplateService.updateById(processTemplates);//更新表单明细表信息
}
public Boolean createBpmn(ProcessVO processVO) throws JsonProcessingException {
//流程定义
ObjectMapper objectMapper = new ObjectMapper();
JsonNode processJsonNode = objectMapper.readTree(processVO.getProcessJson());
JsonNode formJsonNode = objectMapper.readTree(processVO.getFormJson());
String formName=processVO.getFormName().toString();
ProcessTemplates processTemplates = ProcessTemplates.builder().build();
String templateId = idWorker.nextId()+"";
processTemplates.setTemplateId(templateId);
processTemplates.setFormJson(formJsonNode.toString());
processTemplates.setProcessJson(processJsonNode.toString());
processTemplates.setFormName(processVO.getFormName());
processTemplates.setIsStop(false);
Date date= new Date();
processTemplates.setUpdated(date);
processTemplateService.save(processTemplates);
//json转换为bpmn
BpmnModel bpmnModel = toBpmn(processJsonNode,formJsonNode,formName,templateId);
Deployment deploy = repositoryService.createDeployment()
.addBpmnModel(formName+".bpmn20.xml", bpmnModel)
.name(formName)
.category(templateId)
.deploy();
return true;
}
/**
* @Author: Zhaojw
* @Description: 删除流程实例
* @DateTime: 2023/7/22 10:16
* @Params:
* @Return
*/
public Boolean deleteProcessInstance(ProcessDTO processInstance)
{
List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery()
.processDefinitionId(processInstance.getProcessDefinitionId())
.list();
// 使用增强型 for 循环遍历列表
for (ProcessInstance processInstancesItem : processInstances) {
// 在这里对每个 ProcessInstance 进行处理
long count = runtimeService.createProcessInstanceQuery().processInstanceId(processInstancesItem.getId()).count();
if (count > 0) {
DeleteFlowableProcessInstanceCmd cmd = new DeleteFlowableProcessInstanceCmd(processInstancesItem.getId(), "删除流程实例", true);
managementService.executeCommand(cmd);
// 删除与已删除流程定义相关的部署数据
repositoryService.deleteDeployment(processInstancesItem.getDeploymentId(), true);
} else {
HistoricProcessInstanceQuery query= historyService.createHistoricProcessInstanceQuery()
.processInstanceId(processInstancesItem.getId());
// 查询历史流程实例数据
HistoricProcessInstance historicProcessInstance = query.singleResult();
if (historicProcessInstance != null) {
historyService.deleteHistoricProcessInstance(processInstancesItem.getId());
}
}
}
ProcessTemplates pro=processTemplateService.getById(processInstance.getTemplateId());
if (pro!=null)
{
processTemplateService.removeById(processInstance.getTemplateId());
}
return true;
}
/**
* @Author: Zhaojw
* @Description: 修改表单名称
* @DateTime: 2023/7/21 14:30
* @Params:
* @Return
*/
public Boolean updateFormName(UpdateProcessVO process) {
ProcessTemplates processTemplates = processTemplateService.getById(process.getTemplateId());
processTemplates.setFormName(process.getFormName());
processTemplates.setRemark(process.getRemark());
processTemplates.setUpdated(new Date());
return processTemplateService.updateById(processTemplates);//更新表单明细表信息
}
/**
* 编辑表单详情
*
* @return 修改结果
*/
@Transactional
public Boolean updateForm(UpdateProcessVO process) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
JsonNode processJsonNode = objectMapper.readTree(process.getProcessJson());
JsonNode formJsonNode = objectMapper.readTree(process.getFormJson());
String formName="";
ProcessTemplates processTemplates = processTemplateService.getById(process.getTemplateId());
if (ObjectUtil.isNotEmpty(process.getFormName()))
{
formName= process.getFormName().toString();
processTemplates.setFormName(process.getFormName());
}
else
{
formName = processTemplates.getFormName();
}
// processTemplates.setFormJson(formJsonNode.toString());//暂时用不到,以后会用
processTemplates.setProcessJson(process.getProcessJson().toString());
processTemplates.setUpdated(new Date());
processTemplateService.updateById(processTemplates);//更新表单明细表信息
BpmnModel bpmnModel = toBpmn(processJsonNode,formJsonNode,formName,process.getTemplateId());
Deployment deploy = repositoryService.createDeployment()
.addBpmnModel(formName+".bpmn20.xml", bpmnModel)
.name(formName)
.category(process.getTemplateId())
.deploy();
return true;
}
@Override
public ResponseResult getFormDetail(String templateId) {
ProcessTemplates processTemplates = processTemplateService.getById(templateId);
processTemplates.setIcon(processTemplates.getIcon());
processTemplates.setTemplateId(processTemplates.getTemplateId());
processTemplates.setFormName(processTemplates.getFormName());
Object aa= repositoryService.createProcessDefinitionQuery();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("Process_"+templateId).latestVersion().singleResult();
if(processDefinition==null){
throw new WorkFlowException("该流程暂未接入Flowable,请重试");
}
processTemplates.setProcessDefinitionId(processDefinition.getId());
return new ResponseResult(HttpStatus.SUCCESS, ReturnMsg.PASS,processTemplates);
}
/**
* 绘制节点
*
* @param process bpmn process 图纸
* @param node json的节点
* @param preId 上一节点id
* @param endId 结束节点
* @param preExpression 上一节点表达式
*/
public void drawNode(Process process, JsonNode node, String preId, String endId, String preExpression) {
// 根据type绘制不同种类的节点
Inout inout = drawNodeByType(process, node);
// 绘制前一根线
process.addFlowElement(createSequenceFlow(preId, inout.getIn(), preExpression));
if (node.get("childNode").toString().equals("null")) {
// 没有下一步, 绘制指向结束的线
process.addFlowElement(createSequenceFlow(inout.getOut(), endId, null));
} else {
// 有下一步, 递归绘制下一个节点
drawNode(process, node.get("childNode"), inout.getOut(), endId, null);
}
}
/**
* 绘制不同种类节点
*
* @param process
* @param node
* @return
*/
private Inout drawNodeByType(Process process, JsonNode node) {
if (node.get("type").toString().equals("0")) {//根节点或起始节点
return drawRootNode(process, node);
} else if (node.get("type").toString().equals("1")) {//审核节点
return drawAuditNode(process, node);
} else if (node.get("type").toString().equals("3")) {//分支节点
return drawExclusiveNode(process, node);
} else if (node.get("type").toString().equals("4")) {//分支节点
return drawExclusiveNode(process, node);
} else {
throw new IllegalArgumentException();
}
}
/**
* 绘制分支节点
*
* @param process
* @param node
* @return
*/
private Inout drawExclusiveNode(Process process, JsonNode node) {
// 开始网关
String startId = "Exclusive_" + UUID.randomUUID();
ExclusiveGateway startGateway = new ExclusiveGateway();
startGateway.setId(startId);
process.addFlowElement(startGateway);
// 结束网关
String endId = "Exclusive_" + UUID.randomUUID();
ExclusiveGateway endGateway = new ExclusiveGateway();
endGateway.setId(endId);
process.addFlowElement(endGateway);
// intout不一样
return new Inout(startId, endId);
}
/**
* 创建连线
*
* @param from
* @param to
* @return
*/
public SequenceFlow createSequenceFlow(String from, String to, String conditionExpression) {
SequenceFlow flow = new SequenceFlow();
flow.setId(from + "-" + to);
flow.setSourceRef(from);
flow.setTargetRef(to);
if (conditionExpression != null) {
flow.setConditionExpression(conditionExpression);
}
return flow;
}
/**
* 绘制根节点
*
* @param process
* @param node
* @return
*/
private Inout drawRootNode(Process process, JsonNode node) {
String id = "Node_" + UUID.randomUUID();
// 如果当前任务还有后续任务,则遍历创建后续任务
JsonNode nextNode = node.get("childNode");
UserTask userTask = new UserTask();
userTask.setName(node.get("name").toString());
userTask.setId(id);
process.addFlowElement(userTask);
return new Inout(id, id);
}
private static String createSimpleUserTask(JSONObject flowNode, Process process, List<SequenceFlow> sequenceFlows) {
List<String> incoming = flowNode.getJSONArray("incoming").toJavaList(String.class);
// 自动生成id
String id = id("userTask");
if (incoming != null && !incoming.isEmpty()) {
UserTask userTask = new UserTask();
userTask.setName(flowNode.getString("name"));
userTask.setId(id);
process.addFlowElement(userTask);
process.addFlowElement(connect(incoming.get(0), id, sequenceFlows));
}
return id;
}
/**
* 连线
*
* @param from
* @param to
* @param sequenceFlows
* @return
*/
protected static SequenceFlow connect(String from, String to, List<SequenceFlow> sequenceFlows) {
SequenceFlow flow = new SequenceFlow();
flow.setId(id("sequenceFlow"));
flow.setSourceRef(from);
flow.setTargetRef(to);
sequenceFlows.add(flow);
return flow;
}
private static String id(String prefix) {
return prefix + "_" + UUID.randomUUID().toString().replace("-", "").toLowerCase();
}
/**
* 绘制审核节点
*
* @param process
* @param node
* @return
*/
private Inout drawAuditNode(Process process, JsonNode node) {
// 绘制节点
String id = "Node_" + UUID.randomUUID();
UserTask userTask = new UserTask();
userTask.setId(id);
userTask.setName(node.get("name").toString());
// 设置多实例
MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = new MultiInstanceLoopCharacteristics();
multiInstanceLoopCharacteristics.setElementVariable("user");
// 完成条件
multiInstanceLoopCharacteristics.setCompletionCondition("${nrOfInstances == nrOfCompletedInstances}");
multiInstanceLoopCharacteristics.setInputDataItem("${users}");
userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics);
// 保存json节点配置到扩展属性
Map<String, Object> extensions = new HashMap<>();
extensions.put("node", node);
process.addFlowElement(userTask);
;
return new Inout(id, id);
}
/**
* 通过模板id查看流程信息 会附带流程定义id
*
* @return
*/
@Override
public Result<ProcessTemplates> detail(String templateId) {
ProcessTemplates processTemplates = processTemplateService.getById(templateId);
processTemplates.setFormId(processTemplates.getTemplateId());
processTemplates.setFormName(processTemplates.getFormName());
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(PROCESS_PREFIX + templateId).latestVersion().singleResult();
if (processDefinition == null) {
throw new WorkFlowException("该流程暂未接入Flowable,请重试");
}
return Result.OK(processTemplates);
}
/**
* 通过流程定义id启动流程
*
* @return
*/
@Override
public String start(StartProcessInstanceDTO processInstanceDto) {
try {
LoginUser StartUser=new LoginUser();
if (processInstanceDto.getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser.setUserId(Long.valueOf(processInstanceDto.getUserId()) );
}
else
{
StartUser= LoginContext.getContext().getLoginUser();
}
JSONObject formData = processInstanceDto.getFormData();
Authentication.setAuthenticatedUserId(StartUser.getUserId().toString());
Map<String,Object> processVariables= new HashMap<>();
processVariables.put(FORM_VAR,formData);
processVariables.put(ORDER_ID,processInstanceDto.getOrderId());
processVariables.put(ORDER_TYPE,processInstanceDto.getOrderType());
processVariables.put(START_USER_INFO,JSONObject.toJSONString(StartUser));
processVariables.put(PROCESS_STATUS,BUSINESS_STATUS_1);
ArrayList<LoginUser> userInfos = CollUtil.newArrayList(StartUser);
if (formData!=null)
{
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
});
processVariables.putAll(formValue);
}
ProcessInstanceBuilder processInstanceBuilder = runtimeService.createProcessInstanceBuilder();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(processInstanceDto.getProcessDefinitionId())
.latestVersion().singleResult();
// if (processDefinition == null )
// {
// return ApiRes.failure("流程不存在或已挂起");
//
// }
// if (processDefinition != null && processDefinition.isSuspended())
// {
// return ApiRes.failure("流程不存在或已挂起");
// }
ProcessInstance processInstance = processInstanceBuilder
.processDefinitionId(processInstanceDto.getProcessDefinitionId())
.variable("initiator",StartUser.getUserId())
.variables(processVariables)
.businessStatus(BUSINESS_STATUS_1)
.start();
//手动完成第一个任务
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
task.setAssignee(StartUser.getUserId().toString());
// Object ts=new Object();
// if(task!=null){
// taskService.complete(task.getId());
//
// }
return processInstance.getProcessInstanceId();
}
catch (Exception e){
Throwable cause = e.getCause();
if(cause instanceof WorkFlowException){
WorkFlowException workFlowException=(WorkFlowException)cause;
return workFlowException.getMessage();
}
e.printStackTrace();
return "流程不存在或已挂起";
}
}
@Override
public ApiRes<List<TaskDetailVO>> record(String processInstanceId) {
List<Comment> processInstanceComments = taskService.getProcessInstanceComments(processInstanceId);
Map<String, List<Comment>> commentsMap = processInstanceComments.stream()
.collect(Collectors.groupingBy(Comment::getTaskId));
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();
taskDetailVO.setTaskId(historicActivityInstance.getTaskId());
taskDetailVO.setActivityId(historicActivityInstance.getActivityId());
taskDetailVO.setName("流程开始");
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)
{List<UserListDTO> userList= orgUserMapper.QueryUserWithParentOrg(historicActivityInstance.getAssignee());
taskDetailVO.setUserId(userList.get(0).getUserID());
taskDetailVO.setUserName(userList.get(0).getRealName());}
taskDetailVOS.add(taskDetailVO);
// taskDetailVO.setSignImage();
// taskDetailVO.setAttachmentVOList();
// taskDetailVO.setOptionVOList();
// taskDetailVO.setCommentVOList();
}
else if("endEvent".equals(historicActivityInstance.getActivityType())){
TaskDetailVO taskDetailVO= new TaskDetailVO();
taskDetailVO.setTaskId(historicActivityInstance.getTaskId());
taskDetailVO.setActivityId(historicActivityInstance.getActivityId());
taskDetailVO.setName("流程结束");
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)
{List<UserListDTO> userList= orgUserMapper.QueryUserWithParentOrg(historicActivityInstance.getAssignee());
taskDetailVO.setUserId(userList.get(0).getUserID());
taskDetailVO.setUserName(userList.get(0).getRealName());}
taskDetailVOS.add(taskDetailVO);
}
else if("userTask".equals(historicActivityInstance.getActivityType())){
List<Comment> comments = commentsMap.get(historicActivityInstance.getTaskId());
if(CollUtil.isNotEmpty(comments)){
for (Comment comment : comments) {
if("opinion".equals(comment.getType())){
TaskDetailVO taskDetailVO= new TaskDetailVO();
taskDetailVO.setTaskId(historicActivityInstance.getTaskId());
if (historicActivityInstance.getAssignee()!=null)
{List<UserListDTO> userList= orgUserMapper.QueryUserWithParentOrg(historicActivityInstance.getAssignee());
taskDetailVO.setUserId(userList.get(0).getUserID());
taskDetailVO.setUserName(userList.get(0).getRealName());}
taskDetailVO.setActivityId(historicActivityInstance.getActivityId());
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<>();
if (attachments!=null)
{
for (Attachment attachment : attachments) {
AttachmentVO attachmentVO = new AttachmentVO();
attachmentVO.setId(attachment.getId());
attachmentVO.setName(attachment.getName());
attachmentVO.setUrl(attachment.getUrl());
attachmentVOList.add(attachmentVO);
}
}
for (Comment comment1 : comments) {
if("sign".equals(comment1.getType())){
taskDetailVO.setSignImage(comment1.getFullMessage());
}
}
taskDetailVO.setComment(comments.get(0).getFullMessage());
taskDetailVO.setAttachmentVOList(attachmentVOList);
taskDetailVOS.add(taskDetailVO);
}
}
}
}
}
return ApiRes.success(taskDetailVOS);
}
/**
* 查看我发起的流程
*
* @return
*/
@Override
public PageResult<HistoryProcessInstanceVO> applyList(ApplyDTO applyDTO) {
LoginUser StartUser=new LoginUser();
if (applyDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser.setUserId(applyDTO.getCurrentUserInfo().getUserId());
}
else
{
StartUser= LoginContext.getContext().getLoginUser();
}
PageResult<HistoryProcessInstanceVO> pageResult=new PageResult<HistoryProcessInstanceVO>();
List<HistoricProcessInstance> historicProcessInstances =
historyService.createHistoricProcessInstanceQuery()
.includeProcessVariables()
.startedBy(StartUser.getUserId().toString())
.orderByProcessInstanceStartTime().desc()
.listPage((applyDTO.getPageNo() - 1) * applyDTO.getPageSize(), applyDTO.getPageSize());
long count = historyService.createHistoricProcessInstanceQuery()
.startedBy(StartUser.getUserId().toString()).count();
List<HistoryProcessInstanceVO> historyProcessInstanceVOS = new ArrayList<>();
Page<HistoryProcessInstanceVO> page = new Page<>();
for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) {
Map<String, Object> processVariables = historicProcessInstance.getProcessVariables();
HistoryProcessInstanceVO historyProcessInstanceVO = new HistoryProcessInstanceVO();
historyProcessInstanceVO.setProcessInstanceId(historicProcessInstance.getId());
BpmnModel bpmnModel = repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId());
String Name= bpmnModel.getMainProcess().getName();
historyProcessInstanceVO.setOrderId(MapUtil.getStr(processVariables, ORDER_ID));
historyProcessInstanceVO.setOrderType(MapUtil.getStr(processVariables, ORDER_TYPE));
historyProcessInstanceVO.setProcessDefinitionName(historicProcessInstance.getProcessDefinitionName());
historyProcessInstanceVO.setStartUser(JSONObject.parseObject(MapUtil.getStr(processVariables, START_USER_INFO), new TypeReference<UserInfo>() {
}));
historyProcessInstanceVO.setStartTime(historicProcessInstance.getStartTime());
historyProcessInstanceVO.setEndTime(historicProcessInstance.getEndTime());
Boolean flag = historicProcessInstance.getEndTime() == null ? false : true;
historyProcessInstanceVO.setCurrentActivityName(getCurrentName(historicProcessInstance.getId(), flag, historicProcessInstance.getProcessDefinitionId()));
historyProcessInstanceVO.setBusinessStatus(MapUtil.getStr(processVariables, PROCESS_STATUS));
long totalTimes = historicProcessInstance.getEndTime() == null ?
(Calendar.getInstance().getTimeInMillis() - historicProcessInstance.getStartTime().getTime()) :
(historicProcessInstance.getEndTime().getTime() - historicProcessInstance.getStartTime().getTime());
long dayCount = totalTimes / (1000 * 60 * 60 * 24);//计算天
long restTimes = totalTimes % (1000 * 60 * 60 * 24);//剩下的时间用于计于小时
long hourCount = restTimes / (1000 * 60 * 60);//小时
restTimes = restTimes % (1000 * 60 * 60);
long minuteCount = restTimes / (1000 * 60);
String spendTimes = dayCount + "天" + hourCount + "小时" + minuteCount + "分";
historyProcessInstanceVO.setDuration(spendTimes);
historyProcessInstanceVOS.add(historyProcessInstanceVO);
}
pageResult.setRecords(historyProcessInstanceVOS);
pageResult.setTotalRows(Long.valueOf(applyDTO.getPageNo()));
pageResult.setTotalPage(PageUtil.totalPage((int) count, Convert.toInt(pageResult.getPageSize())));
pageResult.setPageSize(Long.valueOf(applyDTO.getPageSize()));
pageResult.setPageNo(Long.valueOf(applyDTO.getPageNo()));
return pageResult;
}
/**
* 查看我的待办
*
* @return
*/
@Override
public PageResult<TaskVO> toDoList(TaskDTO taskDTO) {
SysUser StartUser=new SysUser();
if (taskDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser = sysUserService.getById(taskDTO.getCurrentUserInfo().getUserId());
}
else
{
StartUser= sysUserService.getById(LoginContext.getContext().getLoginUser());
}
List<Task> tasks = taskService.createTaskQuery().taskAssignee(StartUser.getUserId().toString())
.includeProcessVariables()
.orderByTaskCreateTime().desc()
.listPage((taskDTO.getPageNo() - 1) * taskDTO.getPageSize(), taskDTO.getPageSize());
long count = taskService.createTaskQuery().taskAssignee(StartUser.getUserId().toString()).count();
List<TaskVO> taskVOS= new ArrayList<>();
Page<TaskVO> page =new Page<>();
for (Task task : tasks) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
String startUserId = processInstance.getStartUserId();
BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
Map<String, Object> processVariables = task.getProcessVariables();
TaskVO taskVO=new TaskVO();
taskVO.setTaskId(task.getId());
taskVO.setProcessInstanceId(task.getProcessInstanceId());
taskVO.setProcessDefinitionName(bpmnModel.getMainProcess().getName());
SysUser staruser= sysUserService.getById(startUserId);
taskVO.setStartUser(this.SetUser(staruser));
taskVO.setOrderId(MapUtil.getStr(processVariables, ORDER_ID));
taskVO.setOrderType(MapUtil.getStr(processVariables, ORDER_TYPE));
taskVO.setStartTime(processInstance.getStartTime());
taskVO.setCurrentActivityName(getCurrentName(processInstance.getId(),false,processInstance.getProcessDefinitionId()));
taskVO.setBusinessStatus(MapUtil.getStr(processVariables,PROCESS_STATUS));
taskVO.setTaskCreatedTime(task.getCreateTime());
DelegationState delegationState = task.getDelegationState();
if(delegationState!=null){
taskVO.setDelegationState(delegationState);
}
taskVOS.add(taskVO);
}
page.setRecords(taskVOS);
return PageResultFactory.createPageResult(page);
}
/**
* 查看我的已办
*
* @return
*/
@Override
public PageResult<TaskVO> doneList(TaskDTO taskDTO) {
LoginUser StartUser=new LoginUser();
if (taskDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser.setUserId(taskDTO.getCurrentUserInfo().getUserId());
}
else
{
StartUser= LoginContext.getContext().getLoginUser();
}
List<HistoricTaskInstance> tasks = historyService.createHistoricTaskInstanceQuery()
.taskAssignee(StartUser.getUserId().toString())
.finished()
.includeProcessVariables()
.orderByTaskCreateTime().desc()
.listPage((taskDTO.getPageNo() - 1) * taskDTO.getPageSize(), taskDTO.getPageSize());
long count = historyService.createHistoricTaskInstanceQuery()
.taskAssignee(StartUser.getUserId().toString()).count();
List<TaskVO> taskVOS = new ArrayList<>();
Page<TaskVO> page = new Page<>();
for (HistoricTaskInstance task : tasks) {
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
Boolean flag = historicProcessInstance.getEndTime() == null ? false : true;
BpmnModel bpmnModel = null;
try {
bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
} catch (Exception e) {
// 处理获取BpmnModel异常的情况
e.printStackTrace(); // 可以将异常信息打印到日志中
// 可以在这里设置默认的BpmnModel或采取其他处理措施
}
Map<String, Object> processVariables = task.getProcessVariables();
TaskVO taskVO = new TaskVO();
taskVO.setTaskId(task.getId());
taskVO.setProcessInstanceId(task.getProcessInstanceId());
if (bpmnModel!=null)
{
taskVO.setProcessDefinitionName(bpmnModel.getMainProcess().getName());
}
taskVO.setStartUser(JSONObject.parseObject(MapUtil.getStr(processVariables, START_USER_INFO), new TypeReference<UserInfo>() {
}));
taskVO.setOrderId(MapUtil.getStr(processVariables, ORDER_ID));
taskVO.setOrderType(MapUtil.getStr(processVariables, ORDER_TYPE));
taskVO.setStartTime(historicProcessInstance.getStartTime());
taskVO.setCurrentActivityName(getCurrentName(task.getProcessInstanceId(), flag, task.getProcessDefinitionId()));
taskVO.setBusinessStatus(MapUtil.getStr(processVariables, PROCESS_STATUS));
taskVO.setEndTime(task.getEndTime());
long totalTimes = task.getEndTime() == null ?
(Calendar.getInstance().getTimeInMillis() - task.getStartTime().getTime()) :
(task.getEndTime().getTime() - task.getStartTime().getTime());
long dayCount = totalTimes / (1000 * 60 * 60 * 24);//计算天
long restTimes = totalTimes % (1000 * 60 * 60 * 24);//剩下的时间用于计于小时
long hourCount = restTimes / (1000 * 60 * 60);//小时
restTimes = restTimes % (1000 * 60 * 60);
long minuteCount = restTimes / (1000 * 60);
String spendTimes = dayCount + "天" + hourCount + "小时" + minuteCount + "分";
taskVO.setDuration(spendTimes);
taskVOS.add(taskVO);
}
page.setRecords(taskVOS);
page.setCurrent(taskDTO.getPageNo());
page.setSize(taskDTO.getPageSize());
page.setTotal(count);
return PageResultFactory.createPageResult(page);
}
@Override
public ResponseResult revoke(HandleDataDTO handleDataDTO) {
LoginUser StartUser=new LoginUser();
if (handleDataDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser.setUserId(Long.valueOf(handleDataDTO.getCurrentUserInfo().getUserId()));
}
else
{
StartUser= LoginContext.getContext().getLoginUser();
}
Authentication.setAuthenticatedUserId(StartUser.getUserId().toString());
List<AttachmentDTO> attachments = handleDataDTO.getAttachments();
String comments = handleDataDTO.getComments();
JSONObject formData = handleDataDTO.getFormData();
String taskId = handleDataDTO.getTaskId();
HistoricTaskInstance task = historyService.createHistoricTaskInstanceQuery().taskId(taskId).singleResult();
Map<String,Object> map=new HashMap<>();
if(formData!=null &&formData.size()>0){
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
});
map.putAll(formValue);
map.put(FORM_VAR,formData);
}
map.put(PROCESS_STATUS,BUSINESS_STATUS_2);
runtimeService.setVariables(task.getProcessInstanceId(),map);
if(StringUtils.isNotBlank(comments)){
taskService.addComment(task.getId(),task.getProcessInstanceId(),"opinion",comments);
}
if(attachments!=null && attachments.size()>0){
for (AttachmentDTO attachment : attachments) {
taskService.createAttachment("option",taskId,task.getProcessInstanceId(),attachment.getName(),attachment.getName(),attachment.getUrl());
}
}
if(StringUtils.isNotBlank(handleDataDTO.getSignInfo())){
taskService.addComment(task.getId(),task.getProcessInstanceId(),"sign",handleDataDTO.getSignInfo());
}
runtimeService.deleteProcessInstance(task.getProcessInstanceId(),"撤销");
return new ResponseResult(HttpStatus.SUCCESS,ReturnMsg.PASS,"");
}
@Override
public ResponseResult agree(HandleDataDTO handleDataDTO) {
LoginUser StartUser=new LoginUser();
if (handleDataDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser.setUserId(Long.valueOf(handleDataDTO.getCurrentUserInfo().getUserId()));
}
else
{
StartUser= LoginContext.getContext().getLoginUser();
}
List<AttachmentDTO> attachments = handleDataDTO.getAttachments();
String comments = handleDataDTO.getComments();
JSONObject formData = handleDataDTO.getFormData();
String taskId = handleDataDTO.getTaskId();
String processInstanceId=handleDataDTO.getProcessInstanceId();
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (task!=null)//task为空则说明当前任务可能已结束
{
Map<String, Object> map = new HashMap<>();
if (formData != null && formData.size() > 0) {
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
});
map.putAll(formValue);
map.put(FORM_VAR, formData);
}
runtimeService.setVariables(task.getProcessInstanceId(), map);//设置进入当前流程
Authentication.setAuthenticatedUserId(StartUser.getUserId().toString());
if (StringUtils.isNotBlank(comments)) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "opinion", comments);
}
if (attachments != null && attachments.size() > 0) {
for (AttachmentDTO attachment : attachments) {
taskService.createAttachment("option", taskId, task.getProcessInstanceId(), attachment.getName(), attachment.getName(), attachment.getUrl());
}
}
// if (StringUtils.isNotBlank(handleDataDTO.getSignInfo())) {
// taskService.addComment(task.getId(), task.getProcessInstanceId(), "sign", handleDataDTO.getSignInfo());
// }
taskService.complete(task.getId());
HistoricTaskInstance historicTask = historyService
.createHistoricTaskInstanceQuery()
.taskId(taskId)
.singleResult();
if (historicTask.getEndTime()!=null)//EndTime为空,说明任务已结束,需要往消息队列中进行消息传递
{
HistoricProcessInstance historicProcessInstance= historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId)
.includeProcessVariables().singleResult();//拿到历史中的表单信息
Map<String, Object> processVariables = historicProcessInstance.getProcessVariables();
JSONObject jsonObject = (JSONObject) processVariables.get(FORM_VAR);
}
return new ResponseResult(HttpStatus.SUCCESS,ReturnMsg.PASS,ReturnMsg.PASS);
}
else {
return new ResponseResult(HttpStatus.PROCESS_WAS_END,ReturnMsg.PROCESS_WAS_END,"");
}
}
@Override
public Result delegateTask(HandleDataDTO handleDataDTO) {
LoginUser StartUser=new LoginUser();
if (handleDataDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser.setUserId(Long.valueOf(handleDataDTO.getCurrentUserInfo().getUserId()));
}
else
{
StartUser= LoginContext.getContext().getLoginUser();
}
List<AttachmentDTO> attachments = handleDataDTO.getAttachments();
String comments = handleDataDTO.getComments();
JSONObject formData = handleDataDTO.getFormData();
String taskId = handleDataDTO.getTaskId();
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
Map<String, Object> map = new HashMap<>();
if (formData != null && formData.size() > 0) {
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
});
map.putAll(formValue);
map.put(FORM_VAR, formData);
}
runtimeService.setVariables(task.getProcessInstanceId(), map);
Authentication.setAuthenticatedUserId(StartUser.getUserId().toString());
if (StringUtils.isNotBlank(comments)) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "opinion", comments);
}
if (attachments != null && attachments.size() > 0) {
for (AttachmentDTO attachment : attachments) {
taskService.createAttachment("option", taskId, task.getProcessInstanceId(), attachment.getName(), attachment.getName(), attachment.getUrl());
}
}
if (StringUtils.isNotBlank(handleDataDTO.getSignInfo())) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "sign", handleDataDTO.getSignInfo());
}
UserInfo delegateUserInfo = handleDataDTO.getDelegateUserInfo();
taskService.delegateTask(task.getId(), delegateUserInfo.getId());
return Result.OK();
}
@Override
public Result resolveTask(HandleDataDTO handleDataDTO) {
LoginUser StartUser=new LoginUser();
if (handleDataDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser.setUserId(Long.valueOf(handleDataDTO.getCurrentUserInfo().getUserId()));
}
else
{
StartUser= LoginContext.getContext().getLoginUser();
}
List<AttachmentDTO> attachments = handleDataDTO.getAttachments();
String comments = handleDataDTO.getComments();
JSONObject formData = handleDataDTO.getFormData();
String taskId = handleDataDTO.getTaskId();
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
Map<String, Object> map = new HashMap<>();
if (formData != null && formData.size() > 0) {
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
});
map.putAll(formValue);
map.put(FORM_VAR, formData);
}
runtimeService.setVariables(task.getProcessInstanceId(), map);
Authentication.setAuthenticatedUserId(StartUser.getUserId().toString());
if (StringUtils.isNotBlank(comments)) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "opinion", comments);
}
if (attachments != null && attachments.size() > 0) {
for (AttachmentDTO attachment : attachments) {
taskService.createAttachment("option", taskId, task.getProcessInstanceId(), attachment.getName(), attachment.getName(), attachment.getUrl());
}
}
if (StringUtils.isNotBlank(handleDataDTO.getSignInfo())) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "sign", handleDataDTO.getSignInfo());
}
taskService.resolveTask(taskId);
return Result.OK();
}
@Override
public ResponseResult refuse(HandleDataDTO handleDataDTO) {
LoginUser StartUser=new LoginUser();
if (handleDataDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser.setUserId(Long.valueOf(handleDataDTO.getCurrentUserInfo().getUserId()));
}
else
{
StartUser= LoginContext.getContext().getLoginUser();
}
Authentication.setAuthenticatedUserId(StartUser.getUserId().toString());
List<AttachmentDTO> attachments = handleDataDTO.getAttachments();
String comments = handleDataDTO.getComments();
JSONObject formData = handleDataDTO.getFormData();
String taskId = handleDataDTO.getTaskId();
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
Map<String, Object> map = new HashMap<>();
if (formData != null && formData.size() > 0) {
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
});
map.putAll(formValue);
map.put(FORM_VAR, formData);
}
map.put(PROCESS_STATUS, BUSINESS_STATUS_3);
runtimeService.setVariables(task.getProcessInstanceId(), map);
if (StringUtils.isNotBlank(comments)) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "opinion", comments);
}
if (attachments != null && attachments.size() > 0) {
for (AttachmentDTO attachment : attachments) {
taskService.createAttachment("option", taskId, task.getProcessInstanceId(), attachment.getName(), attachment.getName(), attachment.getUrl());
}
}
if (StringUtils.isNotBlank(handleDataDTO.getSignInfo())) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "sign", handleDataDTO.getSignInfo());
}
runtimeService.deleteProcessInstance(task.getProcessInstanceId(), "拒绝");
return new ResponseResult(HttpStatus.SUCCESS, ReturnMsg.PASS,ReturnMsg.PASS);
}
@Override
public Result assignee(HandleDataDTO handleDataDTO) {
LoginUser StartUser= LoginContext.getContext().getLoginUser();
Authentication.setAuthenticatedUserId(StartUser.getUserId().toString());
List<AttachmentDTO> attachments = handleDataDTO.getAttachments();
String comments = handleDataDTO.getComments();
JSONObject formData = handleDataDTO.getFormData();
String taskId = handleDataDTO.getTaskId();
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
Map<String, Object> map = new HashMap<>();
if (formData != null && formData.size() > 0) {
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
});
map.putAll(formValue);
map.put(FORM_VAR, formData);
}
map.put(PROCESS_STATUS, BUSINESS_STATUS_1);
runtimeService.setVariables(task.getProcessInstanceId(), map);
if (StringUtils.isNotBlank(comments)) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "opinion", comments);
}
if (attachments != null && attachments.size() > 0) {
for (AttachmentDTO attachment : attachments) {
taskService.createAttachment("option", taskId, task.getProcessInstanceId(), attachment.getName(), attachment.getName(), attachment.getUrl());
}
}
if (StringUtils.isNotBlank(handleDataDTO.getSignInfo())) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "sign", handleDataDTO.getSignInfo());
}
taskService.setAssignee(taskId, handleDataDTO.getTransferUserInfo().getId());
return Result.OK();
}
@Override
public Result rollback(HandleDataDTO handleDataDTO) {
LoginUser StartUser=new LoginUser();
if (handleDataDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser.setUserId(Long.valueOf(handleDataDTO.getCurrentUserInfo().getUserId()));
}
else
{
StartUser= LoginContext.getContext().getLoginUser();
}
Authentication.setAuthenticatedUserId(StartUser.getUserId().toString());
List<AttachmentDTO> attachments = handleDataDTO.getAttachments();
String comments = handleDataDTO.getComments();
JSONObject formData = handleDataDTO.getFormData();
String taskId = handleDataDTO.getTaskId();
String processInstanceId = handleDataDTO.getProcessInstanceId();
List<Task> list = taskService.createTaskQuery().processInstanceId(processInstanceId).list();
Task task = null;
List<String> taskIds = new ArrayList<>();
for (Task task1 : list) {
if (task1.getId().equals(taskId)) {
task = task1;
}
taskIds.add(task1.getTaskDefinitionKey());
}
Map<String, Object> map = new HashMap<>();
if (formData != null && formData.size() > 0) {
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
});
map.putAll(formValue);
map.put(FORM_VAR, formData);
}
map.put(PROCESS_STATUS, BUSINESS_STATUS_3);
runtimeService.setVariables(task.getProcessInstanceId(), map);
if (StringUtils.isNotBlank(comments)) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "opinion", comments);
}
if (attachments != null && attachments.size() > 0) {
for (AttachmentDTO attachment : attachments) {
taskService.createAttachment("option", taskId, task.getProcessInstanceId(), attachment.getName(), attachment.getName(), attachment.getUrl());
}
}
if (StringUtils.isNotBlank(handleDataDTO.getSignInfo())) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "sign", handleDataDTO.getSignInfo());
}
runtimeService.createChangeActivityStateBuilder()
.processInstanceId(task.getProcessInstanceId())
.moveActivityIdsToSingleActivityId(taskIds, handleDataDTO.getRollbackId())
.changeState();
return Result.OK();
}
@Override
public Result addMulti(HandleDataDTO handleDataDTO) {
UserInfo currentUserInfo = handleDataDTO.getCurrentUserInfo();
Authentication.setAuthenticatedUserId(currentUserInfo.getId());
List<AttachmentDTO> attachments = handleDataDTO.getAttachments();
String comments = handleDataDTO.getComments();
JSONObject formData = handleDataDTO.getFormData();
String taskId = handleDataDTO.getTaskId();
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
Map<String, Object> map = new HashMap<>();
if (formData != null && formData.size() > 0) {
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
});
map.putAll(formValue);
map.put(FORM_VAR, formData);
}
map.put(PROCESS_STATUS, BUSINESS_STATUS_1);
runtimeService.setVariables(task.getProcessInstanceId(), map);
if (StringUtils.isNotBlank(comments)) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "opinion", comments);
}
if (attachments != null && attachments.size() > 0) {
for (AttachmentDTO attachment : attachments) {
taskService.createAttachment("option", taskId, task.getProcessInstanceId(), attachment.getName(), attachment.getName(), attachment.getUrl());
}
}
if (StringUtils.isNotBlank(handleDataDTO.getSignInfo())) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "sign", handleDataDTO.getSignInfo());
}
Map<String, Object> variableMap = new HashMap<>();
variableMap.put("assigneeName", handleDataDTO.getMultiAddUserInfo().getId());
ExecutionEntity execution = (ExecutionEntity) runtimeService.addMultiInstanceExecution(task.getTaskDefinitionKey(), task.getProcessInstanceId(), variableMap);
return Result.OK();
}
@Override
public Result<List<MultiVO>> queryMultiUsersInfo(Map<String, Object> map) {
String taskId = MapUtil.getStr(map, "taskId");
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
List<Task> list = taskService.createTaskQuery()
.processInstanceId(task.getProcessInstanceId())
.taskDefinitionKey(task.getTaskDefinitionKey()).list();
Iterator<Task> iterator = list.iterator();
List<MultiVO> multiVOList = new ArrayList<>();
while (iterator.hasNext()) {
Task next = iterator.next();
if (!taskId.equals(next.getId())) {
MultiVO multiVO = new MultiVO();
multiVO.setTaskId(next.getId());
multiVO.setProcessInstanceId(next.getProcessInstanceId());
multiVO.setExecutionId(next.getExecutionId());
multiVO.setUserId(next.getAssignee());
multiVOList.add(multiVO);
}
}
return Result.OK(multiVOList);
}
@Override
public Result deleteMulti(List<String> executionIds) {
for (String executionId : executionIds) {
runtimeService.deleteMultiInstanceExecution(executionId, true);
}
return Result.OK();
}
@Override
public Result comments(HandleDataDTO handleDataDTO) {
UserInfo currentUserInfo = handleDataDTO.getCurrentUserInfo();
Authentication.setAuthenticatedUserId(currentUserInfo.getId());
List<AttachmentDTO> attachments = handleDataDTO.getAttachments();
String comments = handleDataDTO.getComments();
JSONObject formData = handleDataDTO.getFormData();
String taskId = handleDataDTO.getTaskId();
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
Map<String, Object> map = new HashMap<>();
if (formData != null && formData.size() > 0) {
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
});
map.putAll(formValue);
map.put(FORM_VAR, formData);
}
map.put(PROCESS_STATUS, BUSINESS_STATUS_1);
runtimeService.setVariables(task.getProcessInstanceId(), map);
if (StringUtils.isNotBlank(comments)) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "comments", comments);
}
if (attachments != null && attachments.size() > 0) {
for (AttachmentDTO attachment : attachments) {
taskService.createAttachment("option", taskId, task.getProcessInstanceId(), attachment.getName(), attachment.getName(), attachment.getUrl());
}
}
if (StringUtils.isNotBlank(handleDataDTO.getSignInfo())) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "sign", handleDataDTO.getSignInfo());
}
return Result.OK();
}
@Override
public ApiRes<String> getProcessDefinitionId(String formId) {
String defId="";
ProcessDefinition ProDef=repositoryService.createProcessDefinitionQuery()
.processDefinitionKey("Process_"+formId)
.latestVersion()
.singleResult();
if(ProDef!=null)
{
defId=ProDef.getId();
}
return ApiRes.success(defId);
}
@Override
public ApiRes<HandleDataVO> instanceInfo(HandleDataDTO HandleDataDTO) {
String processInstanceId = HandleDataDTO.getProcessInstanceId();
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId)
.includeProcessVariables().singleResult();
String processDefinitionKey = historicProcessInstance.getProcessDefinitionKey();
String pro=processDefinitionKey.replace(PROCESS_PREFIX, "");
ProcessTemplates processTemplates = processTemplateService.getById(processDefinitionKey.replace(PROCESS_PREFIX, ""));
// processTemplates.setLogo(processTemplates.getIcon());
processTemplates.setFormId(processTemplates.getTemplateId());
processTemplates.setFormName(processTemplates.getFormName());
// processTemplates.setProcessDefinitionId(historicProcessInstance.getProcessDefinitionId());
HandleDataVO handleDataVO = new HandleDataVO();
Map<String, Object> processVariables = historicProcessInstance.getProcessVariables();
handleDataVO.setProcessInstanceId(historicProcessInstance.getId());
JSONObject jsonObject = (JSONObject) processVariables.get(FORM_VAR);
handleDataVO.setFormData(jsonObject);
String process = processTemplates.getProcessJson();
ChildNode childNode = JSONObject.parseObject(process, new TypeReference<ChildNode>() {
});
SettingsInfo settingsInfo = JSONObject.parseObject(processTemplates.getSettings(), new TypeReference<SettingsInfo>() {
});
// Boolean sign = settingsInfo.getSign();
ChildNode currentNode = null;
if (StringUtils.isNotBlank(HandleDataDTO.getTaskId())) {
HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().taskId(HandleDataDTO.getTaskId()).singleResult();
currentNode = getChildNode(childNode, historicTaskInstance.getTaskDefinitionKey());
List<FormOperates> formPerms = currentNode.getProps().getFormPerms();
if (CollUtil.isNotEmpty(formPerms)) {
Iterator<FormOperates> iterator = formPerms.iterator();
while (iterator.hasNext()) {
FormOperates next = iterator.next();
if ("H".equals(next.getPerm())) {
iterator.remove();
if (jsonObject != null) {
jsonObject.remove(next.getId());
}
}
}
}
handleDataVO.setCurrentNode(currentNode);
handleDataVO.setTaskId(HandleDataDTO.getTaskId());
}
// if (sign) {
// handleDataVO.setSignFlag(true);
// }
// if (StringUtils.isNotBlank(HandleDataDTO.getTaskId())) {
// if (currentNode != null) {
// if (currentNode.getProps().getSign()) {
// handleDataVO.setSignFlag(true);
// } else {
// handleDataVO.setSignFlag(false);
// }
// }
// }
List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().processInstanceId(historicProcessInstance.getId()).list();
Map<String, List<HistoricActivityInstance>> historicActivityInstanceMap = new HashMap<>();
for (HistoricActivityInstance historicActivityInstance : list) {
List<HistoricActivityInstance> historicActivityInstances = historicActivityInstanceMap.get(historicActivityInstance.getActivityId());
if (historicActivityInstances == null) {
historicActivityInstances = new ArrayList<>();
historicActivityInstances.add(historicActivityInstance);
historicActivityInstanceMap.put(historicActivityInstance.getActivityId(), historicActivityInstances);
} else {
historicActivityInstances.add(historicActivityInstance);
historicActivityInstanceMap.put(historicActivityInstance.getActivityId(), historicActivityInstances);
}
}
Process mainProcess = repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId()).getMainProcess();
Collection<FlowElement> flowElements = mainProcess.getFlowElements();
List<String> runningList = new ArrayList<>();
handleDataVO.setRunningList(runningList);
List<String> endList = new ArrayList<>();
handleDataVO.setEndList(endList);
List<String> noTakeList = new ArrayList<>();
handleDataVO.setNoTakeList(noTakeList);
Map<String, List<TaskDetailVO>> deatailMap = new HashMap<>();
List<Comment> processInstanceComments = taskService.getProcessInstanceComments(historicProcessInstance.getId());
List<Attachment> processInstanceAttachments = taskService.getProcessInstanceAttachments(historicProcessInstance.getId());
for (FlowElement flowElement : flowElements) {
List<TaskDetailVO> detailVOList = new ArrayList<>();
List<HistoricActivityInstance> historicActivityInstanceList = historicActivityInstanceMap.get(flowElement.getId());
if (CollUtil.isNotEmpty(historicActivityInstanceList)) {
for (HistoricActivityInstance historicActivityInstance : historicActivityInstanceList) {
if (historicActivityInstance.getEndTime() != null) {
if ("startEvent".equalsIgnoreCase(historicActivityInstance.getActivityType()) || "endEvent".equalsIgnoreCase(historicActivityInstance.getActivityType())) {
TaskDetailVO taskDetailVO = new TaskDetailVO();
taskDetailVO.setActivityId(historicActivityInstance.getActivityId());
taskDetailVO.setName(historicActivityInstance.getActivityName());
taskDetailVO.setCreateTime(historicActivityInstance.getStartTime());
taskDetailVO.setEndTime(historicActivityInstance.getEndTime());
detailVOList.add(taskDetailVO);
deatailMap.put(historicActivityInstance.getActivityId(), detailVOList);
endList.add(historicActivityInstance.getActivityId());
} else if ("userTask".equalsIgnoreCase(historicActivityInstance.getActivityType())) {
List<TaskDetailVO> voList = deatailMap.get(historicActivityInstance.getActivityId());
List<HistoricActivityInstance> activityInstanceList = list.stream().filter(h -> h.getActivityId().equals(historicActivityInstance.getActivityId()) && h.getEndTime() != null).collect(Collectors.toList());
if (voList != null) {
collectUserTaskInfo(processInstanceComments, processInstanceAttachments, historicActivityInstance, voList, activityInstanceList);
} else {
voList = new ArrayList<>();
collectUserTaskInfo(processInstanceComments, processInstanceAttachments, historicActivityInstance, voList, activityInstanceList);
}
deatailMap.put(historicActivityInstance.getActivityId(), voList);
endList.add(historicActivityInstance.getActivityId());
} else if ("serviceTask".equalsIgnoreCase(historicActivityInstance.getActivityType())) {
}
} else {
if ("userTask".equalsIgnoreCase(historicActivityInstance.getActivityType())) {
List<TaskDetailVO> voList = deatailMap.get(historicActivityInstance.getActivityId());
List<HistoricActivityInstance> activityInstanceList = list.stream().filter(h -> h.getActivityId().equals(historicActivityInstance.getActivityId()) && h.getEndTime() == null).collect(Collectors.toList());
if (voList != null) {
collectUserTaskInfo(processInstanceComments, processInstanceAttachments, historicActivityInstance, voList, activityInstanceList);
} else {
voList = new ArrayList<>();
collectUserTaskInfo(processInstanceComments, processInstanceAttachments, historicActivityInstance, voList, activityInstanceList);
}
deatailMap.put(historicActivityInstance.getActivityId(), voList);
if (endList.contains(historicActivityInstance.getActivityId())) {
endList.remove(historicActivityInstance.getActivityId());
runningList.add(historicActivityInstance.getActivityId());
} else {
runningList.add(historicActivityInstance.getActivityId());
}
} else if ("serviceTask".equalsIgnoreCase(historicActivityInstance.getActivityType())) {
}
}
}
} else {
noTakeList.add(flowElement.getId());
}
}
handleDataVO.setProcessTemplates(processTemplates);
handleDataVO.setDetailVOList(deatailMap);
return ApiRes.success(handleDataVO);
}
private void collectUserTaskInfo(List<Comment> processInstanceComments,
List<Attachment> processInstanceAttachments,
HistoricActivityInstance historicActivityInstance,
List<TaskDetailVO> voList,
List<HistoricActivityInstance> activityInstanceList) {
for (HistoricActivityInstance activityInstance : activityInstanceList) {
TaskDetailVO taskDetailVO = new TaskDetailVO();
taskDetailVO.setTaskId(activityInstance.getTaskId());
taskDetailVO.setActivityId(activityInstance.getActivityId());
taskDetailVO.setName(activityInstance.getActivityName());
taskDetailVO.setCreateTime(activityInstance.getStartTime());
taskDetailVO.setEndTime(activityInstance.getEndTime());
Comment signComment = processInstanceComments.stream().filter(h -> h.getTaskId().equals(historicActivityInstance.getTaskId()) && h.getType().equals("sign")).findFirst().orElse(null);
if (signComment != null) {
taskDetailVO.setSignImage(signComment.getFullMessage());
}
List<Attachment> attachments = processInstanceAttachments.stream().filter(h -> h.getTaskId().equals(historicActivityInstance.getTaskId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(attachments)) {
List<AttachmentVO> attachmentVOList = new ArrayList<>();
for (Attachment attachment : attachments) {
AttachmentVO attachmentVO = new AttachmentVO();
attachmentVO.setId(attachment.getId());
attachmentVO.setName(attachment.getName());
attachmentVO.setUrl(attachment.getUrl());
attachmentVOList.add(attachmentVO);
}
taskDetailVO.setAttachmentVOList(attachmentVOList);
}
List<Comment> options = processInstanceComments.stream().filter(h -> h.getTaskId().equals(historicActivityInstance.getTaskId()) && h.getType().equals("opinion")).collect(Collectors.toList());
if (CollUtil.isNotEmpty(options)) {
List<OptionVO> optionVOList = new ArrayList<>();
for (Comment option : options) {
OptionVO optionVO = new OptionVO();
optionVO.setComments(option.getFullMessage());
optionVO.setUserId(option.getUserId());
// optionVO.setUserName();
optionVO.setCreateTime(option.getTime());
optionVOList.add(optionVO);
}
taskDetailVO.setOptionVOList(optionVOList);
}
List<Comment> comments = processInstanceComments.stream().filter(h -> h.getTaskId().equals(historicActivityInstance.getTaskId()) && h.getType().equals("comments")).collect(Collectors.toList());
if (CollUtil.isNotEmpty(comments)) {
List<CommentVO> commentsVOList = new ArrayList<>();
for (Comment comment : comments) {
CommentVO commentVO = new CommentVO();
commentVO.setComments(comment.getFullMessage());
commentVO.setUserId(comment.getUserId());
// commentVO.setUserName();
commentVO.setCreateTime(comment.getTime());
commentsVOList.add(commentVO);
}
taskDetailVO.setCommentVOList(commentsVOList);
}
voList.add(taskDetailVO);
}
}
/**
* @Author: Zhaojw
* @Description: 为用户赋值
* @DateTime: 2023/9/27 16:00
* @Params:
* @Return
*/
private UserInfo SetUser(SysUser sysUser)
{
UserInfo userInfo=new UserInfo();
userInfo.setUserId(sysUser.getUserId());
userInfo.setId(sysUser.getUserId().toString());
userInfo.setName(sysUser.getRealName());
userInfo.setSex(sysUser.getSex());
return userInfo;
}
private String getCurrentName(String processInstanceId, Boolean flag, String processDefinitionId) {
if (flag) {
return "流程已结束";
}
List<ActivityInstance> list = runtimeService.createActivityInstanceQuery().processInstanceId(processInstanceId).activityType("userTask").unfinished().orderByActivityInstanceStartTime().desc().list();
if(CollUtil.isEmpty(list)){
return "";
}
else{
String activityId = list.get(0).getActivityId();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
FlowElement flowElement = bpmnModel.getMainProcess().getFlowElement(activityId);
return flowElement.getName();
}
// Execution execution = runtimeService.createExecutionQuery().executionId(processInstanceId).singleResult();
// String activityId = execution.getActivityId();
// if (StringUtils.isBlank(activityId)) {
// return "";
// } else {
// BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
// FlowElement flowElement = bpmnModel.getMainProcess().getFlowElement(activityId);
// return flowElement.getName();
// }
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论