From 42c17fe468ceea7e5eed7fec520b9858bed02e85 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期五, 04 八月 2023 17:52:30 +0800 Subject: [PATCH] Merge branch 'master' of http://dev.vci-tech.com:1065/r/ubcs --- Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/envent/FlowExecutionEndListener.java | 102 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 99 insertions(+), 3 deletions(-) diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/envent/FlowExecutionEndListener.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/envent/FlowExecutionEndListener.java index 2d19f54..d1a818d 100644 --- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/envent/FlowExecutionEndListener.java +++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/envent/FlowExecutionEndListener.java @@ -1,19 +1,115 @@ package com.vci.ubcs.flow.engine.envent; +import com.vci.ubcs.flow.core.dto.FlowStatusDTO; +import com.vci.ubcs.flow.engine.constant.FlowEngineConstant; +import com.vci.ubcs.flow.engine.utils.FlowableUtils; +import com.vci.ubcs.starter.exception.VciBaseException; +import com.vci.ubcs.starter.web.util.LangBaseUtil; +import com.vci.ubcs.starter.web.util.VciBaseUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.flowable.engine.HistoryService; +import org.flowable.engine.TaskService; import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.ExecutionListener; +import org.flowable.engine.impl.el.FixedValue; +import org.springblade.core.jwt.JwtUtil; +import org.springblade.core.launch.constant.TokenConstant; +import org.springblade.core.tool.utils.WebUtil; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.RestTemplate; +import java.util.List; import java.util.Map; @Slf4j @Component -public class FlowExecutionEndListener implements ExecutionListener { +public class FlowExecutionEndListener implements ExecutionListener, ApplicationContextAware { + + /** + * 杩滅▼璋冪敤鍦板潃銆傚垏璁帮細鍚嶇О瑕佷笌娴佺▼涓畾涔夌殑涓�鏍� + */ + private FixedValue remoteMethod; + + /** + * 鐘舵�佸�笺�傚垏璁帮細鍚嶇О瑕佷笌娴佺▼涓畾涔夌殑涓�鏍� + */ + private FixedValue statusValue; + + private static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext arg0) throws BeansException { + applicationContext = arg0; + } @Override public void notify(DelegateExecution execution) { - Map var = execution.getVariableInstances(); - log.info("鎵ц娴佺▼FlowExecutionEndListener",var); + Map variables = execution.getVariables(); + String restURL = remoteMethod.getExpressionText(); + String status = statusValue.getExpressionText(); + //鑾峰彇涓氬姟鏁版嵁淇℃伅 + List<String> oids = (List<String>) variables.get(FlowEngineConstant.OIDS); + String btmType = (String) variables.get(FlowEngineConstant.BTMTYPE); + + variables.put(FlowEngineConstant.REMOTE_METHOD,restURL); + variables.put(FlowEngineConstant.STATUS_VALUE,status); + + if(CollectionUtils.isEmpty(oids)){ + throw new VciBaseException("鎵ц鐘舵�佷慨鏀逛簨浠舵椂锛屼笟鍔℃暟鎹畂id涓虹┖锛�"); + } + if(StringUtils.isEmpty(btmType)){ + throw new VciBaseException("鎵ц鐘舵�佷慨鏀逛簨浠舵椂锛屼笟鍔$被鍨媌tmType涓虹┖锛�"); + } + if(StringUtils.isEmpty(restURL)){ + throw new VciBaseException("鎵ц鐘舵�佷慨鏀逛簨浠舵椂锛岃繙绋嬭皟鐢ㄥ湴鍧�涓虹┖锛�"); + } + if(StringUtils.isEmpty(status)){ + throw new VciBaseException("鎵ц鐘舵�佷慨鏀逛簨浠舵椂锛岀姸鎬佷负绌猴紒"); + } + + HistoryService historyService = applicationContext.getBean(HistoryService.class); + TaskService taskService = applicationContext.getBean(TaskService.class); + + FlowStatusDTO flowStatusDTO = new FlowStatusDTO(); + flowStatusDTO.setBtmType(btmType); + flowStatusDTO.setOids(oids); + flowStatusDTO.setVariableMap(variables); + flowStatusDTO.setTaskHisVOList(FlowableUtils.listTaskHistory(execution.getProcessInstanceId(),historyService,taskService)); + + String token = JwtUtil.getToken(WebUtil.getRequest().getHeader(TokenConstant.HEADER)); + + HttpComponentsClientHttpRequestFactory requestFactory=new HttpComponentsClientHttpRequestFactory(); + requestFactory.setReadTimeout(300000); + requestFactory.setConnectionRequestTimeout(300000); + requestFactory.setConnectTimeout(300000); + RestTemplate restTemplate = new RestTemplate(requestFactory); + HttpHeaders headers = new HttpHeaders(); + headers.add(TokenConstant.HEADER,token); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity httpEntity = new HttpEntity<>(flowStatusDTO,headers); + Map<String, Object> result = null; + try { + result = restTemplate.postForObject(restURL, httpEntity, Map.class); + } catch (HttpClientErrorException e) { + throw new VciBaseException(LangBaseUtil.getErrorMsg(e),new String[]{},e); + }catch (Throwable e){ + throw new VciBaseException(LangBaseUtil.getErrorMsg(e),new String[]{},e); + } + if(result == null){ + throw new VciBaseException("涓氬姟浜嬩欢鏃跺�欐病鏈夎繑鍥炲�硷紝涓嶇‘瀹氭槸鍚︽墽琛屾垚鍔�"); + } + if(CollectionUtils.isEmpty(result) && !(Boolean) result.get("success")){ + throw new VciBaseException((String) result.get("message")); + } } } -- Gitblit v1.9.3