From 2739964a8ed8e8e586971a5271a4d6bf2dbac2e5 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Fri, 16 Dec 2022 17:10:03 +0800
Subject: [PATCH] 添加审核工作流
---
src/main/java/org/springblade/modules/application/service/impl/ApplicationServiceImpl.java | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 168 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/springblade/modules/application/service/impl/ApplicationServiceImpl.java b/src/main/java/org/springblade/modules/application/service/impl/ApplicationServiceImpl.java
index 26b6538..bdbc2dd 100644
--- a/src/main/java/org/springblade/modules/application/service/impl/ApplicationServiceImpl.java
+++ b/src/main/java/org/springblade/modules/application/service/impl/ApplicationServiceImpl.java
@@ -16,9 +16,26 @@
*/
package org.springblade.modules.application.service.impl;
+import com.aliyun.oss.ServiceException;
import lombok.AllArgsConstructor;
+import org.flowable.bpmn.model.*;
+import org.flowable.engine.RepositoryService;
+import org.flowable.engine.RuntimeService;
+import org.flowable.engine.TaskService;
+import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
+import org.flowable.engine.runtime.ProcessInstance;
+import org.flowable.task.api.Task;
+import org.springblade.common.utils.CommonUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.flow.business.service.IFlowService;
+import org.springblade.flow.core.constant.ProcessConstant;
+import org.springblade.flow.core.entity.BladeFlow;
+import org.springblade.flow.core.utils.FlowUtil;
+import org.springblade.flow.core.utils.TaskUtil;
import org.springblade.modules.application.entity.*;
import org.springblade.modules.application.service.*;
import org.springblade.modules.application.vo.ApplicationVO;
@@ -26,10 +43,14 @@
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.modules.application.wrapper.ApplicationWrapper;
import org.springblade.modules.enterprise.wrapper.EnterpriseWrapper;
+import org.springblade.modules.reject.entity.RejectEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
/**
* 申请表 服务实现类
@@ -46,6 +67,11 @@
private final IGoodsService goodsService;
private final ICarService carService;
+ private final IFlowService flowService;
+ private final TaskService taskService;
+ private final RuntimeService runtimeService;
+ private final RepositoryService repositoryService;
+
@Override
public IPage<ApplicationVO> selectApplicationPage(IPage<ApplicationVO> page, ApplicationVO application) {
return page.setRecords(baseMapper.selectApplicationPage(page, application));
@@ -54,6 +80,15 @@
@Transactional
@Override
public Boolean saveVo(ApplicationEntity application, BasicInfoEntity basicInfoEntity, CarEntity carEntity, PlanEntity planEntity, SchemeEntity schemeEntity, GoodsEntity goodsEntity) {
+
+ boolean result = false;
+ //保存
+ ApplicationEntity applicationEntity = getMaxNoEntity();
+ String str = "";
+ if (applicationEntity != null) {
+ str = applicationEntity.getNo();
+ }
+ application.setNo(CommonUtil.createNo("", str));
boolean save = super.save(application);
basicInfoEntity.setApplicationId(application.getId().toString());
@@ -70,8 +105,9 @@
carEntity.setApplicationId(application.getId().toString());
boolean c = carService.save(carEntity);
+ result = b && p && s && g && c && save;
- return b&&p&&s&&g&&c&&save;
+ return result;
}
@Override
@@ -107,7 +143,137 @@
boolean s = schemeService.updateById(schemeEntity);
boolean g = goodsService.updateById(goodsEntity);
boolean update = super.updateById(application);
- return b&&p&&s&&g&&c&&update;
+ return b && p && s && g && c && update;
}
+ @Override
+ public ApplicationEntity getByNo(String no) {
+ return baseMapper.getByNo(no);
+ }
+
+ @Override
+ public Boolean startProcess(ApplicationEntity application, BasicInfoEntity basicInfoEntity, CarEntity carEntity, PlanEntity planEntity, SchemeEntity schemeEntity, GoodsEntity goodsEntity) {
+
+ boolean result = false;
+ String businessTable = FlowUtil.getBusinessTable(ProcessConstant.AUDIT_KEY);
+ if (Func.isEmpty(application.getId())) {
+ //保存
+ ApplicationEntity applicationEntity = getMaxNoEntity();
+ String str = "";
+ if (applicationEntity != null) {
+ str = applicationEntity.getNo();
+ }
+ application.setNo(CommonUtil.createNo("", str));
+ boolean save = super.save(application);
+
+ basicInfoEntity.setApplicationId(application.getId().toString());
+ boolean b = basicInfoService.save(basicInfoEntity);
+
+ planEntity.setApplicationId(application.getId().toString());
+ boolean p = planService.save(planEntity);
+
+ schemeEntity.setApplicationId(application.getId().toString());
+ boolean s = schemeService.save(schemeEntity);
+
+ goodsEntity.setApplicationId(application.getId().toString());
+ boolean g = goodsService.save(goodsEntity);
+
+ carEntity.setApplicationId(application.getId().toString());
+ boolean c = carService.save(carEntity);
+ result = b && p && s && g && c && save;
+
+ //启动流程
+ Kv variables = Kv.create()
+ .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, basicInfoEntity.getName())
+ .set("taskUser", TaskUtil.getTaskUser(application.getTaskUser()));
+ BladeFlow flow = flowService.startProcessInstanceById(application.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(application.getId())), variables);
+ if (Func.isNotEmpty(flow)) {
+ log.error("流程已启动,流程ID:" + flow.getProcessInstanceId());
+ // 返回流程id写入leave
+ application.setProcessInstanceId(flow.getProcessInstanceId());
+ updateById(application);
+ } else {
+ throw new ServiceException("开启流程失败");
+ }
+ } else {
+ updateById(application);
+ }
+
+ return result;
+ }
+
+ @Override
+ public Boolean completeTask(BladeFlow flow, ApplicationEntity applicationEntity, RejectEntity rejectEntity) {
+ String taskId = flow.getTaskId();
+
+ Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+
+ // 通过任务对象获取流程实例
+ ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
+ // 通过流程实例获取“业务键”
+ String businessKey = pi.getBusinessKey().split(":")[1];
+
+ //获取实例对象改变业务状态
+ ApplicationEntity entity = getById(businessKey);
+
+ if (!StringUtil.isBlank(applicationEntity.getSuggestion())){
+ entity.setSuggestion(applicationEntity.getSuggestion());
+ }
+ if (entity.getStatus() == 1){
+ entity.setStatus(2);
+ }
+
+ String processInstanceId = flow.getProcessInstanceId();
+ String comment = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT);
+ // 增加评论
+ if (StringUtil.isNoneBlank(processInstanceId, comment)) {
+ taskService.addComment(taskId, processInstanceId, comment);
+ }
+ // 创建变量
+ Map<String, Object> variables = flow.getVariables();
+ if (variables == null) {
+ variables = Kv.create();
+ }
+ variables.put("suggestion",Func.toStr(applicationEntity.getSuggestion(),""));
+ variables.put(ProcessConstant.PASS_KEY, flow.isPass());
+ // 完成任务
+ taskService.complete(taskId, variables);
+
+
+ //判读是否有末尾节点
+ if (getEndNode(task,entity.getProcessDefinitionId())){
+ //判断是否pass
+ if ((Boolean)variables.get(ProcessConstant.PASS_KEY)){
+ //改变业务状态
+ entity.setStatus(10);
+ //生成通行证
+
+
+ }
+ }
+ updateById(entity);
+ return true;
+ }
+
+ /**
+ * 获取最大编号
+ *
+ * @return
+ */
+ public ApplicationEntity getMaxNoEntity() {
+ return baseMapper.getMaxNoEntity();
+ }
+
+ public boolean getEndNode(Task task,String definitionId){
+ BpmnModel bpmnModel = repositoryService.getBpmnModel(definitionId);
+ FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());
+ List<SequenceFlow> outgoingFlows = flowNode.getOutgoingFlows();
+ for (SequenceFlow outgoingFlow : outgoingFlows) {
+ FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement();
+ if (targetFlowElement instanceof EndEvent){
+ return true;
+ }
+ }
+ return false;
+ }
}
--
Gitblit v1.9.3