From c864fec5f798a1aabcde877469886dd0dc90d092 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Mon, 02 Jan 2023 13:54:18 +0800
Subject: [PATCH] 申请表getAll接口可以根据通行证状态查询
---
src/main/java/org/springblade/modules/application/service/impl/ApplicationServiceImpl.java | 262 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 253 insertions(+), 9 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 33f7c06..e4b52a2 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,28 @@
*/
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.constant.AuditStatusConstant;
+import org.springblade.common.enums.DictEnum;
+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 +45,18 @@
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.evaluation.entity.EvaluationEntity;
+import org.springblade.modules.evaluation.service.IEvaluationService;
+import org.springblade.modules.pass.entity.PassEntity;
+import org.springblade.modules.pass.service.IPassService;
+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;
/**
* 申请表 服务实现类
@@ -45,6 +72,13 @@
private final ISchemeService schemeService;
private final IGoodsService goodsService;
private final ICarService carService;
+ private final IPassService passService;
+ private final IEvaluationService evaluationService;
+
+ 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) {
@@ -54,6 +88,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 +113,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
@@ -82,23 +126,29 @@
applicationVO.setBasicInfoEntity(basicInfoService.getOne(Condition.getQueryWrapper(new BasicInfoEntity(applicationId))));
applicationVO.setSchemeEntity(schemeService.getOne(Condition.getQueryWrapper(new SchemeEntity(applicationId))));
applicationVO.setPlanEntity(planService.getOne(Condition.getQueryWrapper(new PlanEntity(applicationId))));
- applicationVO.setCarEntity(carService.getOne(Condition.getQueryWrapper(new CarEntity(applicationId))));
+
+ CarEntity carEntity = new CarEntity();
+ carEntity.setApplicationId(applicationId);
+ carEntity.setStatus("1");
+ applicationVO.setCarEntity(carService.getOne(Condition.getQueryWrapper(carEntity)));
+
applicationVO.setBasicInfoEntity(basicInfoService.getOne(Condition.getQueryWrapper(new BasicInfoEntity(applicationId))));
GoodsEntity goods = goodsService.getOne(Condition.getQueryWrapper(new GoodsEntity(applicationId)));
applicationVO.setGoodsEntity(goods);
- applicationVO.setGoodsEntity(goods);
+ applicationVO.setGoodsName(goods.getGoodsName());
return applicationVO;
}
@Override
@Transactional
public Boolean updateVoById(ApplicationEntity application, BasicInfoEntity basicInfoEntity, CarEntity carEntity, PlanEntity planEntity, SchemeEntity schemeEntity, GoodsEntity goodsEntity) {
-// basicInfoEntity.setId(application.getBasicInfoId());
-// carEntity.setId(application.getCarId());
-// planEntity.setId(Long.parseLong(application.getPlanId()));
-// schemeEntity.setId(Long.parseLong(application.getSchemeId()));
-// goodsEntity.setId(application.getGoodsId());
+ String applicationId = application.getId().toString();
+ basicInfoEntity.setId(basicInfoService.getOne(Condition.getQueryWrapper(new BasicInfoEntity(applicationId))).getId());
+ carEntity.setId(carService.getOne(Condition.getQueryWrapper(new CarEntity(applicationId))).getId());
+ planEntity.setId(planService.getOne(Condition.getQueryWrapper(new PlanEntity(applicationId))).getId());
+ schemeEntity.setId(schemeService.getOne(Condition.getQueryWrapper(new SchemeEntity(applicationId))).getId());
+ goodsEntity.setId(goodsService.getOne(Condition.getQueryWrapper(new GoodsEntity(applicationId))).getId());
boolean b = basicInfoService.updateById(basicInfoEntity);
boolean c = carService.updateById(carEntity);
@@ -106,7 +156,201 @@
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());
+ BladeFlow flow = flowService.startProcessInstanceById(application.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(application.getId())), variables);
+ if (Func.isNotEmpty(flow)) {
+ log.error("流程已启动,流程ID:" + flow.getProcessInstanceId());
+ // 返回流程id
+ application.setProcessInstanceId(flow.getProcessInstanceId());
+ updateById(application);
+ } else {
+ throw new ServiceException("开启流程失败");
+ }
+ } else {
+ updateById(application);
+ }
+
+ return result;
+ }
+
+ @Override
+ @Transactional
+ 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() == AuditStatusConstant.COMMIT){
+ entity.setStatus(AuditStatusConstant.PROCESSING);
+ }
+
+ 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(ProcessConstant.SUGGESTION_KEY,applicationEntity.getIsSuggestion());
+ variables.put(ProcessConstant.PASS_KEY, flow.isPass());
+ // 完成任务
+ taskService.complete(taskId, variables);
+
+
+ //判读是否有末尾节点
+ if (getEndNode(task,entity.getProcessDefinitionId())){
+ //判断是否pass
+ if (flow.isPass()){
+ //改变业务状态
+ entity.setStatus(AuditStatusConstant.PASS_DISTRIBUTE);
+ //生成通行证
+ PassEntity passEntity = new PassEntity();
+ passEntity.setNo(entity.getNo());
+ passService.save(passEntity);
+ //添加评价
+ EvaluationEntity evaluationEntity = new EvaluationEntity();
+ evaluationEntity.setNo(entity.getNo());
+ evaluationService.save(evaluationEntity);
+// //修改车辆信息状态
+// CarEntity carEntity = new CarEntity();
+// carEntity.setApplicationId(entity.getId().toString());
+// carEntity.setStatus("3");
+// CarEntity one = carService.getOne(Condition.getQueryWrapper(carEntity));
+// one.setStatus("1");
+// carService.updateById(one);
+ }else if (!applicationEntity.getIsSuggestion()&&!flow.isPass()){
+ //判断是否拒绝受理
+ entity.setStatus(AuditStatusConstant.REJECT_AUDIT);
+
+ }
+ }
+ boolean update = updateById(entity);
+ return update;
+ }
+
+ @Override
+ @Transactional
+ public Boolean userCompleteTask(BladeFlow flow,ApplicationEntity applicationEntity, BasicInfoEntity basicInfoEntity, CarEntity carEntity, PlanEntity planEntity, SchemeEntity schemeEntity, GoodsEntity goodsEntity, RejectEntity rejectEntity) {
+ String taskId = flow.getTaskId();
+
+ Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+
+ 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(ProcessConstant.SUGGESTION_KEY,applicationEntity.getIsSuggestion());
+ variables.put(ProcessConstant.PASS_KEY, flow.isPass());
+
+ if (flow.isPass()&&applicationEntity.getIsSuggestion()){
+ updateVoById(applicationEntity,basicInfoEntity,carEntity,planEntity,schemeEntity,goodsEntity);
+ }
+
+ // 完成任务
+ taskService.complete(taskId, variables);
+ return true;
+ }
+
+ @Override
+ public List<ApplicationVO> getAll(ApplicationVO applicationVO) {
+ return baseMapper.getAll(applicationVO);
+ }
+
+ /**
+ * 获取最大编号
+ *
+ * @return
+ */
+ public ApplicationEntity getMaxNoEntity() {
+ return baseMapper.getMaxNoEntity();
+ }
+
+ /**
+ * 判断是否包含最终节点且为倒数第二个节点
+ * @param task
+ * @param definitionId
+ * @return
+ */
+ public boolean getEndNode(Task task,String definitionId){
+ boolean isEnd=false;
+ boolean finalTask = false;
+ 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();
+ FlowElement sourceFlowElement = outgoingFlow.getSourceFlowElement();
+ if (sourceFlowElement.getId().equals("finalTask")){
+ finalTask = true;
+ }
+ if (targetFlowElement instanceof EndEvent){
+ isEnd = true;
+ break;
+ }
+ }
+ return isEnd&&finalTask;
+ }
}
--
Gitblit v1.9.3