| | |
| | | package org.springblade.modules.applicationDelay.service.impl; |
| | | |
| | | 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.runtime.ProcessInstance; |
| | | import org.flowable.task.api.Task; |
| | | import org.springblade.common.constant.AuditStatusConstant; |
| | | import org.springblade.core.log.exception.ServiceException; |
| | | 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.DateUtil; |
| | |
| | | import org.springblade.flow.core.utils.FlowUtil; |
| | | import org.springblade.flow.core.utils.TaskUtil; |
| | | import org.springblade.flow.demo.leave.entity.ProcessLeave; |
| | | import org.springblade.modules.application.entity.ApplicationEntity; |
| | | import org.springblade.modules.application.entity.BasicInfoEntity; |
| | | import org.springblade.modules.application.service.IApplicationService; |
| | | import org.springblade.modules.application.service.IBasicInfoService; |
| | | import org.springblade.modules.applicationDelay.entity.ApplicationDelayEntity; |
| | | import org.springblade.modules.applicationDelay.vo.ApplicationDelayVO; |
| | | import org.springblade.modules.applicationDelay.mapper.ApplicationDelayMapper; |
| | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | |
| | | @Service |
| | | @AllArgsConstructor |
| | | public class ApplicationDelayServiceImpl extends BaseServiceImpl<ApplicationDelayMapper, ApplicationDelayEntity> implements IApplicationDelayService { |
| | | private final IApplicationService applicationService; |
| | | private final IBasicInfoService basicInfoService; |
| | | |
| | | private final IFlowService flowService; |
| | | private final TaskService taskService; |
| | | private final RuntimeService runtimeService; |
| | | private final RepositoryService repositoryService; |
| | | |
| | | @Override |
| | | public IPage<ApplicationDelayVO> selectApplicationDelayPage(IPage<ApplicationDelayVO> page, ApplicationDelayVO applicationDelay) { |
| | |
| | | if (variables == null) { |
| | | variables = Kv.create(); |
| | | } |
| | | |
| | | |
| | | Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); |
| | | ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); |
| | | // 通过流程实例获取“业务键” |
| | | String businessKey = pi.getBusinessKey().split(":")[1]; |
| | | |
| | | //获取实例对象 |
| | | ApplicationDelayEntity entity = getById(businessKey); |
| | | |
| | | //未通过审核 |
| | | if (!flow.isPass()){ |
| | | entity.setStatus(AuditStatusConstant.REJECT_AUDIT); |
| | | } |
| | | |
| | | //通过审核且下一步就结束 |
| | | if (flow.isPass() && getEndNode(task, entity.getProcessDefinitionId())) { |
| | | Long applicationId = applicationService.getByNo(entity.getNo()).getId(); |
| | | BasicInfoEntity basicInfo = basicInfoService.getOne(Condition.getQueryWrapper(new BasicInfoEntity(applicationId.toString()))); |
| | | //更新基础信息 |
| | | basicInfo.setStartPassTime(entity.getDelayStartTime()); |
| | | basicInfo.setEndPassTime(entity.getDelayEndTime()); |
| | | basicInfo.setPathway(entity.getPathway()); |
| | | basicInfo.setDeparture(entity.getDeparture()); |
| | | basicInfo.setDestination(entity.getDestination()); |
| | | basicInfo.setPassProvince(entity.getPassProvince()); |
| | | basicInfo.setPassBridge(entity.getPassBridge()); |
| | | basicInfo.setTransportDept(entity.getTransportDept()); |
| | | basicInfoService.updateById(basicInfo); |
| | | |
| | | //修改审核状态 |
| | | entity.setStatus(AuditStatusConstant.FINISH); |
| | | } |
| | | |
| | | updateById(entity); |
| | | |
| | | variables.put(ProcessConstant.PASS_KEY, flow.isPass()); |
| | | // 完成任务 |
| | | taskService.complete(taskId, variables); |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 判断是否包含最终节点且为倒数第二个节点 |
| | | * |
| | | * @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; |
| | | } |
| | | |
| | | } |