| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198 |
- package jnpf.integrate.util;
- import cn.hutool.core.collection.CollectionUtil;
- import cn.hutool.core.util.ObjectUtil;
- import cn.hutool.http.HttpRequest;
- import cn.hutool.http.Method;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.google.common.collect.ImmutableList;
- import com.google.common.collect.ImmutableMap;
- import jnpf.base.ActionResult;
- import jnpf.base.UserInfo;
- import jnpf.base.entity.VisualdevEntity;
- import jnpf.base.model.VisualDevJsonModel;
- import jnpf.base.model.VisualLogModel;
- import jnpf.base.model.flow.DataModel;
- import jnpf.base.service.DataInterfaceService;
- import jnpf.base.service.VisualdevService;
- import jnpf.base.util.SentMessageUtil;
- import jnpf.config.ConfigValueUtil;
- import jnpf.constant.DataInterfaceVarConst;
- import jnpf.constant.JnpfConst;
- import jnpf.constant.MsgCode;
- import jnpf.database.model.superQuery.SuperJsonModel;
- import jnpf.database.model.superQuery.SuperQueryJsonModel;
- import jnpf.emnus.TemplateEnum;
- import jnpf.exception.WorkFlowException;
- import jnpf.flowable.entity.TaskEntity;
- import jnpf.flowable.entity.TemplateEntity;
- import jnpf.flowable.entity.TemplateJsonEntity;
- import jnpf.flowable.enums.TaskStatusEnum;
- import jnpf.flowable.model.task.FlowModel;
- import jnpf.flowable.model.templatejson.FlowFormModel;
- import jnpf.flowable.model.trigger.TriggerDataFo;
- import jnpf.flowable.model.trigger.TriggerDataModel;
- import jnpf.flowable.model.trigger.TriggerModel;
- import jnpf.flowable.service.TaskService;
- import jnpf.flowable.service.TemplateJsonService;
- import jnpf.flowable.service.TemplateService;
- import jnpf.integrate.entity.IntegrateEntity;
- import jnpf.integrate.entity.IntegrateNodeEntity;
- import jnpf.integrate.entity.IntegrateQueueEntity;
- import jnpf.integrate.entity.IntegrateTaskEntity;
- import jnpf.integrate.model.childnode.*;
- import jnpf.integrate.model.integrate.IntegratePagination;
- import jnpf.integrate.model.nodeJson.IntegrateChildNodeList;
- import jnpf.integrate.model.nodeJson.IntegrateChildNodeModel;
- import jnpf.integrate.service.IntegrateNodeService;
- import jnpf.integrate.service.IntegrateQueueService;
- import jnpf.integrate.service.IntegrateService;
- import jnpf.integrate.service.IntegrateTaskService;
- import jnpf.message.model.SentMessageForm;
- import jnpf.model.visualJson.FieLdsModel;
- import jnpf.onlinedev.model.AsyncExecuteModel;
- import jnpf.onlinedev.model.OnlineInfoModel;
- import jnpf.onlinedev.model.PaginationModel;
- import jnpf.base.model.OnlineImport.VisualdevModelDataInfoVO;
- import jnpf.onlinedev.model.VisualParamModel;
- import jnpf.onlinedev.service.VisualDevInfoService;
- import jnpf.onlinedev.service.VisualDevListService;
- import jnpf.onlinedev.service.VisualdevModelDataService;
- import jnpf.onlinedev.util.onlineDevUtil.OnlinePublicUtils;
- import jnpf.permission.entity.UserEntity;
- import jnpf.permission.model.authorize.AuthorizeConditionEnum;
- import jnpf.permission.service.OrganizeAdministratorService;
- import jnpf.permission.service.OrganizeService;
- import jnpf.permission.service.UserService;
- import jnpf.util.*;
- import jnpf.workflow.service.TriggerApi;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.scheduling.annotation.Async;
- import org.springframework.stereotype.Component;
- import java.util.*;
- import java.util.stream.Collectors;
- @Component
- public class IntegrateUtil {
- @Autowired
- private UserService userService;
- @Autowired
- private SentMessageUtil sentMessageUtil;
- @Autowired
- private DataInterfaceService dataInterfaceService;
- @Autowired
- private VisualDevListService visualDevListService;
- @Autowired
- private IntegrateService integrateService;
- @Autowired
- private IntegrateQueueService integrateQueueService;
- @Autowired
- private VisualdevService visualdevService;
- @Autowired
- private VisualDevInfoService visualDevInfoService;
- @Autowired
- private IntegrateTaskService integrateTaskService;
- @Autowired
- private IntegrateNodeService integrateNodeService;
- @Autowired
- private VisualdevModelDataService visualdevModelDataService;
- @Autowired
- private TaskService taskService;
- @Autowired
- private TemplateService templateService;
- @Autowired
- private TemplateJsonService templateJsonService;
- @Autowired
- private OrganizeService organizeService;
- @Autowired
- private OrganizeAdministratorService organizeAdministratorService;
- @Autowired
- private ConfigValueUtil configValueUtil;
- @Autowired
- private TriggerApi triggerApi;
- //------------------------------------------事件------------------------------------------------------
- @Async
- public void asyncList(List<VisualdevModelDataInfoVO> resultData, UserInfo userInfo) {
- if (!resultData.isEmpty()) {
- String url = configValueUtil.getApiDomain() + "/api/visualdev/Integrate/execute";
- IntegrateHttpModel model = new IntegrateHttpModel();
- model.setUserInfo(userInfo);
- model.setDataInfoVOList(resultData);
- HttpRequest request = HttpRequest.of(url).method(Method.POST).body(JsonUtil.getObjectToString(model));
- request.header(Constants.AUTHORIZATION, userInfo.getToken());
- request.execute().body();
- }
- }
- public List<TriggerDataModel> asyncDelExecute(AsyncExecuteModel executeModel) {
- String modelId = executeModel.getModelId();
- Integer trigger = executeModel.getTrigger();
- List<String> dataId = executeModel.getDataId();
- DataModel dataModel = executeModel.getDataModel();
- List<Map<String, Object>> dataMap = executeModel.getDataMap();
- TriggerDataFo fo = new TriggerDataFo();
- fo.setModelId(modelId);
- fo.setTrigger(trigger);
- fo.setDataId(dataId);
- fo.setDataMap(dataMap);
- if (dataModel != null) {
- List<VisualLogModel> listLog = dataModel.getListLog();
- if (CollectionUtil.isNotEmpty(listLog)) {
- List<String> updateFields = this.getUpdateFields(listLog);
- fo.setUpdateFields(updateFields);
- }
- }
- List<TriggerDataModel> resultData = triggerApi.getTriggerDataModel(fo);
- return resultData;
- }
- @Async
- public void asyncExecute(AsyncExecuteModel executeModel) {
- String modelId = executeModel.getModelId();
- Integer trigger = executeModel.getTrigger();
- List<String> dataId = executeModel.getDataId();
- UserInfo userInfo = executeModel.getUserInfo();
- DataModel dataModel = executeModel.getDataModel();
- List<Map<String, Object>> dataMap = executeModel.getDataMap();
- TriggerDataFo fo = new TriggerDataFo();
- fo.setModelId(modelId);
- fo.setTrigger(trigger);
- fo.setDataId(dataId);
- fo.setDataMap(dataMap);
- if (dataModel != null) {
- List<VisualLogModel> listLog = dataModel.getListLog();
- if (CollectionUtil.isNotEmpty(listLog)) {
- List<String> updateFields = this.getUpdateFields(listLog);
- fo.setUpdateFields(updateFields);
- }
- }
- List<TriggerDataModel> resultData = triggerApi.getTriggerDataModel(fo);
- if (!resultData.isEmpty()) {
- String url = configValueUtil.getApiDomain() + "/api/workflow/trigger/Execute";
- TriggerModel model = new TriggerModel();
- model.setUserInfo(userInfo);
- model.setDataList(resultData);
- HttpRequest request = HttpRequest.of(url).method(Method.POST).body(JsonUtil.getObjectToString(model));
- request.header(Constants.AUTHORIZATION, userInfo.getToken());
- request.execute().body();
- }
- }
- private List<String> getUpdateFields(List<VisualLogModel> listLog) {
- List<String> updateFields = new ArrayList<>();
- if (CollectionUtil.isNotEmpty(listLog)) {
- for (VisualLogModel logModel : listLog) {
- String field = logModel.getField();
- List<Map<String, Object>> chidField = logModel.getChidField();
- List<Map<String, Object>> chidData = logModel.getChidData();
- if (CollectionUtil.isNotEmpty(chidField) && CollectionUtil.isNotEmpty(chidData)) {
- // 子表
- for (Map<String, Object> map : chidField) {
- String key = (String) map.get("prop");
- for (Map<String, Object> child : chidData) {
- if (!ObjectUtil.equals(child.get(key), child.get("jnpf_old_" + key))) {
- updateFields.add(field + "-" + key);
- break;
- }
- }
- }
- } else {
- updateFields.add(field);
- }
- }
- }
- return updateFields;
- }
- public void integrates(List<VisualdevModelDataInfoVO> dataInfoVOList, UserInfo userInfo) {
- for (VisualdevModelDataInfoVO infoVO : dataInfoVOList) {
- String integrateId = infoVO.getIntegrateId();
- List<Map<String, Object>> dataList = JsonUtil.getJsonToListMap(infoVO.getData());
- integrate(integrateId, dataList, userInfo);
- }
- }
- public List<VisualdevModelDataInfoVO> dataList(String modelId, Integer trigger, List<String> dataId) {
- List<VisualdevModelDataInfoVO> resultData = new ArrayList<>();
- List<IntegrateEntity> list = integrateList(modelId, trigger);
- for (IntegrateEntity entity : list) {
- //数据
- IntegrateChildNodeList childNodeModel = JsonUtil.getJsonToBean(entity.getTemplateJson(), IntegrateChildNodeList.class);
- List<Map<String, Object>> dataList = dataList(childNodeModel, new HashMap<>(16), dataId);
- if (dataList.size() > 0) {
- VisualdevModelDataInfoVO vo = new VisualdevModelDataInfoVO();
- vo.setData(JsonUtil.getObjectToString(dataList));
- vo.setIntegrateId(entity.getId());
- resultData.add(vo);
- }
- }
- return resultData;
- }
- private List<IntegrateEntity> integrateList(String modelId, Integer trigger) {
- IntegratePagination pagination = new IntegratePagination();
- pagination.setFormId(modelId);
- pagination.setType(1);
- pagination.setTrigger(trigger);
- pagination.setEnabledMark(1);
- List<IntegrateEntity> list = integrateService.getList(pagination, false);
- return list;
- }
- //------------------------------------------定时------------------------------------------------------
- //重试
- public void integrate(String taskId, String parentId, String taskNodeId) {
- IntegrateTaskEntity taskEntity = integrateTaskService.getInfo(taskId);
- if (taskEntity != null) {
- List<Map<String, Object>> dataList = new ArrayList<>();
- try {
- dataList.addAll(JsonUtil.getJsonToListMap(taskEntity.getData()));
- } catch (Exception e) {
- dataList.add(JsonUtil.stringToMap(taskEntity.getData()));
- }
- integrate(taskEntity.getIntegrateId(), dataList, UserProvider.getUser(), parentId, taskNodeId);
- }
- }
- //定时执行
- public void integrate(IntegrateQueueEntity queueEntity, UserInfo userInfo) {
- queueEntity.setState(1);
- integrateQueueService.update(queueEntity.getId(), queueEntity);
- String integrateId = queueEntity.getIntegrateId();
- List<Map<String, Object>> dataList = new ArrayList<>();
- IntegrateEntity entity = integrateService.getInfo(integrateId);
- if (entity != null) {
- IntegrateChildNode childNode = JsonUtil.getJsonToBean(entity.getTemplateJson(), IntegrateChildNode.class);
- IntegrateChildNode getDataChildNode = childNode.getChildNode();
- IntegrateChildNodeList dataListNodeMode = JsonUtil.getJsonToBean(getDataChildNode, IntegrateChildNodeList.class);
- IntegrateProperties properties = dataListNodeMode.getProperties();
- Integer formType = properties.getFormType();
- //远端节点
- if (Objects.equals(formType, 3)) {
- dataListNodeMode.getProperties().setTemplateJson(dataListNodeMode.getProperties().getInterfaceTemplateJson());
- try {
- ActionResult result = interfaceTemplateJson(dataListNodeMode, new HashMap<>(), userInfo);
- if (result.getData() instanceof List) {
- dataList.addAll((List) result.getData());
- }
- } catch (Exception e) {
- }
- } else {
- dataList.addAll(dataList(dataListNodeMode, new HashMap<>(16), new ArrayList<>()));
- }
- integrate(integrateId, dataList, userInfo);
- integrateQueueService.delete(queueEntity);
- }
- }
- //集成执行逻辑
- private void integrate(String integrateId, List<Map<String, Object>> dataList, UserInfo userInfo) {
- integrate(integrateId, dataList, userInfo, "0", "0");
- }
- //集成执行逻辑
- private void integrate(String integrateId, List<Map<String, Object>> dataList, UserInfo userInfo, String parentId, String taskNodeId) {
- if (dataList.isEmpty()) {
- return;
- }
- IntegrateEntity entity = integrateService.getInfo(integrateId);
- if (entity != null) {
- //获取实例重试数据
- IntegrateTaskEntity parentTask = integrateTaskService.getInfo(parentId);
- boolean isParentId = parentTask != null;
- //获取节点重试数据
- IntegrateNodeEntity info = integrateNodeService.getInfo(taskNodeId);
- boolean isTaskNodeId = info != null;
- String retryNodeCode = isTaskNodeId ? info.getNodeCode() : "";
- Date time = new Date();
- //判断是节点重试还是实例重试
- String json = isParentId ? entity.getTemplateJson() : entity.getTemplateJson();
- IntegrateChildNode childNode = JsonUtil.getJsonToBean(json, IntegrateChildNode.class);
- IntegrateChildNode getDataChildNode = childNode.getChildNode();
- IntegrateChildNodeList dataListNodeMode = JsonUtil.getJsonToBean(getDataChildNode, IntegrateChildNodeList.class);
- dataListNodeMode.setStartTime(time);
- List<IntegrateChildNodeList> childNodeListAll = new ArrayList<>();
- childList(childNode, childNodeListAll);
- IntegrateChildNodeList startNode = childNodeListAll.stream().filter(t -> "start".equals(t.getType())).findFirst().orElse(null);
- if (startNode != null) {
- List<String> idAll = new ArrayList<>();
- IntegrateTaskEntity taskEntity = new IntegrateTaskEntity();
- List<IntegrateNodeEntity> errNodeList = new ArrayList<>();
- String msg = "";
- Map<String, Object> errMsg = new HashMap<>();
- try {
- for (int i = 0; i < dataList.size(); i++) {
- Map<String, Object> objectMap = dataList.get(i);
- errMsg.putAll(objectMap);
- String id = String.valueOf(objectMap.get(FlowFormConstant.ID));
- List<IntegrateNodeEntity> nodeList = new ArrayList<>();
- taskEntity.setIntegrateId(entity.getId());
- taskEntity.setType(entity.getType());
- taskEntity.setTemplateJson(entity.getTemplateJson());
- taskEntity.setDataId(id);
- taskEntity.setParentId(isParentId ? parentTask.getId() : parentId);
- taskEntity.setParentTime(isParentId ? parentTask.getExecutionTime() : null);
- taskEntity.setResultType(isParentId ? parentTask.getResultType() : 1);
- taskEntity.setExecutionTime(new Date());
- taskEntity.setId(isTaskNodeId ? info.getTaskId() : RandomUtil.uuId());
- taskEntity.setData(dataList.size() > 0 ? JsonUtil.getObjectToString(dataList) : JsonUtil.getObjectToString(objectMap));
- taskEntity.setProcessId(taskEntity.getId());
- idAll.add(taskEntity.getId());
- if (i == 0 && !isParentId) {
- IntegrateTaskEntity taskEntitys = JsonUtil.getJsonToBean(taskEntity, IntegrateTaskEntity.class);
- integrateTaskService.saveOrUpdate(taskEntitys);
- }
- //节点
- List<IntegrateChildNodeList> nodeListAll = new ArrayList<>(childNodeListAll);
- for (int k = 0; k < nodeListAll.size(); k++) {
- IntegrateChildNodeList childNodeList = nodeListAll.get(k);
- childNodeList.setIntegrateType(taskEntity.getType());
- IntegrateProperties childProperties = childNodeList.getProperties();
- IntegrateNodeEntity nodeEntity = new IntegrateNodeEntity();
- nodeEntity.setResultType(0);
- nodeEntity.setParentId(taskNodeId);
- nodeEntity.setNodeType(childNodeList.getType());
- nodeEntity.setNodeNext(childNodeList.getNextId());
- nodeEntity.setStartTime(time);
- nodeEntity.setEndTime(time);
- nodeEntity.setTaskId(taskEntity.getId());
- nodeEntity.setNodeCode(childNodeList.getNodeId());
- nodeEntity.setFormId(childProperties.getFormId());
- nodeEntity.setNodeName(childProperties.getTitle());
- nodeEntity.setNodePropertyJson(JsonUtil.getObjectToString(childNodeList));
- nodeEntity.setSortCode(Long.parseLong(k + ""));
- nodeList.add(nodeEntity);
- }
- errNodeList = nodeList;
- IntegrateChildNodeModel childNodeModel = IntegrateChildNodeModel.builder().dataListAll(dataList).data(objectMap)
- .nodeList(nodeList).node(startNode.getNodeId()).entity(entity).retryNodeCode(retryNodeCode).userInfo(userInfo).num(0).build();
- childNode(childNodeModel);
- boolean failSum = nodeList.stream().filter(t -> t.getResultType() == 0).count() > 0;
- taskEntity.setResultType(failSum ? 0 : 1);
- integrateTaskService.update(taskEntity.getId(), taskEntity);
- }
- } catch (Exception e) {
- msg = e.getMessage();
- taskEntity.setResultType(0);
- }
- integrateTaskService.saveOrUpdate(taskEntity);
- idAll.remove(taskEntity.getId());
- if (!idAll.isEmpty()) {
- QueryWrapper<IntegrateTaskEntity> wrapper = new QueryWrapper();
- wrapper.lambda().in(IntegrateTaskEntity::getId, idAll);
- integrateTaskService.remove(wrapper);
- QueryWrapper<IntegrateNodeEntity> nodeWrapper = new QueryWrapper();
- nodeWrapper.lambda().in(IntegrateNodeEntity::getTaskId, idAll);
- integrateNodeService.remove(nodeWrapper);
- }
- if (StringUtil.isNotEmpty(msg)) {
- end(entity, new HashMap<>(errMsg), errNodeList, "end", false, userInfo);
- }
- }
- }
- }
- private void childList(IntegrateChildNode childNodeAll, List<IntegrateChildNodeList> listAll) {
- if (childNodeAll != null) {
- IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(childNodeAll, IntegrateChildNodeList.class);
- boolean isNext = childNodeAll.getChildNode() != null;
- String nextId = isNext ? childNodeAll.getChildNode().getNodeId() : "end";
- childNodeList.setNextId(nextId);
- listAll.add(childNodeList);
- if (isNext) {
- childList(childNodeAll.getChildNode(), listAll);
- }
- if ("end".equals(nextId)) {
- IntegrateChildNodeList endChildNodeList = listAll.stream().filter(t -> "start".equals(t.getType())).findFirst().orElse(null);
- IntegrateChildNodeList endNode = JsonUtil.getJsonToBean(endChildNodeList, IntegrateChildNodeList.class);
- endNode.setNodeId(nextId);
- endNode.setType(nextId);
- endNode.setNextId("");
- endNode.getProperties().setTitle("结束");
- listAll.add(endNode);
- }
- }
- }
- private void childNode(IntegrateChildNodeModel childNodeModel) throws WorkFlowException {
- Map<String, Object> data = childNodeModel.getData();
- List<Map<String, Object>> dataList = childNodeModel.getDataListAll();
- List<IntegrateNodeEntity> nodeList = childNodeModel.getNodeList();
- String node = childNodeModel.getNode();
- IntegrateEntity entity = childNodeModel.getEntity();
- String retryNodeCode = childNodeModel.getRetryNodeCode();
- UserInfo userInfo = childNodeModel.getUserInfo();
- IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
- if (nodeEntity != null) {
- String nodeType = nodeEntity.getNodeType();
- String nodeCode = nodeEntity.getNodeCode();
- String[] nextCodeAll = nodeEntity.getNodeNext().split(",");
- switch (nodeType) {
- case "addData":
- addData(new HashMap<>(data), nodeList, nodeCode, retryNodeCode);
- break;
- case "updateData":
- updateData(new HashMap<>(data), nodeList, nodeCode, retryNodeCode);
- break;
- case "deleteData":
- deleteData(new HashMap<>(data), new ArrayList<>(dataList), nodeList, nodeCode, retryNodeCode);
- break;
- case "message":
- message(new HashMap<>(data), nodeList, nodeCode, userInfo);
- break;
- case "dataInterface":
- dataInterface(new HashMap<>(data), nodeList, nodeCode, userInfo, retryNodeCode);
- break;
- case "getData":
- getData(entity, nodeList, nodeCode);
- break;
- case "launchFlow":
- launchFlow(new HashMap<>(data), nodeList, nodeCode, retryNodeCode);
- break;
- case "end":
- end(entity, new HashMap<>(data), nodeList, nodeCode, true, userInfo);
- break;
- case "start":
- start(entity, new HashMap<>(data), nodeList, nodeCode, true, userInfo, childNodeModel.getNum());
- break;
- default:
- break;
- }
- for (String nextCode : nextCodeAll) {
- childNodeModel.setNode(nextCode);
- childNode(childNodeModel);
- }
- }
- }
- //-----------------------------------事件-----------------------------------------------
- private void getData(IntegrateEntity entity, List<IntegrateNodeEntity> nodeList, String node) {
- IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
- if (nodeEntity != null) {
- nodeEntity.setResultType(1);
- List<IntegrateNodeEntity> list = nodeList(nodeEntity);
- if (list.size() == 0) {
- integrateNodeService.create(nodeEntity);
- }
- }
- }
- private void start(IntegrateEntity entity, Map<String, Object> data, List<IntegrateNodeEntity> nodeList, String node, boolean isAdd, UserInfo userInfo, int num) {
- IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
- if (nodeEntity != null) {
- List<IntegrateNodeEntity> list = nodeList(nodeEntity);
- String templeId = "PZXTJC002";
- if (list.size() == 0) {
- nodeEntity.setStartTime(nodeEntity.getStartTime());
- boolean failSum = num == 0;
- IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeEntity.getNodePropertyJson(), IntegrateChildNodeList.class);
- IntegrateProperties properties = childNodeList.getProperties();
- IntegrateMsgModel msgConfig = properties.getStartMsgConfig();
- Integer on = msgConfig.getOn();
- boolean acquiesce = on == 3;
- String msgId = on == 0 ? "" : acquiesce ? templeId : msgConfig.getMsgId();
- List<String> msgUserType = properties.getMsgUserType();
- List<String> msgUserIds = properties.getMsgUserIds();
- Set<String> userIdList = new HashSet<>();
- for (String type : msgUserType) {
- switch (type) {
- case "1":
- userIdList.add(entity.getCreatorUserId());
- break;
- case "2":
- List<String> adminList = userService.getAdminList().stream().map(UserEntity::getId).collect(Collectors.toList());
- userIdList.addAll(adminList);
- break;
- case "3":
- List<String> userList = userService.getUserIdList(msgUserIds);
- userIdList.addAll(userList);
- break;
- default:
- break;
- }
- }
- Map<String, Object> dataMap = new HashMap() {{
- put("@Title", entity.getFullName());
- put("@CreatorUserName", "");
- }};
- List<IntegrateTemplateModel> templateJson = msgConfig.getTemplateJson();
- try {
- if (StringUtil.isNotEmpty(msgId) && userIdList.size() > 0 && failSum) {
- Map<String, Object> parameterMap = acquiesce ? dataMap : templateJson(templateJson, data, userInfo);
- message(msgId, new ArrayList<>(userIdList), parameterMap, userInfo);
- }
- nodeEntity.setResultType(1);
- } catch (Exception e) {
- errMsg(nodeEntity, e);
- }
- nodeEntity.setEndTime(nodeEntity.getEndTime());
- if (isAdd) {
- integrateNodeService.create(nodeEntity);
- }
- }
- }
- }
- private void end(IntegrateEntity entity, Map<String, Object> data, List<IntegrateNodeEntity> nodeList, String node, boolean isAdd, UserInfo userInfo) {
- IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
- if (nodeEntity != null) {
- List<IntegrateNodeEntity> list = nodeList(nodeEntity);
- if (list.size() == 0) {
- String templeId = "PZXTJC001";
- nodeEntity.setStartTime(new Date());
- boolean failSum = !isAdd;
- IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeEntity.getNodePropertyJson(), IntegrateChildNodeList.class);
- IntegrateProperties properties = childNodeList.getProperties();
- IntegrateMsgModel msgConfig = properties.getFailMsgConfig();
- Integer on = msgConfig.getOn();
- boolean acquiesce = on == 3;
- String msgId = on == 0 ? "" : acquiesce ? templeId : msgConfig.getMsgId();
- List<String> msgUserType = properties.getMsgUserType();
- List<String> msgUserIds = properties.getMsgUserIds();
- Set<String> userIdList = new HashSet<>();
- for (String type : msgUserType) {
- switch (type) {
- case "1":
- userIdList.add(entity.getCreatorUserId());
- break;
- case "2":
- List<String> adminList = userService.getAdminList().stream().map(UserEntity::getId).collect(Collectors.toList());
- userIdList.addAll(adminList);
- break;
- case "3":
- List<String> userList = userService.getUserIdList(msgUserIds);
- userIdList.addAll(userList);
- break;
- default:
- break;
- }
- }
- Map<String, Object> dataMap = new HashMap() {{
- put("@Title", entity.getFullName());
- put("@CreatorUserName", "");
- }};
- List<IntegrateTemplateModel> templateJson = msgConfig.getTemplateJson();
- try {
- if (StringUtil.isNotEmpty(msgId) && userIdList.size() > 0 && failSum) {
- Map<String, Object> parameterMap = acquiesce ? dataMap : templateJson(templateJson, data, userInfo);
- message(msgId, new ArrayList<>(userIdList), parameterMap, userInfo);
- }
- nodeEntity.setResultType(1);
- } catch (Exception e) {
- errMsg(nodeEntity, e);
- }
- nodeEntity.setEndTime(new Date());
- if (isAdd) {
- integrateNodeService.create(nodeEntity);
- }
- }
- }
- }
- private void addData(Map<String, Object> data, List<IntegrateNodeEntity> nodeList, String node, String retryNodeCode) throws WorkFlowException {
- IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
- if (nodeEntity != null) {
- List<IntegrateNodeEntity> list = nodeList(nodeEntity);
- boolean isRetry = nodeEntity.getNodeCode().equals(retryNodeCode);
- if (list.size() == 0 || isRetry) {
- nodeEntity.setStartTime(new Date());
- IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeEntity.getNodePropertyJson(), IntegrateChildNodeList.class);
- IntegrateProperties properties = childNodeList.getProperties();
- boolean isAdd = Objects.equals(childNodeList.getIntegrateType(), 1);
- if (!isAdd) {
- List<Map<String, Object>> dataList = dataList(childNodeList, data, new ArrayList<>());
- Integer addRule = properties.getAddRule();
- isAdd = (dataList.size() > 0 && addRule == 1) || dataList.size() == 0;
- }
- String msg = "";
- try {
- if (isAdd) {
- String formId = properties.getFormId();
- String flowId = properties.getFlowId();
- if (ObjectUtil.isNotEmpty(flowId)) {
- TemplateEntity template = templateService.getInfo(flowId);
- flowId = template.getFlowId();
- }
- VisualdevEntity visualdevEntity = visualdevService.getReleaseInfo(formId);
- List<TransferModel> transferList = properties.getTransferList();
- Map<String, Object> saveData = formData(data, transferList);
- saveData.put(FlowFormConstant.FLOWID, flowId);
- visualdevModelDataService.visualCreate(VisualParamModel.builder().visualdevEntity(visualdevEntity).data(saveData).build());
- }
- nodeEntity.setResultType(1);
- } catch (Exception e) {
- errMsg(nodeEntity, e);
- msg = e.getMessage();
- }
- nodeEntity.setEndTime(new Date());
- if (isRetry) {
- integrateNodeService.update(nodeEntity.getTaskId(), nodeEntity.getNodeCode());
- }
- integrateNodeService.create(nodeEntity);
- if (StringUtil.isNotEmpty(msg)) {
- throw new WorkFlowException(msg);
- }
- }
- }
- }
- private void updateData(Map<String, Object> data, List<IntegrateNodeEntity> nodeList, String node, String retryNodeCode) throws WorkFlowException {
- IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
- if (nodeEntity != null) {
- List<IntegrateNodeEntity> list = nodeList(nodeEntity);
- boolean isRetry = nodeEntity.getNodeCode().equals(retryNodeCode);
- if (list.size() == 0 || isRetry) {
- nodeEntity.setStartTime(new Date());
- IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeEntity.getNodePropertyJson(), IntegrateChildNodeList.class);
- IntegrateProperties properties = childNodeList.getProperties();
- String formId = properties.getFormId();
- VisualdevEntity visualdevEntity = visualdevService.getReleaseInfo(formId);
- List<TransferModel> transferList = properties.getTransferList();
- List<Map<String, Object>> dataList = dataList(childNodeList, data, new ArrayList<>());
- Integer unFoundRule = properties.getUnFoundRule();
- String msg = "";
- boolean isAdd = dataList.size() == 0 && unFoundRule == 1;
- try {
- String flowId = properties.getFlowId();
- if (ObjectUtil.isNotEmpty(flowId)) {
- TemplateEntity template = templateService.getInfo(flowId);
- flowId = template.getFlowId();
- }
- if (isAdd) {
- Map<String, Object> saveData = formData(data, transferList);
- saveData.put(FlowFormConstant.FLOWID, flowId);
- dataList.add(saveData);
- }
- for (Map<String, Object> objectMap : dataList) {
- if (isAdd) {
- visualdevModelDataService.visualCreate(VisualParamModel.builder().visualdevEntity(visualdevEntity).data(objectMap).build());
- } else {
- String id = String.valueOf(objectMap.get(FlowFormConstant.ID));
- Map<String, Object> saveData = formData(data, objectMap, transferList);
- Map<String, Object> dataObject = new HashMap<>(saveData);
- visualdevModelDataService.visualUpdate(VisualParamModel.builder().visualdevEntity(visualdevEntity).data(dataObject).id(id).build());
- }
- }
- nodeEntity.setResultType(1);
- } catch (Exception e) {
- errMsg(nodeEntity, e);
- msg = e.getMessage();
- }
- nodeEntity.setEndTime(new Date());
- if (isRetry) {
- integrateNodeService.update(nodeEntity.getTaskId(), nodeEntity.getNodeCode());
- }
- integrateNodeService.create(nodeEntity);
- if (StringUtil.isNotEmpty(msg)) {
- throw new WorkFlowException(msg);
- }
- }
- }
- }
- private void deleteData(Map<String, Object> data, List<Map<String, Object>> dataListAll, List<IntegrateNodeEntity> nodeList, String node, String retryNodeCode) throws WorkFlowException {
- IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
- if (nodeEntity != null) {
- List<IntegrateNodeEntity> list = nodeList(nodeEntity);
- boolean isRetry = nodeEntity.getNodeCode().equals(retryNodeCode);
- if (list.size() == 0 || isRetry) {
- nodeEntity.setStartTime(new Date());
- String nodeJson = nodeEntity.getNodePropertyJson();
- IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeJson, IntegrateChildNodeList.class);
- IntegrateProperties properties = childNodeList.getProperties();
- String formId = properties.getFormId();
- String menuId = properties.getId();
- String flowId = properties.getFlowId();
- //条件的数据
- Integer deleteRule = Objects.equals(childNodeList.getIntegrateType(), 1) ? 1 : properties.getDeleteRule();
- IntegrateChildNodeList dataChildNode = new IntegrateChildNodeList();
- dataChildNode.setType(childNodeList.getType());
- IntegrateProperties dataChildProperties = dataChildNode.getProperties();
- dataChildProperties.setFormId(formId);
- dataChildProperties.setId(menuId);
- dataChildProperties.setFlowId(flowId);
- boolean delete = Objects.equals(deleteRule, 1);
- List<Map<String, Object>> dataList = dataList(delete ? childNodeList : dataChildNode, data, new ArrayList<>());
- List<String> idList = dataList.stream().filter(t -> ObjectUtil.isNotEmpty(t.get(FlowFormConstant.ID))).map(t -> String.valueOf(t.get(FlowFormConstant.ID))).collect(Collectors.toList());
- List<String> deleteList = new ArrayList<>();
- if (delete) {
- deleteList.addAll(idList);
- } else {
- List<String> addList = new ArrayList<>();
- for (Map<String, Object> objectMap : dataListAll) {
- List<String> idAll = dataList(JsonUtil.getJsonToBean(nodeJson, IntegrateChildNodeList.class), objectMap, new ArrayList<>()).stream().filter(t -> ObjectUtil.isNotEmpty(t.get(FlowFormConstant.ID))).map(t -> String.valueOf(t.get(FlowFormConstant.ID))).collect(Collectors.toList());
- addList.addAll(idAll);
- }
- idList.removeAll(addList);
- deleteList.addAll(idList);
- }
- String msg = "";
- try {
- if (deleteList.size() > 0) {
- List<Map<String, Object>> deleteDataList = dataList.stream().filter(t -> deleteList.contains(String.valueOf(t.get(FlowFormConstant.ID)))).collect(Collectors.toList());
- VisualdevEntity visualdevEntity = visualdevService.getReleaseInfo(formId);
- visualdevModelDataService.visualDelete(visualdevEntity, deleteDataList);
- }
- nodeEntity.setResultType(1);
- } catch (Exception e) {
- errMsg(nodeEntity, e);
- msg = e.getMessage();
- }
- nodeEntity.setEndTime(new Date());
- if (isRetry) {
- integrateNodeService.update(nodeEntity.getTaskId(), nodeEntity.getNodeCode());
- }
- integrateNodeService.create(nodeEntity);
- if (StringUtil.isNotEmpty(msg)) {
- throw new WorkFlowException(msg);
- }
- }
- }
- }
- private void message(Map<String, Object> data, List<IntegrateNodeEntity> nodeList, String node, UserInfo userInfo) throws WorkFlowException {
- IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
- if (nodeEntity != null) {
- String msg = "";
- List<IntegrateNodeEntity> list = nodeList(nodeEntity);
- if (list.size() == 0) {
- nodeEntity.setStartTime(new Date());
- IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeEntity.getNodePropertyJson(), IntegrateChildNodeList.class);
- IntegrateProperties properties = childNodeList.getProperties();
- List<String> userIdList = userService.getUserIdList(properties.getMsgUserIds());
- String msgId = properties.getMsgId();
- List<IntegrateTemplateModel> templateJson = properties.getTemplateJson();
- try {
- Map<String, Object> parameterMap = templateJson(templateJson, data, userInfo);
- if (userIdList.size() > 0) {
- message(msgId, userIdList, parameterMap, userInfo);
- }
- nodeEntity.setResultType(1);
- } catch (Exception e) {
- errMsg(nodeEntity, e);
- msg = e.getMessage();
- }
- nodeEntity.setEndTime(new Date());
- integrateNodeService.create(nodeEntity);
- if (StringUtil.isNotEmpty(msg)) {
- throw new WorkFlowException(msg);
- }
- }
- }
- }
- private void dataInterface(Map<String, Object> data, List<IntegrateNodeEntity> nodeList, String node, UserInfo userInfo, String retryNodeCode) throws WorkFlowException {
- IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
- if (nodeEntity != null) {
- String msg = "";
- List<IntegrateNodeEntity> list = nodeList(nodeEntity);
- boolean isRetry = nodeEntity.getNodeCode().equals(retryNodeCode);
- if (list.size() == 0 || isRetry) {
- nodeEntity.setStartTime(new Date());
- try {
- IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeEntity.getNodePropertyJson(), IntegrateChildNodeList.class);
- interfaceTemplateJson(childNodeList, data, userInfo);
- nodeEntity.setResultType(1);
- } catch (Exception e) {
- errMsg(nodeEntity, e);
- msg = e.getMessage();
- }
- nodeEntity.setEndTime(new Date());
- if (isRetry) {
- integrateNodeService.update(nodeEntity.getTaskId(), nodeEntity.getNodeCode());
- }
- integrateNodeService.create(nodeEntity);
- if (StringUtil.isNotEmpty(msg)) {
- throw new WorkFlowException(msg);
- }
- }
- }
- }
- private Map<String, Object> formData(Map<String, Object> formData, List<TransferModel> transferList) throws WorkFlowException {
- return formData(formData, new HashMap<>(), transferList);
- }
- private Map<String, Object> formData(Map<String, Object> formData, Map<String, Object> resultData, List<TransferModel> transferList) throws WorkFlowException {
- Map<String, Object> result = new HashMap<>(resultData);
- Map<String, Object> oldData = new HashMap<>(formData);
- Set<String> msg = new HashSet<>();
- for (TransferModel assignMode : transferList) {
- //子表处理规则
- Boolean required = assignMode.getRequired();
- String targetFieldLabel = assignMode.getTargetFieldLabel();
- Integer sourceType = assignMode.getSourceType();
- boolean isData = ObjectUtil.equals(sourceType, TemplateEnum.Custom.getCode());
- String parentField = assignMode.getSourceValue();
- String[] parentFieldList = isData ? new String[]{parentField} : parentField.split("-");
- String childField = assignMode.getTargetField();
- String[] childFieldList = childField.split("-");
- Object childData = isData ? parentField : DataInterfaceVarConst.FORM_ID.equals(parentField) ? formData.get(FlowFormConstant.ID) : formData.get(parentField);
- if (childFieldList.length > 1) {
- List<Map<String, Object>> childMapAll = new ArrayList<>();
- if (result.get(childFieldList[0]) instanceof List) {
- List<Map<String, Object>> childList = (List<Map<String, Object>>) result.get(childFieldList[0]);
- for (Map<String, Object> objectMap : childList) {
- Map<String, Object> childMap = new HashMap<>(objectMap);
- childMapAll.add(childMap);
- }
- }
- if (parentFieldList.length > 1) {
- if (oldData.get(parentFieldList[0]) instanceof List) {
- List<Map<String, Object>> parentList = (List<Map<String, Object>>) oldData.get(parentFieldList[0]);
- int num = parentList.size() - childMapAll.size();
- for (int i = 0; i < num; i++) {
- childMapAll.add(new HashMap<>());
- }
- for (int i = 0; i < parentList.size(); i++) {
- Map<String, Object> parentMap = parentList.get(i);
- Map<String, Object> childMap = childMapAll.get(i);
- if (required && ObjectUtil.isEmpty(parentMap.get(parentFieldList[1]))) {
- msg.add(targetFieldLabel);
- }
- childMap.put(childFieldList[1], parentMap.get(parentFieldList[1]));
- }
- }
- } else {
- if (1 > childMapAll.size()) {
- childMapAll.add(new HashMap<>());
- }
- Map<String, Object> childMap = childMapAll.get(0);
- if (required && ObjectUtil.isEmpty(childData)) {
- msg.add(targetFieldLabel);
- }
- childMap.put(childFieldList[1], childData);
- }
- result.put(childFieldList[0], childMapAll);
- } else {
- if (parentFieldList.length > 1) {
- if (oldData.get(parentFieldList[0]) instanceof List) {
- List<Map<String, Object>> parentList = (List<Map<String, Object>>) oldData.get(parentFieldList[0]);
- for (int i = 0; i < parentList.size(); i++) {
- Map<String, Object> parentMap = parentList.get(i);
- if (i == 0) {
- childData = parentMap.get(parentFieldList[1]);
- }
- }
- }
- }
- if (required && ObjectUtil.isEmpty(childData)) {
- msg.add(targetFieldLabel);
- }
- result.put(childField, childData);
- }
- }
- errRequiredMsg(msg);
- return result;
- }
- private List<Map<String, Object>> dataList(IntegrateChildNodeList childNodeList, Map<String, Object> data, List<String> dataId) {
- boolean idDelete = Objects.equals(childNodeList.getType(), "deleteData");
- IntegrateProperties properties = childNodeList.getProperties();
- String formId = properties.getFormId();
- List<SuperQueryJsonModel> ruleList = properties.getRuleList();
- String ruleMatchLogic = properties.getRuleMatchLogic();
- String menuId = properties.getId();
- String flowId = properties.getFlowId();
- boolean isFlow = StringUtil.isNotEmpty(flowId);
- for (SuperQueryJsonModel superQueryJsonModel : ruleList) {
- List<FieLdsModel> groups = superQueryJsonModel.getGroups();
- for (FieLdsModel fieLdsModel : groups) {
- boolean valueType = "1".equals(fieLdsModel.getFieldValueType());
- String fieldValue = data.get(fieLdsModel.getFieldValue()) != null ? String.valueOf(data.get(fieLdsModel.getFieldValue())) : null;
- if (DataInterfaceVarConst.FORM_ID.equals(fieLdsModel.getFieldValue())) {
- fieldValue = String.valueOf(data.get(FlowFormConstant.ID));
- }
- fieLdsModel.setFieldValue(valueType ? fieldValue : fieLdsModel.getFieldValue());
- }
- }
- SuperJsonModel superJsonModel = new SuperJsonModel();
- superJsonModel.setConditionList(ruleList);
- superJsonModel.setMatchLogic(StringUtil.isNotEmpty(ruleMatchLogic) ? ruleMatchLogic : superJsonModel.getMatchLogic());
- PaginationModel paginationModel = new PaginationModel();
- paginationModel.setPageSize(10000L);
- paginationModel.setMenuId(menuId);
- paginationModel.setSuperQueryJson(ruleList.size() > 0 ? JsonUtil.getObjectToString(superJsonModel) : "");
- VisualdevEntity visualdevEntity = visualdevService.getReleaseInfo(formId);
- VisualDevJsonModel visualJsonModel = OnlinePublicUtils.getVisualJsonModel(visualdevEntity);
- List<String> idAll = new ArrayList<>();
- List<String> idList = new ArrayList<>();
- try {
- if (ruleList.size() > 0) {
- visualJsonModel.setSuperQuery(superJsonModel);
- }
- if (isFlow) {
- List<String> flowVersionIds = templateJsonService.getListByTemplateIds(ImmutableList.of(flowId)).stream().map(TemplateJsonEntity::getId).collect(Collectors.toList());
- visualJsonModel.setFlowVersionIds(flowVersionIds);
- visualJsonModel.setEnableFlow(flowVersionIds.size() > 0);
- }
- List<Map<String, Object>> dataList = visualDevListService.getListWithTableList(visualJsonModel, paginationModel, UserProvider.getUser());
- idList.addAll(dataList.stream().map(t -> String.valueOf(t.get(FlowFormConstant.ID))).collect(Collectors.toList()));
- } catch (Exception e) {
- }
- List<String> intersection = idList.stream().filter(item -> dataId.contains(item)).collect(Collectors.toList());
- if (dataId.size() > 0) {
- idAll.addAll(intersection);
- } else {
- idAll.addAll(idList);
- }
- List<Map<String, Object>> dataList = new ArrayList<>();
- for (String id : idAll) {
- VisualdevModelDataInfoVO infoVO = visualDevInfoService.getEditDataInfo(id, visualdevEntity, OnlineInfoModel.builder().build());
- if (StringUtil.isNotEmpty(infoVO.getData())) {
- Map<String, Object> map = JsonUtil.stringToMap(infoVO.getData());
- map.put(FlowFormConstant.ID, infoVO.getId());
- boolean isAdd = true;
- if (isFlow && !idDelete) {
- TaskEntity infoSubmit = taskService.getInfoSubmit(String.valueOf(map.get(FlowFormConstant.FLOWTASKID)), TaskEntity::getEndTime);
- isAdd = infoSubmit != null && infoSubmit.getEndTime() != null;
- }
- if (isAdd) {
- dataList.add(map);
- }
- }
- }
- return dataList;
- }
- private void message(String msgId, List<String> userIdList, Map<String, Object> parameterMap, UserInfo userInfo) {
- SentMessageForm sentMessageForm = new SentMessageForm();
- sentMessageForm.setUserInfo(userInfo);
- sentMessageForm.setTemplateId(msgId);
- sentMessageForm.setToUserIds(userIdList);
- sentMessageForm.setParameterMap(parameterMap);
- sentMessageForm.setType(3);
- sentMessageForm.setContentMsg(new HashMap<>());
- sentMessageForm.setId(msgId);
- sentMessageUtil.sendDelegateMsg(sentMessageForm);
- }
- private List<IntegrateNodeEntity> nodeList(IntegrateNodeEntity nodeEntity) {
- List<IntegrateNodeEntity> list = integrateNodeService.getList(new ArrayList() {{
- add(nodeEntity.getTaskId());
- }}, nodeEntity.getNodeCode(), 1);
- IntegrateNodeEntity integrateNode = list.stream().filter(t -> t.getNodeCode().equals(nodeEntity.getNodeCode()) && t.getResultType() == 1).findFirst().orElse(null);
- nodeEntity.setResultType(integrateNode != null ? integrateNode.getResultType() : nodeEntity.getResultType());
- return list;
- }
- private Map<String, Object> templateJson(List<IntegrateTemplateModel> templateJson, Map<String, Object> data, UserInfo userInfo) throws WorkFlowException {
- Map<String, Object> parameterMap = new HashMap<>();
- Set<String> msg = new HashSet<>();
- for (IntegrateTemplateModel templateJsonModel : templateJson) {
- List<IntegrateParamModel> paramJson = templateJsonModel.getParamJson();
- for (IntegrateParamModel integrateParamModel : paramJson) {
- Boolean required = integrateParamModel.getRequired();
- String fieldId = integrateParamModel.getField();
- String relationField = integrateParamModel.getRelationField();
- String[] model = StringUtil.isNotEmpty(relationField) ? relationField.split("-") : new String[]{};
- String dataValue = data.get(relationField) != null ? String.valueOf(data.get(relationField)) : "";
- if (DataInterfaceVarConst.FORM_ID.equals(relationField)) {
- dataValue = data.get(FlowFormConstant.ID) != null ? String.valueOf(data.get(FlowFormConstant.ID)) : "";
- }
- if (model.length > 1) {
- Object dataList = data.get(model[0]);
- if (dataList instanceof List) {
- List<Map<String, Object>> listAll = (List<Map<String, Object>>) dataList;
- List<Object> dataListAll = new ArrayList<>();
- for (Map<String, Object> objectMap : listAll) {
- dataListAll.add(objectMap.get(model[1]));
- }
- if (required && ObjectUtil.isEmpty(dataListAll)) {
- msg.add(fieldId);
- }
- dataValue = String.valueOf(dataListAll);
- }
- }
- if (required && ObjectUtil.isEmpty(dataValue)) {
- msg.add(fieldId);
- }
- parameterMap.put(integrateParamModel.getMsgTemplateId() + fieldId, dataValue);
- }
- Map<String, String> paramMap = ImmutableMap.of("@CreatorUserName", userInfo.getUserName(), "@SendTime", DateUtil.getNow().substring(11));
- for (String key : paramMap.keySet()) {
- parameterMap.put(templateJsonModel.getId() + key, paramMap.get(key));
- }
- }
- errRequiredMsg(msg);
- return parameterMap;
- }
- private void errMsg(IntegrateNodeEntity nodeEntity, Exception e) {
- ActionResult result = new ActionResult();
- result.setCode(400);
- result.setMsg(e.getMessage());
- if (nodeEntity != null) {
- nodeEntity.setErrorMsg(JsonUtil.getObjectToString(result));
- }
- }
- private ActionResult interfaceTemplateJson(IntegrateChildNodeList childNodeList, Map<String, Object> data, UserInfo userInfo) throws WorkFlowException {
- IntegrateProperties properties = childNodeList.getProperties();
- String interId = properties.getFormId();
- Map<String, String> parameterMap = new HashMap<>();
- List<IntegrateTemplateModel> templateJson = properties.getTemplateJson();
- Set<String> msg = new HashSet<>();
- for (IntegrateTemplateModel templateJsonModel : templateJson) {
- String fieldId = templateJsonModel.getField();
- Boolean required = templateJsonModel.getRequired();
- String relationField = templateJsonModel.getRelationField();
- String dataValue = data.get(relationField) != null ? String.valueOf(data.get(relationField)) : null;
- if (AuthorizeConditionEnum.FORMID.getCondition().equals(relationField)) {
- dataValue = String.valueOf(data.get(FlowFormConstant.ID));
- } else if (AuthorizeConditionEnum.USER.getCondition().equals(relationField)) {
- dataValue = userInfo.getUserId();
- } else if (AuthorizeConditionEnum.USERANDUNDER.getCondition().equals(relationField)) {
- List<String> subOrganizeIds = new ArrayList<>();
- subOrganizeIds.addAll(userService.getListByManagerId(userInfo.getUserId(), null).stream().map(UserEntity::getId).collect(Collectors.toList()));
- subOrganizeIds.add(userInfo.getUserId());
- dataValue = subOrganizeIds.stream().collect(Collectors.joining(","));
- } else if (AuthorizeConditionEnum.ORGANIZE.getCondition().equals(relationField)) {
- String orgId = userInfo.getOrganizeId();
- if (StringUtil.isNotEmpty(userInfo.getDepartmentId())) {
- orgId = userInfo.getDepartmentId();
- }
- dataValue = orgId;
- } else if (AuthorizeConditionEnum.ORGANDSUB.getCondition().equals(relationField)) {
- String orgId = userInfo.getOrganizeId();
- if (StringUtil.isNotEmpty(userInfo.getDepartmentId())) {
- orgId = userInfo.getDepartmentId();
- }
- List<String> underOrganizations = organizeService.getUnderOrganizations(orgId, false);
- underOrganizations.add(orgId);
- dataValue = underOrganizations.stream().collect(Collectors.joining(","));
- }
- String dataFieldValue = relationField;
- String dataJson = !ObjectUtil.equals(templateJsonModel.getSourceType(), TemplateEnum.Custom.getCode()) ? dataValue : dataFieldValue;
- String[] model = StringUtil.isNotEmpty(relationField) ? relationField.split("-") : new String[]{};
- if (model.length > 1) {
- Object dataList = data.get(model[0]);
- if (dataList instanceof List) {
- List<Map<String, Object>> listAll = (List<Map<String, Object>>) dataList;
- List<Object> dataListAll = new ArrayList<>();
- for (Map<String, Object> objectMap : listAll) {
- dataListAll.add(objectMap.get(model[1]));
- }
- if (required && ObjectUtil.isEmpty(dataListAll)) {
- msg.add(fieldId);
- }
- dataJson = String.valueOf(dataListAll);
- }
- }
- if (required && ObjectUtil.isEmpty(dataJson)) {
- msg.add(fieldId);
- }
- parameterMap.put(fieldId, dataJson);
- }
- errRequiredMsg(msg);
- ActionResult dataInterfaceInfo = dataInterfaceService.infoToId(interId, userInfo.getTenantId(),
- parameterMap, userInfo.getToken(),
- null, null, null, null);
- if (dataInterfaceInfo.getCode() != 200) {
- throw new WorkFlowException(dataInterfaceInfo.getMsg());
- }
- return dataInterfaceInfo;
- }
- private void errRequiredMsg(Set<String> msg) throws WorkFlowException {
- if (msg.size() > 0) {
- throw new WorkFlowException(new ArrayList(msg).get(0) + MsgCode.VS015.get());
- }
- }
- /**
- * 发起审批
- *
- * @param data 数据
- * @param nodeList 节点数组
- * @param node 当前节点
- * @param retryNodeCode 日志失败重试
- * @throws WorkFlowException 异常
- */
- private void launchFlow(Map<String, Object> data, List<IntegrateNodeEntity> nodeList, String node, String retryNodeCode) throws WorkFlowException {
- IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
- if (nodeEntity != null) {
- List<IntegrateNodeEntity> list = nodeList(nodeEntity);
- boolean isRetry = nodeEntity.getNodeCode().equals(retryNodeCode);
- if (list.size() == 0 || isRetry) {
- nodeEntity.setStartTime(new Date());
- IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeEntity.getNodePropertyJson(), IntegrateChildNodeList.class);
- IntegrateProperties properties = childNodeList.getProperties();
- String msg = "";
- try {
- String flowId = properties.getFlowId();
- FlowFormModel formIdAndFlowId = templateService.getFormIdAndFlowId(properties.getInitiator(), flowId);
- List<String> userList = formIdAndFlowId.getUserId();
- List<UserEntity> userName = userService.getUserName(userList, true);
- if(userName.isEmpty()){
- throw new WorkFlowException(MsgCode.VS025.get());
- }
- for (UserEntity entity : userName) {
- UserInfo userInfo = new UserInfo();
- userInfo.setUserId(entity.getId());
- userInfo.setUserName(entity.getRealName());
- List<TransferModel> transferList = properties.getTransferList();
- Map<String, Object> saveData = formData(data, transferList);
- FlowModel flowModel = new FlowModel();
- flowModel.setUserInfo(userInfo);
- flowModel.setFlowId(flowId);
- flowModel.setStatus(TaskStatusEnum.RUNNING.getCode());
- flowModel.setFormData(saveData);
- taskService.saveOrSubmit(flowModel);
- }
- nodeEntity.setResultType(1);
- } catch (Exception e) {
- errMsg(nodeEntity, e);
- msg = e.getMessage();
- }
- nodeEntity.setEndTime(new Date());
- if (isRetry) {
- integrateNodeService.update(nodeEntity.getTaskId(), nodeEntity.getNodeCode());
- }
- integrateNodeService.create(nodeEntity);
- if (StringUtil.isNotEmpty(msg)) {
- throw new WorkFlowException(msg);
- }
- }
- }
- }
- //------------------------------------------webhook触发------------------------------------------------------
- public void integrate(String id, String tenantId, Map<String, Object> body) throws WorkFlowException {
- IntegrateEntity entity = integrateService.getInfo(id);
- if (entity == null) {
- throw new WorkFlowException(MsgCode.VS016.get());
- }
- if (Objects.equals(entity.getEnabledMark(), 0)) {
- throw new WorkFlowException(MsgCode.VS017.get());
- }
- IntegrateChildNode childNode = JsonUtil.getJsonToBean(entity.getTemplateJson(), IntegrateChildNode.class);
- IntegrateProperties properties = childNode.getProperties();
- List<FieLdsModel> formFieldList = properties.getFormFieldList();
- List<Map<String, Object>> dataList = new ArrayList<>();
- Map<String, Object> map = new HashMap<>();
- for (FieLdsModel fieLdsModel : formFieldList) {
- map.put(fieLdsModel.getId(), body.get(fieLdsModel.getId()));
- }
- dataList.add(map);
- //登录一个临时用户
- String token = AuthUtil.loginTempUser(entity.getCreatorUserId(), tenantId);
- UserInfo userInfo = UserProvider.getUser(token);
- UserProvider.setLocalLoginUser(userInfo);
- integrate(entity.getId(), dataList, userInfo);
- }
- }
|