JmsBpmTestCaseConsumer.java 9.07 KB
//package com.hotent.runtime.jms;
//
//import javax.annotation.Resource;
//
//import com.hotent.bpm.api.service.BoDataService;
//import com.hotent.bpm.util.BoDataUtil;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
//import org.springframework.jms.annotation.JmsListener;
//import org.springframework.security.core.context.SecurityContextHolder;
//import org.springframework.stereotype.Service;
//
//import com.fasterxml.jackson.databind.JsonNode;
//import com.fasterxml.jackson.databind.node.ArrayNode;
//import com.fasterxml.jackson.databind.node.ObjectNode;
//import com.hotent.base.constants.JmsConstant;
//import com.hotent.base.context.BaseContext;
//import com.hotent.base.jms.JmsProducer;
//import com.hotent.base.model.CommonResult;
//import com.hotent.base.query.PageList;
//import com.hotent.base.query.QueryFilter;
//import com.hotent.base.query.QueryOP;
//import com.hotent.base.util.AppUtil;
//import com.hotent.base.util.Base64;
//import com.hotent.base.util.BeanUtils;
//import com.hotent.base.util.ExceptionUtil;
//import com.hotent.base.util.JsonUtil;
//import com.hotent.base.util.StringUtil;
//import com.hotent.base.util.time.DateUtil;
//import com.hotent.bpm.api.constant.OpinionStatus;
//import com.hotent.bpm.persistence.manager.BpmProcessInstanceManager;
//import com.hotent.bpm.persistence.manager.impl.BpmCheckOpinionManagerImpl;
//import com.hotent.bpm.persistence.model.AutoTestModel;
//import com.hotent.bpm.persistence.model.DefaultBpmProcessInstance;
//import com.hotent.bpm.persistence.util.BpmUtil;
//import com.hotent.bpm.persistence.util.PublishAutoTestEventUtil;
//import com.hotent.runtime.constant.SysObjTypeConstants;
//import com.hotent.runtime.manager.BpmTestCaseLogsManager;
//import com.hotent.runtime.manager.BpmTestCaseManager;
//import com.hotent.runtime.manager.IFlowManager;
//import com.hotent.runtime.manager.IProcessManager;
//import com.hotent.runtime.model.BpmTestCase;
//import com.hotent.runtime.model.BpmTestCaseLogs;
//import com.hotent.runtime.params.DoEndParamObject;
//import com.hotent.runtime.params.DoNextParamObject;
//import com.hotent.uc.api.impl.model.UserFacade;
//import com.hotent.uc.api.impl.util.ContextUtil;
//
//import java.util.List;
//
//@Service
//@ConditionalOnProperty(value="jms.enable", matchIfMissing = true)
//public class JmsBpmTestCaseConsumer {
//	private static final Logger logger = LoggerFactory.getLogger(JmsBpmTestCaseConsumer.class);
//	@Resource
//	BpmTestCaseLogsManager bpmTestCaseLogsManager;
//	@Resource
//	BaseContext baseContext;
//	@JmsListener(destination = JmsConstant.BPM_TEST_CASE	, containerFactory="jmsListenerContainerQueue")
//	public void receiveQueue(AutoTestModel model) throws Exception {
//		logger.debug("[JMS]: queue message is :"+model.getClass().getName()+"---"+model);
//		autoTest(model);
//	}
//
//	// 流程仿真测试
//		private void autoTest(Object obj) throws Exception{
//			if(!(obj instanceof AutoTestModel)) return;
//			try {
//				Thread.sleep(1000);
//			} catch (InterruptedException e1) {
//				e1.printStackTrace();
//			}
//			AutoTestModel model = (AutoTestModel) obj;
//
//			if(StringUtil.isEmpty(model.getProcInstId())) return;
//			baseContext.setTempTenantId(model.getTenantId());
//			BpmProcessInstanceManager bean = AppUtil.getBean(BpmProcessInstanceManager.class);
//			BpmTestCaseManager testCase = AppUtil.getBean(BpmTestCaseManager.class);
//			DefaultBpmProcessInstance instance = bean.get(model.getProcInstId());
//			if(BeanUtils.isEmpty(instance)) return;
//			String flowKey = instance.getProcDefKey();
//			String nodeId = model.getNodeId();
//			instance = (DefaultBpmProcessInstance) bean.getTopBpmProcessInstance(instance);
//
//			String sysCode = instance.getSysCode();
//			if(StringUtil.isEmpty(sysCode) || !sysCode.startsWith(SysObjTypeConstants.BPMX_AUTO_TEST) ) return;
//
//			BpmTestCase bpmTestCase = testCase.get(sysCode.replace(SysObjTypeConstants.BPMX_AUTO_TEST, ""));
//
//			// 获取当前的审批动作 {nodeId:actionName}==>> {"userTask1":"agree"}
//			String actionName = "agree";
//			String destination = "";
//			int count = 1;
//			String actionType = bpmTestCase.getActionType();
//			if(StringUtil.isNotEmpty(actionType) &&  JsonUtil.toJsonNode(actionType).has(flowKey) ){
//				ArrayNode jsonArray = (ArrayNode) JsonUtil.toJsonNode(actionType).get(flowKey);
//				ObjectNode parse = JsonUtil.arrayToObject(jsonArray, "nodeId");
//				if(parse.has(model.getNodeId())){
//					parse = (ObjectNode) parse.get(model.getNodeId());
//					actionName = JsonUtil.getString(parse, "actionName",actionName);
//					count =  JsonUtil.getInt(parse, "count",count);
//				}
//			}
//
//		   try {
//
//			   IProcessManager processService = AppUtil.getBean(IProcessManager.class);
//			   IFlowManager flowManager = AppUtil.getBean(IFlowManager.class);
//
//			    if("endProcess".equals(actionName)){
//			    	DoEndParamObject doEndParamObject = new DoEndParamObject();
//			    	doEndParamObject.setEndReason("流程仿真测试--人工结束流程");
//			    	doEndParamObject.setTaskId(model.getTaskId());
//			    	processService.doEndProcess(doEndParamObject);
//			    	return;
//				}
//
//			    // bpmDebugger
//			    String debugger = bpmTestCase.getBpmDebugger();
//			    if(StringUtil.isNotEmpty(debugger) && !model.getSkipDebugger() ){
//			    	ObjectNode debuggerJo = (ObjectNode) JsonUtil.toJsonNode(debugger);
//			    	if(debuggerJo.has(flowKey)){
//			    		ArrayNode jsonArray = (ArrayNode) debuggerJo.get(flowKey);
//			    		for (JsonNode jsonNode : jsonArray) {
//			    			if(nodeId.equals(jsonNode.asText())){
//				    			throw new RuntimeException("设置了断点, 流程审批到该节点停止了测试用例往下执行,需要继续运行的请在流程实例中点击继续运行。 ");
//				    		}
//						}
//
//			    	}
//			    }
//
//			    if(OpinionStatus.BACK_TO_START.getKey().equals(actionName) || OpinionStatus.REJECT.getKey().equals(actionName)  ){
//
//			    	if( OpinionStatus.REJECT.getKey().equals(actionName)){
//			    		destination = BpmUtil.getRejectPreDestination(model.getTaskId());
//			    		if(StringUtil.isEmpty(destination)){
//			    			throw new RuntimeException("在审批节点[ "+model.getNodeName()+" ] 不支持驳回到上一步的设置,请修改测试用例。 ");
//			    		}
//			    	}
//
//			    	// 判断驳回次数
//			    	QueryFilter queryFilter = QueryFilter.build();
//			    	queryFilter.addFilter("proc_inst_id_", model.getProcInstId(), QueryOP.EQUAL);
//			    	queryFilter.addFilter("task_key_", model.getNodeId(), QueryOP.EQUAL);
//			    	queryFilter.addFilter("status_", OpinionStatus.BACK_TO_START.getKey().equals(actionName)?"backToStart":"reject", QueryOP.EQUAL);
//			    	BpmCheckOpinionManagerImpl bpmCheckOpinionManagerImpl = (BpmCheckOpinionManagerImpl) AppUtil.getBean("bpmCheckOpinionManager");
//			    	PageList query = bpmCheckOpinionManagerImpl.query(queryFilter);
//			    	if(BeanUtils.isNotEmpty(query) && query.getTotal()>=count){
//			    		actionName = "agree";
//			    	}
//
//			    }
//
//			    //自动下一任务
//			   	BoDataService boDataService = AppUtil.getBean(BoDataService.class);
//			   	List<ObjectNode> boDatas = boDataService.getDataByInst(instance);
//			   	// BO数据前置处理
//			   	ObjectNode data = BoDataUtil.hanlerData(instance, "", boDatas);
//				DoNextParamObject doNextParamObject = new DoNextParamObject();
//				doNextParamObject.setAccount(model.getRandomAccount());
//				doNextParamObject.setActionName(actionName);
//				doNextParamObject.setData(Base64.getBase64(JsonUtil.toJson(data)));
//				doNextParamObject.setTaskId(model.getTaskId());
//				doNextParamObject.setDestination(destination);
//				doNextParamObject.setOpinion("流程仿真测试");
//				UserFacade userFacade = new UserFacade();
//				userFacade.setAccount(doNextParamObject.getAccount());
//				SecurityContextHolder.getContext().setAuthentication(null);
//				ContextUtil.setCurrentUser(ContextUtil.getUserByAccount(doNextParamObject.getAccount()));
//				CommonResult<String> doNext = flowManager.complete(doNextParamObject).get();
//
//				if(doNext.getState()){
//					PublishAutoTestEventUtil.publishAutoTestEvent(instance.getId());
//				}
//
//
//			} catch (Exception e) {
//				e.printStackTrace();
//			 ObjectNode objectNode = JsonUtil.getMapper().createObjectNode();
//			 objectNode.put("id", instance.getId());
//			 objectNode.put("opeName", "流程[ "+instance.getSubject()+" ]未正常结束: ");
//			 objectNode.put("reqUrl", "");
//			 objectNode.put("opeContent", "在审批任务【"+model.getNodeName()+"】出现异常" +
//					  ExceptionUtil.getExceptionMessage(e));
//			 objectNode.putPOJO("executionTime", DateUtil.getCurrentDate());
//			 JmsProducer jmsProducer = AppUtil.getBean(JmsProducer.class);
//			 jmsProducer.sendToQueue(JsonUtil.toJson(objectNode),JmsConstant.SYS_LOG_QUEUE);
//			 bpmTestCaseLogsManager.removeById(instance.getId());
//			 BpmTestCaseLogs logs = JsonUtil.toBean(objectNode, BpmTestCaseLogs.class);
//			 bpmTestCaseLogsManager.create(logs);
//			}finally {
//				baseContext.clearTempTenantId();
//			}
//		}
//}