From a19d26e88360c9760b2286bac4dfb1710fd2fa21 Mon Sep 17 00:00:00 2001
From: xiejun <xj@2023>
Date: 星期六, 12 八月 2023 13:33:58 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/envent/FlowStatusListener.java |  123 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 123 insertions(+), 0 deletions(-)

diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/envent/FlowStatusListener.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/envent/FlowStatusListener.java
new file mode 100644
index 0000000..ffe275d
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/envent/FlowStatusListener.java
@@ -0,0 +1,123 @@
+package com.vci.ubcs.flow.engine.envent;
+
+import com.vci.ubcs.flow.core.constant.ProcessConstant;
+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.TaskListener;
+import org.flowable.engine.impl.el.FixedValue;
+import org.flowable.task.service.delegate.DelegateTask;
+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 FlowStatusListener implements TaskListener, 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(DelegateTask delegateTask) {
+		Map taskVariable = delegateTask.getVariables();
+		boolean pass = (boolean) taskVariable.get(ProcessConstant.PASS_KEY);
+
+		//鑾峰彇鐘舵�佷慨鏀逛俊鎭�
+		if(pass){
+			String restURL = remoteMethod.getExpressionText();
+			String status = statusValue.getExpressionText();
+			//鑾峰彇涓氬姟鏁版嵁淇℃伅
+			List<String> oids = (List<String>) taskVariable.get(FlowEngineConstant.OIDS);
+			String btmType = (String) taskVariable.get(FlowEngineConstant.BTMTYPE);
+
+			taskVariable.put(FlowEngineConstant.REMOTE_METHOD,restURL);
+			taskVariable.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(taskVariable);
+			flowStatusDTO.setTaskHisVOList(FlowableUtils.listTaskHistory(delegateTask.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