|
@@ -1,12 +1,31 @@
|
|
|
package com.qmth.sop.business.activiti.listener;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.qmth.sop.business.bean.result.FlowFormWidgetResult;
|
|
|
+import com.qmth.sop.business.bean.result.FlowResult;
|
|
|
+import com.qmth.sop.business.bean.result.FlowTablePropResult;
|
|
|
+import com.qmth.sop.business.bean.result.FlowTaskResult;
|
|
|
+import com.qmth.sop.business.entity.TFCustomFlow;
|
|
|
+import com.qmth.sop.business.service.TFCustomFlowService;
|
|
|
+import com.qmth.sop.common.contant.SpringContextHolder;
|
|
|
+import com.qmth.sop.common.contant.SystemConstant;
|
|
|
+import com.qmth.sop.common.enums.TFCustomModelTypeEnum;
|
|
|
+import com.qmth.sop.common.enums.TFCustomTypeEnum;
|
|
|
+import com.qmth.sop.common.util.JacksonUtil;
|
|
|
+import org.activiti.engine.delegate.event.ActivitiEntityEvent;
|
|
|
import org.activiti.engine.delegate.event.ActivitiEvent;
|
|
|
import org.activiti.engine.delegate.event.ActivitiEventListener;
|
|
|
+import org.activiti.engine.impl.persistence.entity.ResourceEntity;
|
|
|
+import org.dom4j.*;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.io.Serializable;
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
+import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
|
|
|
|
* @Description: 全局监听
|
|
@@ -37,6 +56,89 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
|
|
|
|
|
|
|
|
|
|
|
|
+ case ENTITY_CREATED:
|
|
|
+ ActivitiEntityEvent activitiEntityEvent = (ActivitiEntityEvent) event;
|
|
|
+ if (activitiEntityEvent.getEntity() instanceof ResourceEntity) {
|
|
|
+ ResourceEntity resourceEntity = (ResourceEntity) activitiEntityEvent.getEntity();
|
|
|
+ log.info("ENTITY_CREATED,id:{},name:{},deploymentId:{},persistentState:{}", resourceEntity.getId(), resourceEntity.getName(), resourceEntity.getDeploymentId(), resourceEntity.getPersistentState());
|
|
|
+ if (resourceEntity.getName().endsWith(SystemConstant.BPMN_PREFIX)) {
|
|
|
+ String xml = new String(resourceEntity.getBytes(), StandardCharsets.UTF_8);
|
|
|
+
|
|
|
+ try {
|
|
|
+ Document doc = DocumentHelper.parseText(xml);
|
|
|
+ Element rootElement = doc.getRootElement();
|
|
|
+
|
|
|
+ AtomicInteger atomicInteger = new AtomicInteger(1);
|
|
|
+ Iterator iterator = rootElement.elementIterator();
|
|
|
+ Map<String, FlowTaskResult> setupMap = new LinkedHashMap<>();
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ Element element = (Element) iterator.next();
|
|
|
+ List<Attribute> attributes = element.attributes();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Iterator itt = element.elementIterator();
|
|
|
+ while (itt.hasNext()) {
|
|
|
+ FlowTaskResult flowTaskResult = new FlowTaskResult();
|
|
|
+ Element node = (Element) itt.next();
|
|
|
+ attributes = node.attributes();
|
|
|
+
|
|
|
+ if (Objects.equals(node.getName(), SystemConstant.START_EVENT) || Objects.equals(node.getName(), SystemConstant.USER_TASK) || Objects.equals(node.getName(), SystemConstant.END_EVENT)) {
|
|
|
+ if (Objects.equals(node.getName(), SystemConstant.END_EVENT)) {
|
|
|
+ flowTaskResult.setSetup(0);
|
|
|
+ } else {
|
|
|
+ flowTaskResult.setSetup(atomicInteger.getAndIncrement());
|
|
|
+ }
|
|
|
+ for (Attribute attr : attributes) {
|
|
|
+
|
|
|
+ if (Objects.equals(attr.getName(), SystemConstant.ID_FLOW)) {
|
|
|
+ flowTaskResult.setTaskKey(attr.getValue());
|
|
|
+ setupMap.put(attr.getValue(), flowTaskResult);
|
|
|
+ } else if (Objects.equals(attr.getName(), SystemConstant.NAME)) {
|
|
|
+ flowTaskResult.setTaskName(attr.getValue());
|
|
|
+ } else if (Objects.equals(attr.getName(), SystemConstant.FORM_KEY) && SystemConstant.FLOW_MAP.containsKey(resourceEntity.getDeploymentId() + SystemConstant.FLOW_FORM_ID_SPACE + attr.getValue())) {
|
|
|
+ flowTaskResult.setFormKey(attr.getValue());
|
|
|
+ List<String> list = SystemConstant.FLOW_MAP.get(resourceEntity.getDeploymentId() + SystemConstant.FLOW_FORM_ID_SPACE + attr.getValue());
|
|
|
+ String data = list.get(list.size() - 1);
|
|
|
+ List<FlowFormWidgetResult> listData = JSONArray.parseArray(data, FlowFormWidgetResult.class);
|
|
|
+ for (FlowFormWidgetResult f : listData) {
|
|
|
+ f.setFormId(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + f.getFormId());
|
|
|
+ f.setFormName(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + f.getFormName());
|
|
|
+ if (!CollectionUtils.isEmpty(f.getTablePropList())) {
|
|
|
+ for (FlowTablePropResult t : f.getTablePropList()) {
|
|
|
+ t.setTdId(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + t.getWidgetId() + SystemConstant.FLOW_FORM_ID_SPACE + t.getTdId());
|
|
|
+ t.setTdName(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + t.getWidgetId() + SystemConstant.FLOW_FORM_ID_SPACE + t.getTdName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ flowTaskResult.setFormProperty(listData);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ FlowResult flowResult = new FlowResult(resourceEntity.getDeploymentId(), resourceEntity.getName(), setupMap);
|
|
|
+ log.info("flowResult:{}", JacksonUtil.parseJson(flowResult));
|
|
|
+ TFCustomFlowService tfCustomFlowService = SpringContextHolder.getBean(TFCustomFlowService.class);
|
|
|
+ TFCustomFlow maxTfCustomFlow = tfCustomFlowService.findMaxVersion(null, flowResult.getFlowName(), TFCustomTypeEnum.OFFICE_SOP_FLOW);
|
|
|
+ TFCustomFlow tfCustomFlow = new TFCustomFlow(null, flowResult.getFlowName(), TFCustomTypeEnum.OFFICE_SOP_FLOW, flowResult.getDeploymentId(), TFCustomModelTypeEnum.USER_FIXED);
|
|
|
+ flowResult.setId(tfCustomFlow.getId());
|
|
|
+ if (Objects.nonNull(maxTfCustomFlow)) {
|
|
|
+ tfCustomFlow.setVersion(maxTfCustomFlow.getVersion() + 1);
|
|
|
+ }
|
|
|
+ flowResult.setVersion(tfCustomFlow.getVersion());
|
|
|
+ tfCustomFlow.setFlowProcessVar(JacksonUtil.parseJson(flowResult));
|
|
|
+ tfCustomFlowService.save(tfCustomFlow);
|
|
|
+ } catch (DocumentException e) {
|
|
|
+ log.error(SystemConstant.LOG_ERROR, e);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ String data = new String(resourceEntity.getBytes(), StandardCharsets.UTF_8);
|
|
|
+
|
|
|
+ SystemConstant.FLOW_MAP.add(resourceEntity.getDeploymentId() + SystemConstant.FLOW_FORM_ID_SPACE + resourceEntity.getName(), data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
default:
|
|
|
|
|
|
break;
|