IntegrateUtil.java 63 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198
  1. package jnpf.integrate.util;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import cn.hutool.http.HttpRequest;
  5. import cn.hutool.http.Method;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.google.common.collect.ImmutableList;
  8. import com.google.common.collect.ImmutableMap;
  9. import jnpf.base.ActionResult;
  10. import jnpf.base.UserInfo;
  11. import jnpf.base.entity.VisualdevEntity;
  12. import jnpf.base.model.VisualDevJsonModel;
  13. import jnpf.base.model.VisualLogModel;
  14. import jnpf.base.model.flow.DataModel;
  15. import jnpf.base.service.DataInterfaceService;
  16. import jnpf.base.service.VisualdevService;
  17. import jnpf.base.util.SentMessageUtil;
  18. import jnpf.config.ConfigValueUtil;
  19. import jnpf.constant.DataInterfaceVarConst;
  20. import jnpf.constant.JnpfConst;
  21. import jnpf.constant.MsgCode;
  22. import jnpf.database.model.superQuery.SuperJsonModel;
  23. import jnpf.database.model.superQuery.SuperQueryJsonModel;
  24. import jnpf.emnus.TemplateEnum;
  25. import jnpf.exception.WorkFlowException;
  26. import jnpf.flowable.entity.TaskEntity;
  27. import jnpf.flowable.entity.TemplateEntity;
  28. import jnpf.flowable.entity.TemplateJsonEntity;
  29. import jnpf.flowable.enums.TaskStatusEnum;
  30. import jnpf.flowable.model.task.FlowModel;
  31. import jnpf.flowable.model.templatejson.FlowFormModel;
  32. import jnpf.flowable.model.trigger.TriggerDataFo;
  33. import jnpf.flowable.model.trigger.TriggerDataModel;
  34. import jnpf.flowable.model.trigger.TriggerModel;
  35. import jnpf.flowable.service.TaskService;
  36. import jnpf.flowable.service.TemplateJsonService;
  37. import jnpf.flowable.service.TemplateService;
  38. import jnpf.integrate.entity.IntegrateEntity;
  39. import jnpf.integrate.entity.IntegrateNodeEntity;
  40. import jnpf.integrate.entity.IntegrateQueueEntity;
  41. import jnpf.integrate.entity.IntegrateTaskEntity;
  42. import jnpf.integrate.model.childnode.*;
  43. import jnpf.integrate.model.integrate.IntegratePagination;
  44. import jnpf.integrate.model.nodeJson.IntegrateChildNodeList;
  45. import jnpf.integrate.model.nodeJson.IntegrateChildNodeModel;
  46. import jnpf.integrate.service.IntegrateNodeService;
  47. import jnpf.integrate.service.IntegrateQueueService;
  48. import jnpf.integrate.service.IntegrateService;
  49. import jnpf.integrate.service.IntegrateTaskService;
  50. import jnpf.message.model.SentMessageForm;
  51. import jnpf.model.visualJson.FieLdsModel;
  52. import jnpf.onlinedev.model.AsyncExecuteModel;
  53. import jnpf.onlinedev.model.OnlineInfoModel;
  54. import jnpf.onlinedev.model.PaginationModel;
  55. import jnpf.base.model.OnlineImport.VisualdevModelDataInfoVO;
  56. import jnpf.onlinedev.model.VisualParamModel;
  57. import jnpf.onlinedev.service.VisualDevInfoService;
  58. import jnpf.onlinedev.service.VisualDevListService;
  59. import jnpf.onlinedev.service.VisualdevModelDataService;
  60. import jnpf.onlinedev.util.onlineDevUtil.OnlinePublicUtils;
  61. import jnpf.permission.entity.UserEntity;
  62. import jnpf.permission.model.authorize.AuthorizeConditionEnum;
  63. import jnpf.permission.service.OrganizeAdministratorService;
  64. import jnpf.permission.service.OrganizeService;
  65. import jnpf.permission.service.UserService;
  66. import jnpf.util.*;
  67. import jnpf.workflow.service.TriggerApi;
  68. import org.springframework.beans.factory.annotation.Autowired;
  69. import org.springframework.scheduling.annotation.Async;
  70. import org.springframework.stereotype.Component;
  71. import java.util.*;
  72. import java.util.stream.Collectors;
  73. @Component
  74. public class IntegrateUtil {
  75. @Autowired
  76. private UserService userService;
  77. @Autowired
  78. private SentMessageUtil sentMessageUtil;
  79. @Autowired
  80. private DataInterfaceService dataInterfaceService;
  81. @Autowired
  82. private VisualDevListService visualDevListService;
  83. @Autowired
  84. private IntegrateService integrateService;
  85. @Autowired
  86. private IntegrateQueueService integrateQueueService;
  87. @Autowired
  88. private VisualdevService visualdevService;
  89. @Autowired
  90. private VisualDevInfoService visualDevInfoService;
  91. @Autowired
  92. private IntegrateTaskService integrateTaskService;
  93. @Autowired
  94. private IntegrateNodeService integrateNodeService;
  95. @Autowired
  96. private VisualdevModelDataService visualdevModelDataService;
  97. @Autowired
  98. private TaskService taskService;
  99. @Autowired
  100. private TemplateService templateService;
  101. @Autowired
  102. private TemplateJsonService templateJsonService;
  103. @Autowired
  104. private OrganizeService organizeService;
  105. @Autowired
  106. private OrganizeAdministratorService organizeAdministratorService;
  107. @Autowired
  108. private ConfigValueUtil configValueUtil;
  109. @Autowired
  110. private TriggerApi triggerApi;
  111. //------------------------------------------事件------------------------------------------------------
  112. @Async
  113. public void asyncList(List<VisualdevModelDataInfoVO> resultData, UserInfo userInfo) {
  114. if (!resultData.isEmpty()) {
  115. String url = configValueUtil.getApiDomain() + "/api/visualdev/Integrate/execute";
  116. IntegrateHttpModel model = new IntegrateHttpModel();
  117. model.setUserInfo(userInfo);
  118. model.setDataInfoVOList(resultData);
  119. HttpRequest request = HttpRequest.of(url).method(Method.POST).body(JsonUtil.getObjectToString(model));
  120. request.header(Constants.AUTHORIZATION, userInfo.getToken());
  121. request.execute().body();
  122. }
  123. }
  124. public List<TriggerDataModel> asyncDelExecute(AsyncExecuteModel executeModel) {
  125. String modelId = executeModel.getModelId();
  126. Integer trigger = executeModel.getTrigger();
  127. List<String> dataId = executeModel.getDataId();
  128. DataModel dataModel = executeModel.getDataModel();
  129. List<Map<String, Object>> dataMap = executeModel.getDataMap();
  130. TriggerDataFo fo = new TriggerDataFo();
  131. fo.setModelId(modelId);
  132. fo.setTrigger(trigger);
  133. fo.setDataId(dataId);
  134. fo.setDataMap(dataMap);
  135. if (dataModel != null) {
  136. List<VisualLogModel> listLog = dataModel.getListLog();
  137. if (CollectionUtil.isNotEmpty(listLog)) {
  138. List<String> updateFields = this.getUpdateFields(listLog);
  139. fo.setUpdateFields(updateFields);
  140. }
  141. }
  142. List<TriggerDataModel> resultData = triggerApi.getTriggerDataModel(fo);
  143. return resultData;
  144. }
  145. @Async
  146. public void asyncExecute(AsyncExecuteModel executeModel) {
  147. String modelId = executeModel.getModelId();
  148. Integer trigger = executeModel.getTrigger();
  149. List<String> dataId = executeModel.getDataId();
  150. UserInfo userInfo = executeModel.getUserInfo();
  151. DataModel dataModel = executeModel.getDataModel();
  152. List<Map<String, Object>> dataMap = executeModel.getDataMap();
  153. TriggerDataFo fo = new TriggerDataFo();
  154. fo.setModelId(modelId);
  155. fo.setTrigger(trigger);
  156. fo.setDataId(dataId);
  157. fo.setDataMap(dataMap);
  158. if (dataModel != null) {
  159. List<VisualLogModel> listLog = dataModel.getListLog();
  160. if (CollectionUtil.isNotEmpty(listLog)) {
  161. List<String> updateFields = this.getUpdateFields(listLog);
  162. fo.setUpdateFields(updateFields);
  163. }
  164. }
  165. List<TriggerDataModel> resultData = triggerApi.getTriggerDataModel(fo);
  166. if (!resultData.isEmpty()) {
  167. String url = configValueUtil.getApiDomain() + "/api/workflow/trigger/Execute";
  168. TriggerModel model = new TriggerModel();
  169. model.setUserInfo(userInfo);
  170. model.setDataList(resultData);
  171. HttpRequest request = HttpRequest.of(url).method(Method.POST).body(JsonUtil.getObjectToString(model));
  172. request.header(Constants.AUTHORIZATION, userInfo.getToken());
  173. request.execute().body();
  174. }
  175. }
  176. private List<String> getUpdateFields(List<VisualLogModel> listLog) {
  177. List<String> updateFields = new ArrayList<>();
  178. if (CollectionUtil.isNotEmpty(listLog)) {
  179. for (VisualLogModel logModel : listLog) {
  180. String field = logModel.getField();
  181. List<Map<String, Object>> chidField = logModel.getChidField();
  182. List<Map<String, Object>> chidData = logModel.getChidData();
  183. if (CollectionUtil.isNotEmpty(chidField) && CollectionUtil.isNotEmpty(chidData)) {
  184. // 子表
  185. for (Map<String, Object> map : chidField) {
  186. String key = (String) map.get("prop");
  187. for (Map<String, Object> child : chidData) {
  188. if (!ObjectUtil.equals(child.get(key), child.get("jnpf_old_" + key))) {
  189. updateFields.add(field + "-" + key);
  190. break;
  191. }
  192. }
  193. }
  194. } else {
  195. updateFields.add(field);
  196. }
  197. }
  198. }
  199. return updateFields;
  200. }
  201. public void integrates(List<VisualdevModelDataInfoVO> dataInfoVOList, UserInfo userInfo) {
  202. for (VisualdevModelDataInfoVO infoVO : dataInfoVOList) {
  203. String integrateId = infoVO.getIntegrateId();
  204. List<Map<String, Object>> dataList = JsonUtil.getJsonToListMap(infoVO.getData());
  205. integrate(integrateId, dataList, userInfo);
  206. }
  207. }
  208. public List<VisualdevModelDataInfoVO> dataList(String modelId, Integer trigger, List<String> dataId) {
  209. List<VisualdevModelDataInfoVO> resultData = new ArrayList<>();
  210. List<IntegrateEntity> list = integrateList(modelId, trigger);
  211. for (IntegrateEntity entity : list) {
  212. //数据
  213. IntegrateChildNodeList childNodeModel = JsonUtil.getJsonToBean(entity.getTemplateJson(), IntegrateChildNodeList.class);
  214. List<Map<String, Object>> dataList = dataList(childNodeModel, new HashMap<>(16), dataId);
  215. if (dataList.size() > 0) {
  216. VisualdevModelDataInfoVO vo = new VisualdevModelDataInfoVO();
  217. vo.setData(JsonUtil.getObjectToString(dataList));
  218. vo.setIntegrateId(entity.getId());
  219. resultData.add(vo);
  220. }
  221. }
  222. return resultData;
  223. }
  224. private List<IntegrateEntity> integrateList(String modelId, Integer trigger) {
  225. IntegratePagination pagination = new IntegratePagination();
  226. pagination.setFormId(modelId);
  227. pagination.setType(1);
  228. pagination.setTrigger(trigger);
  229. pagination.setEnabledMark(1);
  230. List<IntegrateEntity> list = integrateService.getList(pagination, false);
  231. return list;
  232. }
  233. //------------------------------------------定时------------------------------------------------------
  234. //重试
  235. public void integrate(String taskId, String parentId, String taskNodeId) {
  236. IntegrateTaskEntity taskEntity = integrateTaskService.getInfo(taskId);
  237. if (taskEntity != null) {
  238. List<Map<String, Object>> dataList = new ArrayList<>();
  239. try {
  240. dataList.addAll(JsonUtil.getJsonToListMap(taskEntity.getData()));
  241. } catch (Exception e) {
  242. dataList.add(JsonUtil.stringToMap(taskEntity.getData()));
  243. }
  244. integrate(taskEntity.getIntegrateId(), dataList, UserProvider.getUser(), parentId, taskNodeId);
  245. }
  246. }
  247. //定时执行
  248. public void integrate(IntegrateQueueEntity queueEntity, UserInfo userInfo) {
  249. queueEntity.setState(1);
  250. integrateQueueService.update(queueEntity.getId(), queueEntity);
  251. String integrateId = queueEntity.getIntegrateId();
  252. List<Map<String, Object>> dataList = new ArrayList<>();
  253. IntegrateEntity entity = integrateService.getInfo(integrateId);
  254. if (entity != null) {
  255. IntegrateChildNode childNode = JsonUtil.getJsonToBean(entity.getTemplateJson(), IntegrateChildNode.class);
  256. IntegrateChildNode getDataChildNode = childNode.getChildNode();
  257. IntegrateChildNodeList dataListNodeMode = JsonUtil.getJsonToBean(getDataChildNode, IntegrateChildNodeList.class);
  258. IntegrateProperties properties = dataListNodeMode.getProperties();
  259. Integer formType = properties.getFormType();
  260. //远端节点
  261. if (Objects.equals(formType, 3)) {
  262. dataListNodeMode.getProperties().setTemplateJson(dataListNodeMode.getProperties().getInterfaceTemplateJson());
  263. try {
  264. ActionResult result = interfaceTemplateJson(dataListNodeMode, new HashMap<>(), userInfo);
  265. if (result.getData() instanceof List) {
  266. dataList.addAll((List) result.getData());
  267. }
  268. } catch (Exception e) {
  269. }
  270. } else {
  271. dataList.addAll(dataList(dataListNodeMode, new HashMap<>(16), new ArrayList<>()));
  272. }
  273. integrate(integrateId, dataList, userInfo);
  274. integrateQueueService.delete(queueEntity);
  275. }
  276. }
  277. //集成执行逻辑
  278. private void integrate(String integrateId, List<Map<String, Object>> dataList, UserInfo userInfo) {
  279. integrate(integrateId, dataList, userInfo, "0", "0");
  280. }
  281. //集成执行逻辑
  282. private void integrate(String integrateId, List<Map<String, Object>> dataList, UserInfo userInfo, String parentId, String taskNodeId) {
  283. if (dataList.isEmpty()) {
  284. return;
  285. }
  286. IntegrateEntity entity = integrateService.getInfo(integrateId);
  287. if (entity != null) {
  288. //获取实例重试数据
  289. IntegrateTaskEntity parentTask = integrateTaskService.getInfo(parentId);
  290. boolean isParentId = parentTask != null;
  291. //获取节点重试数据
  292. IntegrateNodeEntity info = integrateNodeService.getInfo(taskNodeId);
  293. boolean isTaskNodeId = info != null;
  294. String retryNodeCode = isTaskNodeId ? info.getNodeCode() : "";
  295. Date time = new Date();
  296. //判断是节点重试还是实例重试
  297. String json = isParentId ? entity.getTemplateJson() : entity.getTemplateJson();
  298. IntegrateChildNode childNode = JsonUtil.getJsonToBean(json, IntegrateChildNode.class);
  299. IntegrateChildNode getDataChildNode = childNode.getChildNode();
  300. IntegrateChildNodeList dataListNodeMode = JsonUtil.getJsonToBean(getDataChildNode, IntegrateChildNodeList.class);
  301. dataListNodeMode.setStartTime(time);
  302. List<IntegrateChildNodeList> childNodeListAll = new ArrayList<>();
  303. childList(childNode, childNodeListAll);
  304. IntegrateChildNodeList startNode = childNodeListAll.stream().filter(t -> "start".equals(t.getType())).findFirst().orElse(null);
  305. if (startNode != null) {
  306. List<String> idAll = new ArrayList<>();
  307. IntegrateTaskEntity taskEntity = new IntegrateTaskEntity();
  308. List<IntegrateNodeEntity> errNodeList = new ArrayList<>();
  309. String msg = "";
  310. Map<String, Object> errMsg = new HashMap<>();
  311. try {
  312. for (int i = 0; i < dataList.size(); i++) {
  313. Map<String, Object> objectMap = dataList.get(i);
  314. errMsg.putAll(objectMap);
  315. String id = String.valueOf(objectMap.get(FlowFormConstant.ID));
  316. List<IntegrateNodeEntity> nodeList = new ArrayList<>();
  317. taskEntity.setIntegrateId(entity.getId());
  318. taskEntity.setType(entity.getType());
  319. taskEntity.setTemplateJson(entity.getTemplateJson());
  320. taskEntity.setDataId(id);
  321. taskEntity.setParentId(isParentId ? parentTask.getId() : parentId);
  322. taskEntity.setParentTime(isParentId ? parentTask.getExecutionTime() : null);
  323. taskEntity.setResultType(isParentId ? parentTask.getResultType() : 1);
  324. taskEntity.setExecutionTime(new Date());
  325. taskEntity.setId(isTaskNodeId ? info.getTaskId() : RandomUtil.uuId());
  326. taskEntity.setData(dataList.size() > 0 ? JsonUtil.getObjectToString(dataList) : JsonUtil.getObjectToString(objectMap));
  327. taskEntity.setProcessId(taskEntity.getId());
  328. idAll.add(taskEntity.getId());
  329. if (i == 0 && !isParentId) {
  330. IntegrateTaskEntity taskEntitys = JsonUtil.getJsonToBean(taskEntity, IntegrateTaskEntity.class);
  331. integrateTaskService.saveOrUpdate(taskEntitys);
  332. }
  333. //节点
  334. List<IntegrateChildNodeList> nodeListAll = new ArrayList<>(childNodeListAll);
  335. for (int k = 0; k < nodeListAll.size(); k++) {
  336. IntegrateChildNodeList childNodeList = nodeListAll.get(k);
  337. childNodeList.setIntegrateType(taskEntity.getType());
  338. IntegrateProperties childProperties = childNodeList.getProperties();
  339. IntegrateNodeEntity nodeEntity = new IntegrateNodeEntity();
  340. nodeEntity.setResultType(0);
  341. nodeEntity.setParentId(taskNodeId);
  342. nodeEntity.setNodeType(childNodeList.getType());
  343. nodeEntity.setNodeNext(childNodeList.getNextId());
  344. nodeEntity.setStartTime(time);
  345. nodeEntity.setEndTime(time);
  346. nodeEntity.setTaskId(taskEntity.getId());
  347. nodeEntity.setNodeCode(childNodeList.getNodeId());
  348. nodeEntity.setFormId(childProperties.getFormId());
  349. nodeEntity.setNodeName(childProperties.getTitle());
  350. nodeEntity.setNodePropertyJson(JsonUtil.getObjectToString(childNodeList));
  351. nodeEntity.setSortCode(Long.parseLong(k + ""));
  352. nodeList.add(nodeEntity);
  353. }
  354. errNodeList = nodeList;
  355. IntegrateChildNodeModel childNodeModel = IntegrateChildNodeModel.builder().dataListAll(dataList).data(objectMap)
  356. .nodeList(nodeList).node(startNode.getNodeId()).entity(entity).retryNodeCode(retryNodeCode).userInfo(userInfo).num(0).build();
  357. childNode(childNodeModel);
  358. boolean failSum = nodeList.stream().filter(t -> t.getResultType() == 0).count() > 0;
  359. taskEntity.setResultType(failSum ? 0 : 1);
  360. integrateTaskService.update(taskEntity.getId(), taskEntity);
  361. }
  362. } catch (Exception e) {
  363. msg = e.getMessage();
  364. taskEntity.setResultType(0);
  365. }
  366. integrateTaskService.saveOrUpdate(taskEntity);
  367. idAll.remove(taskEntity.getId());
  368. if (!idAll.isEmpty()) {
  369. QueryWrapper<IntegrateTaskEntity> wrapper = new QueryWrapper();
  370. wrapper.lambda().in(IntegrateTaskEntity::getId, idAll);
  371. integrateTaskService.remove(wrapper);
  372. QueryWrapper<IntegrateNodeEntity> nodeWrapper = new QueryWrapper();
  373. nodeWrapper.lambda().in(IntegrateNodeEntity::getTaskId, idAll);
  374. integrateNodeService.remove(nodeWrapper);
  375. }
  376. if (StringUtil.isNotEmpty(msg)) {
  377. end(entity, new HashMap<>(errMsg), errNodeList, "end", false, userInfo);
  378. }
  379. }
  380. }
  381. }
  382. private void childList(IntegrateChildNode childNodeAll, List<IntegrateChildNodeList> listAll) {
  383. if (childNodeAll != null) {
  384. IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(childNodeAll, IntegrateChildNodeList.class);
  385. boolean isNext = childNodeAll.getChildNode() != null;
  386. String nextId = isNext ? childNodeAll.getChildNode().getNodeId() : "end";
  387. childNodeList.setNextId(nextId);
  388. listAll.add(childNodeList);
  389. if (isNext) {
  390. childList(childNodeAll.getChildNode(), listAll);
  391. }
  392. if ("end".equals(nextId)) {
  393. IntegrateChildNodeList endChildNodeList = listAll.stream().filter(t -> "start".equals(t.getType())).findFirst().orElse(null);
  394. IntegrateChildNodeList endNode = JsonUtil.getJsonToBean(endChildNodeList, IntegrateChildNodeList.class);
  395. endNode.setNodeId(nextId);
  396. endNode.setType(nextId);
  397. endNode.setNextId("");
  398. endNode.getProperties().setTitle("结束");
  399. listAll.add(endNode);
  400. }
  401. }
  402. }
  403. private void childNode(IntegrateChildNodeModel childNodeModel) throws WorkFlowException {
  404. Map<String, Object> data = childNodeModel.getData();
  405. List<Map<String, Object>> dataList = childNodeModel.getDataListAll();
  406. List<IntegrateNodeEntity> nodeList = childNodeModel.getNodeList();
  407. String node = childNodeModel.getNode();
  408. IntegrateEntity entity = childNodeModel.getEntity();
  409. String retryNodeCode = childNodeModel.getRetryNodeCode();
  410. UserInfo userInfo = childNodeModel.getUserInfo();
  411. IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
  412. if (nodeEntity != null) {
  413. String nodeType = nodeEntity.getNodeType();
  414. String nodeCode = nodeEntity.getNodeCode();
  415. String[] nextCodeAll = nodeEntity.getNodeNext().split(",");
  416. switch (nodeType) {
  417. case "addData":
  418. addData(new HashMap<>(data), nodeList, nodeCode, retryNodeCode);
  419. break;
  420. case "updateData":
  421. updateData(new HashMap<>(data), nodeList, nodeCode, retryNodeCode);
  422. break;
  423. case "deleteData":
  424. deleteData(new HashMap<>(data), new ArrayList<>(dataList), nodeList, nodeCode, retryNodeCode);
  425. break;
  426. case "message":
  427. message(new HashMap<>(data), nodeList, nodeCode, userInfo);
  428. break;
  429. case "dataInterface":
  430. dataInterface(new HashMap<>(data), nodeList, nodeCode, userInfo, retryNodeCode);
  431. break;
  432. case "getData":
  433. getData(entity, nodeList, nodeCode);
  434. break;
  435. case "launchFlow":
  436. launchFlow(new HashMap<>(data), nodeList, nodeCode, retryNodeCode);
  437. break;
  438. case "end":
  439. end(entity, new HashMap<>(data), nodeList, nodeCode, true, userInfo);
  440. break;
  441. case "start":
  442. start(entity, new HashMap<>(data), nodeList, nodeCode, true, userInfo, childNodeModel.getNum());
  443. break;
  444. default:
  445. break;
  446. }
  447. for (String nextCode : nextCodeAll) {
  448. childNodeModel.setNode(nextCode);
  449. childNode(childNodeModel);
  450. }
  451. }
  452. }
  453. //-----------------------------------事件-----------------------------------------------
  454. private void getData(IntegrateEntity entity, List<IntegrateNodeEntity> nodeList, String node) {
  455. IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
  456. if (nodeEntity != null) {
  457. nodeEntity.setResultType(1);
  458. List<IntegrateNodeEntity> list = nodeList(nodeEntity);
  459. if (list.size() == 0) {
  460. integrateNodeService.create(nodeEntity);
  461. }
  462. }
  463. }
  464. private void start(IntegrateEntity entity, Map<String, Object> data, List<IntegrateNodeEntity> nodeList, String node, boolean isAdd, UserInfo userInfo, int num) {
  465. IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
  466. if (nodeEntity != null) {
  467. List<IntegrateNodeEntity> list = nodeList(nodeEntity);
  468. String templeId = "PZXTJC002";
  469. if (list.size() == 0) {
  470. nodeEntity.setStartTime(nodeEntity.getStartTime());
  471. boolean failSum = num == 0;
  472. IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeEntity.getNodePropertyJson(), IntegrateChildNodeList.class);
  473. IntegrateProperties properties = childNodeList.getProperties();
  474. IntegrateMsgModel msgConfig = properties.getStartMsgConfig();
  475. Integer on = msgConfig.getOn();
  476. boolean acquiesce = on == 3;
  477. String msgId = on == 0 ? "" : acquiesce ? templeId : msgConfig.getMsgId();
  478. List<String> msgUserType = properties.getMsgUserType();
  479. List<String> msgUserIds = properties.getMsgUserIds();
  480. Set<String> userIdList = new HashSet<>();
  481. for (String type : msgUserType) {
  482. switch (type) {
  483. case "1":
  484. userIdList.add(entity.getCreatorUserId());
  485. break;
  486. case "2":
  487. List<String> adminList = userService.getAdminList().stream().map(UserEntity::getId).collect(Collectors.toList());
  488. userIdList.addAll(adminList);
  489. break;
  490. case "3":
  491. List<String> userList = userService.getUserIdList(msgUserIds);
  492. userIdList.addAll(userList);
  493. break;
  494. default:
  495. break;
  496. }
  497. }
  498. Map<String, Object> dataMap = new HashMap() {{
  499. put("@Title", entity.getFullName());
  500. put("@CreatorUserName", "");
  501. }};
  502. List<IntegrateTemplateModel> templateJson = msgConfig.getTemplateJson();
  503. try {
  504. if (StringUtil.isNotEmpty(msgId) && userIdList.size() > 0 && failSum) {
  505. Map<String, Object> parameterMap = acquiesce ? dataMap : templateJson(templateJson, data, userInfo);
  506. message(msgId, new ArrayList<>(userIdList), parameterMap, userInfo);
  507. }
  508. nodeEntity.setResultType(1);
  509. } catch (Exception e) {
  510. errMsg(nodeEntity, e);
  511. }
  512. nodeEntity.setEndTime(nodeEntity.getEndTime());
  513. if (isAdd) {
  514. integrateNodeService.create(nodeEntity);
  515. }
  516. }
  517. }
  518. }
  519. private void end(IntegrateEntity entity, Map<String, Object> data, List<IntegrateNodeEntity> nodeList, String node, boolean isAdd, UserInfo userInfo) {
  520. IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
  521. if (nodeEntity != null) {
  522. List<IntegrateNodeEntity> list = nodeList(nodeEntity);
  523. if (list.size() == 0) {
  524. String templeId = "PZXTJC001";
  525. nodeEntity.setStartTime(new Date());
  526. boolean failSum = !isAdd;
  527. IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeEntity.getNodePropertyJson(), IntegrateChildNodeList.class);
  528. IntegrateProperties properties = childNodeList.getProperties();
  529. IntegrateMsgModel msgConfig = properties.getFailMsgConfig();
  530. Integer on = msgConfig.getOn();
  531. boolean acquiesce = on == 3;
  532. String msgId = on == 0 ? "" : acquiesce ? templeId : msgConfig.getMsgId();
  533. List<String> msgUserType = properties.getMsgUserType();
  534. List<String> msgUserIds = properties.getMsgUserIds();
  535. Set<String> userIdList = new HashSet<>();
  536. for (String type : msgUserType) {
  537. switch (type) {
  538. case "1":
  539. userIdList.add(entity.getCreatorUserId());
  540. break;
  541. case "2":
  542. List<String> adminList = userService.getAdminList().stream().map(UserEntity::getId).collect(Collectors.toList());
  543. userIdList.addAll(adminList);
  544. break;
  545. case "3":
  546. List<String> userList = userService.getUserIdList(msgUserIds);
  547. userIdList.addAll(userList);
  548. break;
  549. default:
  550. break;
  551. }
  552. }
  553. Map<String, Object> dataMap = new HashMap() {{
  554. put("@Title", entity.getFullName());
  555. put("@CreatorUserName", "");
  556. }};
  557. List<IntegrateTemplateModel> templateJson = msgConfig.getTemplateJson();
  558. try {
  559. if (StringUtil.isNotEmpty(msgId) && userIdList.size() > 0 && failSum) {
  560. Map<String, Object> parameterMap = acquiesce ? dataMap : templateJson(templateJson, data, userInfo);
  561. message(msgId, new ArrayList<>(userIdList), parameterMap, userInfo);
  562. }
  563. nodeEntity.setResultType(1);
  564. } catch (Exception e) {
  565. errMsg(nodeEntity, e);
  566. }
  567. nodeEntity.setEndTime(new Date());
  568. if (isAdd) {
  569. integrateNodeService.create(nodeEntity);
  570. }
  571. }
  572. }
  573. }
  574. private void addData(Map<String, Object> data, List<IntegrateNodeEntity> nodeList, String node, String retryNodeCode) throws WorkFlowException {
  575. IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
  576. if (nodeEntity != null) {
  577. List<IntegrateNodeEntity> list = nodeList(nodeEntity);
  578. boolean isRetry = nodeEntity.getNodeCode().equals(retryNodeCode);
  579. if (list.size() == 0 || isRetry) {
  580. nodeEntity.setStartTime(new Date());
  581. IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeEntity.getNodePropertyJson(), IntegrateChildNodeList.class);
  582. IntegrateProperties properties = childNodeList.getProperties();
  583. boolean isAdd = Objects.equals(childNodeList.getIntegrateType(), 1);
  584. if (!isAdd) {
  585. List<Map<String, Object>> dataList = dataList(childNodeList, data, new ArrayList<>());
  586. Integer addRule = properties.getAddRule();
  587. isAdd = (dataList.size() > 0 && addRule == 1) || dataList.size() == 0;
  588. }
  589. String msg = "";
  590. try {
  591. if (isAdd) {
  592. String formId = properties.getFormId();
  593. String flowId = properties.getFlowId();
  594. if (ObjectUtil.isNotEmpty(flowId)) {
  595. TemplateEntity template = templateService.getInfo(flowId);
  596. flowId = template.getFlowId();
  597. }
  598. VisualdevEntity visualdevEntity = visualdevService.getReleaseInfo(formId);
  599. List<TransferModel> transferList = properties.getTransferList();
  600. Map<String, Object> saveData = formData(data, transferList);
  601. saveData.put(FlowFormConstant.FLOWID, flowId);
  602. visualdevModelDataService.visualCreate(VisualParamModel.builder().visualdevEntity(visualdevEntity).data(saveData).build());
  603. }
  604. nodeEntity.setResultType(1);
  605. } catch (Exception e) {
  606. errMsg(nodeEntity, e);
  607. msg = e.getMessage();
  608. }
  609. nodeEntity.setEndTime(new Date());
  610. if (isRetry) {
  611. integrateNodeService.update(nodeEntity.getTaskId(), nodeEntity.getNodeCode());
  612. }
  613. integrateNodeService.create(nodeEntity);
  614. if (StringUtil.isNotEmpty(msg)) {
  615. throw new WorkFlowException(msg);
  616. }
  617. }
  618. }
  619. }
  620. private void updateData(Map<String, Object> data, List<IntegrateNodeEntity> nodeList, String node, String retryNodeCode) throws WorkFlowException {
  621. IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
  622. if (nodeEntity != null) {
  623. List<IntegrateNodeEntity> list = nodeList(nodeEntity);
  624. boolean isRetry = nodeEntity.getNodeCode().equals(retryNodeCode);
  625. if (list.size() == 0 || isRetry) {
  626. nodeEntity.setStartTime(new Date());
  627. IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeEntity.getNodePropertyJson(), IntegrateChildNodeList.class);
  628. IntegrateProperties properties = childNodeList.getProperties();
  629. String formId = properties.getFormId();
  630. VisualdevEntity visualdevEntity = visualdevService.getReleaseInfo(formId);
  631. List<TransferModel> transferList = properties.getTransferList();
  632. List<Map<String, Object>> dataList = dataList(childNodeList, data, new ArrayList<>());
  633. Integer unFoundRule = properties.getUnFoundRule();
  634. String msg = "";
  635. boolean isAdd = dataList.size() == 0 && unFoundRule == 1;
  636. try {
  637. String flowId = properties.getFlowId();
  638. if (ObjectUtil.isNotEmpty(flowId)) {
  639. TemplateEntity template = templateService.getInfo(flowId);
  640. flowId = template.getFlowId();
  641. }
  642. if (isAdd) {
  643. Map<String, Object> saveData = formData(data, transferList);
  644. saveData.put(FlowFormConstant.FLOWID, flowId);
  645. dataList.add(saveData);
  646. }
  647. for (Map<String, Object> objectMap : dataList) {
  648. if (isAdd) {
  649. visualdevModelDataService.visualCreate(VisualParamModel.builder().visualdevEntity(visualdevEntity).data(objectMap).build());
  650. } else {
  651. String id = String.valueOf(objectMap.get(FlowFormConstant.ID));
  652. Map<String, Object> saveData = formData(data, objectMap, transferList);
  653. Map<String, Object> dataObject = new HashMap<>(saveData);
  654. visualdevModelDataService.visualUpdate(VisualParamModel.builder().visualdevEntity(visualdevEntity).data(dataObject).id(id).build());
  655. }
  656. }
  657. nodeEntity.setResultType(1);
  658. } catch (Exception e) {
  659. errMsg(nodeEntity, e);
  660. msg = e.getMessage();
  661. }
  662. nodeEntity.setEndTime(new Date());
  663. if (isRetry) {
  664. integrateNodeService.update(nodeEntity.getTaskId(), nodeEntity.getNodeCode());
  665. }
  666. integrateNodeService.create(nodeEntity);
  667. if (StringUtil.isNotEmpty(msg)) {
  668. throw new WorkFlowException(msg);
  669. }
  670. }
  671. }
  672. }
  673. private void deleteData(Map<String, Object> data, List<Map<String, Object>> dataListAll, List<IntegrateNodeEntity> nodeList, String node, String retryNodeCode) throws WorkFlowException {
  674. IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
  675. if (nodeEntity != null) {
  676. List<IntegrateNodeEntity> list = nodeList(nodeEntity);
  677. boolean isRetry = nodeEntity.getNodeCode().equals(retryNodeCode);
  678. if (list.size() == 0 || isRetry) {
  679. nodeEntity.setStartTime(new Date());
  680. String nodeJson = nodeEntity.getNodePropertyJson();
  681. IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeJson, IntegrateChildNodeList.class);
  682. IntegrateProperties properties = childNodeList.getProperties();
  683. String formId = properties.getFormId();
  684. String menuId = properties.getId();
  685. String flowId = properties.getFlowId();
  686. //条件的数据
  687. Integer deleteRule = Objects.equals(childNodeList.getIntegrateType(), 1) ? 1 : properties.getDeleteRule();
  688. IntegrateChildNodeList dataChildNode = new IntegrateChildNodeList();
  689. dataChildNode.setType(childNodeList.getType());
  690. IntegrateProperties dataChildProperties = dataChildNode.getProperties();
  691. dataChildProperties.setFormId(formId);
  692. dataChildProperties.setId(menuId);
  693. dataChildProperties.setFlowId(flowId);
  694. boolean delete = Objects.equals(deleteRule, 1);
  695. List<Map<String, Object>> dataList = dataList(delete ? childNodeList : dataChildNode, data, new ArrayList<>());
  696. List<String> idList = dataList.stream().filter(t -> ObjectUtil.isNotEmpty(t.get(FlowFormConstant.ID))).map(t -> String.valueOf(t.get(FlowFormConstant.ID))).collect(Collectors.toList());
  697. List<String> deleteList = new ArrayList<>();
  698. if (delete) {
  699. deleteList.addAll(idList);
  700. } else {
  701. List<String> addList = new ArrayList<>();
  702. for (Map<String, Object> objectMap : dataListAll) {
  703. 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());
  704. addList.addAll(idAll);
  705. }
  706. idList.removeAll(addList);
  707. deleteList.addAll(idList);
  708. }
  709. String msg = "";
  710. try {
  711. if (deleteList.size() > 0) {
  712. List<Map<String, Object>> deleteDataList = dataList.stream().filter(t -> deleteList.contains(String.valueOf(t.get(FlowFormConstant.ID)))).collect(Collectors.toList());
  713. VisualdevEntity visualdevEntity = visualdevService.getReleaseInfo(formId);
  714. visualdevModelDataService.visualDelete(visualdevEntity, deleteDataList);
  715. }
  716. nodeEntity.setResultType(1);
  717. } catch (Exception e) {
  718. errMsg(nodeEntity, e);
  719. msg = e.getMessage();
  720. }
  721. nodeEntity.setEndTime(new Date());
  722. if (isRetry) {
  723. integrateNodeService.update(nodeEntity.getTaskId(), nodeEntity.getNodeCode());
  724. }
  725. integrateNodeService.create(nodeEntity);
  726. if (StringUtil.isNotEmpty(msg)) {
  727. throw new WorkFlowException(msg);
  728. }
  729. }
  730. }
  731. }
  732. private void message(Map<String, Object> data, List<IntegrateNodeEntity> nodeList, String node, UserInfo userInfo) throws WorkFlowException {
  733. IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
  734. if (nodeEntity != null) {
  735. String msg = "";
  736. List<IntegrateNodeEntity> list = nodeList(nodeEntity);
  737. if (list.size() == 0) {
  738. nodeEntity.setStartTime(new Date());
  739. IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeEntity.getNodePropertyJson(), IntegrateChildNodeList.class);
  740. IntegrateProperties properties = childNodeList.getProperties();
  741. List<String> userIdList = userService.getUserIdList(properties.getMsgUserIds());
  742. String msgId = properties.getMsgId();
  743. List<IntegrateTemplateModel> templateJson = properties.getTemplateJson();
  744. try {
  745. Map<String, Object> parameterMap = templateJson(templateJson, data, userInfo);
  746. if (userIdList.size() > 0) {
  747. message(msgId, userIdList, parameterMap, userInfo);
  748. }
  749. nodeEntity.setResultType(1);
  750. } catch (Exception e) {
  751. errMsg(nodeEntity, e);
  752. msg = e.getMessage();
  753. }
  754. nodeEntity.setEndTime(new Date());
  755. integrateNodeService.create(nodeEntity);
  756. if (StringUtil.isNotEmpty(msg)) {
  757. throw new WorkFlowException(msg);
  758. }
  759. }
  760. }
  761. }
  762. private void dataInterface(Map<String, Object> data, List<IntegrateNodeEntity> nodeList, String node, UserInfo userInfo, String retryNodeCode) throws WorkFlowException {
  763. IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
  764. if (nodeEntity != null) {
  765. String msg = "";
  766. List<IntegrateNodeEntity> list = nodeList(nodeEntity);
  767. boolean isRetry = nodeEntity.getNodeCode().equals(retryNodeCode);
  768. if (list.size() == 0 || isRetry) {
  769. nodeEntity.setStartTime(new Date());
  770. try {
  771. IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeEntity.getNodePropertyJson(), IntegrateChildNodeList.class);
  772. interfaceTemplateJson(childNodeList, data, userInfo);
  773. nodeEntity.setResultType(1);
  774. } catch (Exception e) {
  775. errMsg(nodeEntity, e);
  776. msg = e.getMessage();
  777. }
  778. nodeEntity.setEndTime(new Date());
  779. if (isRetry) {
  780. integrateNodeService.update(nodeEntity.getTaskId(), nodeEntity.getNodeCode());
  781. }
  782. integrateNodeService.create(nodeEntity);
  783. if (StringUtil.isNotEmpty(msg)) {
  784. throw new WorkFlowException(msg);
  785. }
  786. }
  787. }
  788. }
  789. private Map<String, Object> formData(Map<String, Object> formData, List<TransferModel> transferList) throws WorkFlowException {
  790. return formData(formData, new HashMap<>(), transferList);
  791. }
  792. private Map<String, Object> formData(Map<String, Object> formData, Map<String, Object> resultData, List<TransferModel> transferList) throws WorkFlowException {
  793. Map<String, Object> result = new HashMap<>(resultData);
  794. Map<String, Object> oldData = new HashMap<>(formData);
  795. Set<String> msg = new HashSet<>();
  796. for (TransferModel assignMode : transferList) {
  797. //子表处理规则
  798. Boolean required = assignMode.getRequired();
  799. String targetFieldLabel = assignMode.getTargetFieldLabel();
  800. Integer sourceType = assignMode.getSourceType();
  801. boolean isData = ObjectUtil.equals(sourceType, TemplateEnum.Custom.getCode());
  802. String parentField = assignMode.getSourceValue();
  803. String[] parentFieldList = isData ? new String[]{parentField} : parentField.split("-");
  804. String childField = assignMode.getTargetField();
  805. String[] childFieldList = childField.split("-");
  806. Object childData = isData ? parentField : DataInterfaceVarConst.FORM_ID.equals(parentField) ? formData.get(FlowFormConstant.ID) : formData.get(parentField);
  807. if (childFieldList.length > 1) {
  808. List<Map<String, Object>> childMapAll = new ArrayList<>();
  809. if (result.get(childFieldList[0]) instanceof List) {
  810. List<Map<String, Object>> childList = (List<Map<String, Object>>) result.get(childFieldList[0]);
  811. for (Map<String, Object> objectMap : childList) {
  812. Map<String, Object> childMap = new HashMap<>(objectMap);
  813. childMapAll.add(childMap);
  814. }
  815. }
  816. if (parentFieldList.length > 1) {
  817. if (oldData.get(parentFieldList[0]) instanceof List) {
  818. List<Map<String, Object>> parentList = (List<Map<String, Object>>) oldData.get(parentFieldList[0]);
  819. int num = parentList.size() - childMapAll.size();
  820. for (int i = 0; i < num; i++) {
  821. childMapAll.add(new HashMap<>());
  822. }
  823. for (int i = 0; i < parentList.size(); i++) {
  824. Map<String, Object> parentMap = parentList.get(i);
  825. Map<String, Object> childMap = childMapAll.get(i);
  826. if (required && ObjectUtil.isEmpty(parentMap.get(parentFieldList[1]))) {
  827. msg.add(targetFieldLabel);
  828. }
  829. childMap.put(childFieldList[1], parentMap.get(parentFieldList[1]));
  830. }
  831. }
  832. } else {
  833. if (1 > childMapAll.size()) {
  834. childMapAll.add(new HashMap<>());
  835. }
  836. Map<String, Object> childMap = childMapAll.get(0);
  837. if (required && ObjectUtil.isEmpty(childData)) {
  838. msg.add(targetFieldLabel);
  839. }
  840. childMap.put(childFieldList[1], childData);
  841. }
  842. result.put(childFieldList[0], childMapAll);
  843. } else {
  844. if (parentFieldList.length > 1) {
  845. if (oldData.get(parentFieldList[0]) instanceof List) {
  846. List<Map<String, Object>> parentList = (List<Map<String, Object>>) oldData.get(parentFieldList[0]);
  847. for (int i = 0; i < parentList.size(); i++) {
  848. Map<String, Object> parentMap = parentList.get(i);
  849. if (i == 0) {
  850. childData = parentMap.get(parentFieldList[1]);
  851. }
  852. }
  853. }
  854. }
  855. if (required && ObjectUtil.isEmpty(childData)) {
  856. msg.add(targetFieldLabel);
  857. }
  858. result.put(childField, childData);
  859. }
  860. }
  861. errRequiredMsg(msg);
  862. return result;
  863. }
  864. private List<Map<String, Object>> dataList(IntegrateChildNodeList childNodeList, Map<String, Object> data, List<String> dataId) {
  865. boolean idDelete = Objects.equals(childNodeList.getType(), "deleteData");
  866. IntegrateProperties properties = childNodeList.getProperties();
  867. String formId = properties.getFormId();
  868. List<SuperQueryJsonModel> ruleList = properties.getRuleList();
  869. String ruleMatchLogic = properties.getRuleMatchLogic();
  870. String menuId = properties.getId();
  871. String flowId = properties.getFlowId();
  872. boolean isFlow = StringUtil.isNotEmpty(flowId);
  873. for (SuperQueryJsonModel superQueryJsonModel : ruleList) {
  874. List<FieLdsModel> groups = superQueryJsonModel.getGroups();
  875. for (FieLdsModel fieLdsModel : groups) {
  876. boolean valueType = "1".equals(fieLdsModel.getFieldValueType());
  877. String fieldValue = data.get(fieLdsModel.getFieldValue()) != null ? String.valueOf(data.get(fieLdsModel.getFieldValue())) : null;
  878. if (DataInterfaceVarConst.FORM_ID.equals(fieLdsModel.getFieldValue())) {
  879. fieldValue = String.valueOf(data.get(FlowFormConstant.ID));
  880. }
  881. fieLdsModel.setFieldValue(valueType ? fieldValue : fieLdsModel.getFieldValue());
  882. }
  883. }
  884. SuperJsonModel superJsonModel = new SuperJsonModel();
  885. superJsonModel.setConditionList(ruleList);
  886. superJsonModel.setMatchLogic(StringUtil.isNotEmpty(ruleMatchLogic) ? ruleMatchLogic : superJsonModel.getMatchLogic());
  887. PaginationModel paginationModel = new PaginationModel();
  888. paginationModel.setPageSize(10000L);
  889. paginationModel.setMenuId(menuId);
  890. paginationModel.setSuperQueryJson(ruleList.size() > 0 ? JsonUtil.getObjectToString(superJsonModel) : "");
  891. VisualdevEntity visualdevEntity = visualdevService.getReleaseInfo(formId);
  892. VisualDevJsonModel visualJsonModel = OnlinePublicUtils.getVisualJsonModel(visualdevEntity);
  893. List<String> idAll = new ArrayList<>();
  894. List<String> idList = new ArrayList<>();
  895. try {
  896. if (ruleList.size() > 0) {
  897. visualJsonModel.setSuperQuery(superJsonModel);
  898. }
  899. if (isFlow) {
  900. List<String> flowVersionIds = templateJsonService.getListByTemplateIds(ImmutableList.of(flowId)).stream().map(TemplateJsonEntity::getId).collect(Collectors.toList());
  901. visualJsonModel.setFlowVersionIds(flowVersionIds);
  902. visualJsonModel.setEnableFlow(flowVersionIds.size() > 0);
  903. }
  904. List<Map<String, Object>> dataList = visualDevListService.getListWithTableList(visualJsonModel, paginationModel, UserProvider.getUser());
  905. idList.addAll(dataList.stream().map(t -> String.valueOf(t.get(FlowFormConstant.ID))).collect(Collectors.toList()));
  906. } catch (Exception e) {
  907. }
  908. List<String> intersection = idList.stream().filter(item -> dataId.contains(item)).collect(Collectors.toList());
  909. if (dataId.size() > 0) {
  910. idAll.addAll(intersection);
  911. } else {
  912. idAll.addAll(idList);
  913. }
  914. List<Map<String, Object>> dataList = new ArrayList<>();
  915. for (String id : idAll) {
  916. VisualdevModelDataInfoVO infoVO = visualDevInfoService.getEditDataInfo(id, visualdevEntity, OnlineInfoModel.builder().build());
  917. if (StringUtil.isNotEmpty(infoVO.getData())) {
  918. Map<String, Object> map = JsonUtil.stringToMap(infoVO.getData());
  919. map.put(FlowFormConstant.ID, infoVO.getId());
  920. boolean isAdd = true;
  921. if (isFlow && !idDelete) {
  922. TaskEntity infoSubmit = taskService.getInfoSubmit(String.valueOf(map.get(FlowFormConstant.FLOWTASKID)), TaskEntity::getEndTime);
  923. isAdd = infoSubmit != null && infoSubmit.getEndTime() != null;
  924. }
  925. if (isAdd) {
  926. dataList.add(map);
  927. }
  928. }
  929. }
  930. return dataList;
  931. }
  932. private void message(String msgId, List<String> userIdList, Map<String, Object> parameterMap, UserInfo userInfo) {
  933. SentMessageForm sentMessageForm = new SentMessageForm();
  934. sentMessageForm.setUserInfo(userInfo);
  935. sentMessageForm.setTemplateId(msgId);
  936. sentMessageForm.setToUserIds(userIdList);
  937. sentMessageForm.setParameterMap(parameterMap);
  938. sentMessageForm.setType(3);
  939. sentMessageForm.setContentMsg(new HashMap<>());
  940. sentMessageForm.setId(msgId);
  941. sentMessageUtil.sendDelegateMsg(sentMessageForm);
  942. }
  943. private List<IntegrateNodeEntity> nodeList(IntegrateNodeEntity nodeEntity) {
  944. List<IntegrateNodeEntity> list = integrateNodeService.getList(new ArrayList() {{
  945. add(nodeEntity.getTaskId());
  946. }}, nodeEntity.getNodeCode(), 1);
  947. IntegrateNodeEntity integrateNode = list.stream().filter(t -> t.getNodeCode().equals(nodeEntity.getNodeCode()) && t.getResultType() == 1).findFirst().orElse(null);
  948. nodeEntity.setResultType(integrateNode != null ? integrateNode.getResultType() : nodeEntity.getResultType());
  949. return list;
  950. }
  951. private Map<String, Object> templateJson(List<IntegrateTemplateModel> templateJson, Map<String, Object> data, UserInfo userInfo) throws WorkFlowException {
  952. Map<String, Object> parameterMap = new HashMap<>();
  953. Set<String> msg = new HashSet<>();
  954. for (IntegrateTemplateModel templateJsonModel : templateJson) {
  955. List<IntegrateParamModel> paramJson = templateJsonModel.getParamJson();
  956. for (IntegrateParamModel integrateParamModel : paramJson) {
  957. Boolean required = integrateParamModel.getRequired();
  958. String fieldId = integrateParamModel.getField();
  959. String relationField = integrateParamModel.getRelationField();
  960. String[] model = StringUtil.isNotEmpty(relationField) ? relationField.split("-") : new String[]{};
  961. String dataValue = data.get(relationField) != null ? String.valueOf(data.get(relationField)) : "";
  962. if (DataInterfaceVarConst.FORM_ID.equals(relationField)) {
  963. dataValue = data.get(FlowFormConstant.ID) != null ? String.valueOf(data.get(FlowFormConstant.ID)) : "";
  964. }
  965. if (model.length > 1) {
  966. Object dataList = data.get(model[0]);
  967. if (dataList instanceof List) {
  968. List<Map<String, Object>> listAll = (List<Map<String, Object>>) dataList;
  969. List<Object> dataListAll = new ArrayList<>();
  970. for (Map<String, Object> objectMap : listAll) {
  971. dataListAll.add(objectMap.get(model[1]));
  972. }
  973. if (required && ObjectUtil.isEmpty(dataListAll)) {
  974. msg.add(fieldId);
  975. }
  976. dataValue = String.valueOf(dataListAll);
  977. }
  978. }
  979. if (required && ObjectUtil.isEmpty(dataValue)) {
  980. msg.add(fieldId);
  981. }
  982. parameterMap.put(integrateParamModel.getMsgTemplateId() + fieldId, dataValue);
  983. }
  984. Map<String, String> paramMap = ImmutableMap.of("@CreatorUserName", userInfo.getUserName(), "@SendTime", DateUtil.getNow().substring(11));
  985. for (String key : paramMap.keySet()) {
  986. parameterMap.put(templateJsonModel.getId() + key, paramMap.get(key));
  987. }
  988. }
  989. errRequiredMsg(msg);
  990. return parameterMap;
  991. }
  992. private void errMsg(IntegrateNodeEntity nodeEntity, Exception e) {
  993. ActionResult result = new ActionResult();
  994. result.setCode(400);
  995. result.setMsg(e.getMessage());
  996. if (nodeEntity != null) {
  997. nodeEntity.setErrorMsg(JsonUtil.getObjectToString(result));
  998. }
  999. }
  1000. private ActionResult interfaceTemplateJson(IntegrateChildNodeList childNodeList, Map<String, Object> data, UserInfo userInfo) throws WorkFlowException {
  1001. IntegrateProperties properties = childNodeList.getProperties();
  1002. String interId = properties.getFormId();
  1003. Map<String, String> parameterMap = new HashMap<>();
  1004. List<IntegrateTemplateModel> templateJson = properties.getTemplateJson();
  1005. Set<String> msg = new HashSet<>();
  1006. for (IntegrateTemplateModel templateJsonModel : templateJson) {
  1007. String fieldId = templateJsonModel.getField();
  1008. Boolean required = templateJsonModel.getRequired();
  1009. String relationField = templateJsonModel.getRelationField();
  1010. String dataValue = data.get(relationField) != null ? String.valueOf(data.get(relationField)) : null;
  1011. if (AuthorizeConditionEnum.FORMID.getCondition().equals(relationField)) {
  1012. dataValue = String.valueOf(data.get(FlowFormConstant.ID));
  1013. } else if (AuthorizeConditionEnum.USER.getCondition().equals(relationField)) {
  1014. dataValue = userInfo.getUserId();
  1015. } else if (AuthorizeConditionEnum.USERANDUNDER.getCondition().equals(relationField)) {
  1016. List<String> subOrganizeIds = new ArrayList<>();
  1017. subOrganizeIds.addAll(userService.getListByManagerId(userInfo.getUserId(), null).stream().map(UserEntity::getId).collect(Collectors.toList()));
  1018. subOrganizeIds.add(userInfo.getUserId());
  1019. dataValue = subOrganizeIds.stream().collect(Collectors.joining(","));
  1020. } else if (AuthorizeConditionEnum.ORGANIZE.getCondition().equals(relationField)) {
  1021. String orgId = userInfo.getOrganizeId();
  1022. if (StringUtil.isNotEmpty(userInfo.getDepartmentId())) {
  1023. orgId = userInfo.getDepartmentId();
  1024. }
  1025. dataValue = orgId;
  1026. } else if (AuthorizeConditionEnum.ORGANDSUB.getCondition().equals(relationField)) {
  1027. String orgId = userInfo.getOrganizeId();
  1028. if (StringUtil.isNotEmpty(userInfo.getDepartmentId())) {
  1029. orgId = userInfo.getDepartmentId();
  1030. }
  1031. List<String> underOrganizations = organizeService.getUnderOrganizations(orgId, false);
  1032. underOrganizations.add(orgId);
  1033. dataValue = underOrganizations.stream().collect(Collectors.joining(","));
  1034. }
  1035. String dataFieldValue = relationField;
  1036. String dataJson = !ObjectUtil.equals(templateJsonModel.getSourceType(), TemplateEnum.Custom.getCode()) ? dataValue : dataFieldValue;
  1037. String[] model = StringUtil.isNotEmpty(relationField) ? relationField.split("-") : new String[]{};
  1038. if (model.length > 1) {
  1039. Object dataList = data.get(model[0]);
  1040. if (dataList instanceof List) {
  1041. List<Map<String, Object>> listAll = (List<Map<String, Object>>) dataList;
  1042. List<Object> dataListAll = new ArrayList<>();
  1043. for (Map<String, Object> objectMap : listAll) {
  1044. dataListAll.add(objectMap.get(model[1]));
  1045. }
  1046. if (required && ObjectUtil.isEmpty(dataListAll)) {
  1047. msg.add(fieldId);
  1048. }
  1049. dataJson = String.valueOf(dataListAll);
  1050. }
  1051. }
  1052. if (required && ObjectUtil.isEmpty(dataJson)) {
  1053. msg.add(fieldId);
  1054. }
  1055. parameterMap.put(fieldId, dataJson);
  1056. }
  1057. errRequiredMsg(msg);
  1058. ActionResult dataInterfaceInfo = dataInterfaceService.infoToId(interId, userInfo.getTenantId(),
  1059. parameterMap, userInfo.getToken(),
  1060. null, null, null, null);
  1061. if (dataInterfaceInfo.getCode() != 200) {
  1062. throw new WorkFlowException(dataInterfaceInfo.getMsg());
  1063. }
  1064. return dataInterfaceInfo;
  1065. }
  1066. private void errRequiredMsg(Set<String> msg) throws WorkFlowException {
  1067. if (msg.size() > 0) {
  1068. throw new WorkFlowException(new ArrayList(msg).get(0) + MsgCode.VS015.get());
  1069. }
  1070. }
  1071. /**
  1072. * 发起审批
  1073. *
  1074. * @param data 数据
  1075. * @param nodeList 节点数组
  1076. * @param node 当前节点
  1077. * @param retryNodeCode 日志失败重试
  1078. * @throws WorkFlowException 异常
  1079. */
  1080. private void launchFlow(Map<String, Object> data, List<IntegrateNodeEntity> nodeList, String node, String retryNodeCode) throws WorkFlowException {
  1081. IntegrateNodeEntity nodeEntity = nodeList.stream().filter(t -> t.getNodeCode().equals(node)).findFirst().orElse(null);
  1082. if (nodeEntity != null) {
  1083. List<IntegrateNodeEntity> list = nodeList(nodeEntity);
  1084. boolean isRetry = nodeEntity.getNodeCode().equals(retryNodeCode);
  1085. if (list.size() == 0 || isRetry) {
  1086. nodeEntity.setStartTime(new Date());
  1087. IntegrateChildNodeList childNodeList = JsonUtil.getJsonToBean(nodeEntity.getNodePropertyJson(), IntegrateChildNodeList.class);
  1088. IntegrateProperties properties = childNodeList.getProperties();
  1089. String msg = "";
  1090. try {
  1091. String flowId = properties.getFlowId();
  1092. FlowFormModel formIdAndFlowId = templateService.getFormIdAndFlowId(properties.getInitiator(), flowId);
  1093. List<String> userList = formIdAndFlowId.getUserId();
  1094. List<UserEntity> userName = userService.getUserName(userList, true);
  1095. if(userName.isEmpty()){
  1096. throw new WorkFlowException(MsgCode.VS025.get());
  1097. }
  1098. for (UserEntity entity : userName) {
  1099. UserInfo userInfo = new UserInfo();
  1100. userInfo.setUserId(entity.getId());
  1101. userInfo.setUserName(entity.getRealName());
  1102. List<TransferModel> transferList = properties.getTransferList();
  1103. Map<String, Object> saveData = formData(data, transferList);
  1104. FlowModel flowModel = new FlowModel();
  1105. flowModel.setUserInfo(userInfo);
  1106. flowModel.setFlowId(flowId);
  1107. flowModel.setStatus(TaskStatusEnum.RUNNING.getCode());
  1108. flowModel.setFormData(saveData);
  1109. taskService.saveOrSubmit(flowModel);
  1110. }
  1111. nodeEntity.setResultType(1);
  1112. } catch (Exception e) {
  1113. errMsg(nodeEntity, e);
  1114. msg = e.getMessage();
  1115. }
  1116. nodeEntity.setEndTime(new Date());
  1117. if (isRetry) {
  1118. integrateNodeService.update(nodeEntity.getTaskId(), nodeEntity.getNodeCode());
  1119. }
  1120. integrateNodeService.create(nodeEntity);
  1121. if (StringUtil.isNotEmpty(msg)) {
  1122. throw new WorkFlowException(msg);
  1123. }
  1124. }
  1125. }
  1126. }
  1127. //------------------------------------------webhook触发------------------------------------------------------
  1128. public void integrate(String id, String tenantId, Map<String, Object> body) throws WorkFlowException {
  1129. IntegrateEntity entity = integrateService.getInfo(id);
  1130. if (entity == null) {
  1131. throw new WorkFlowException(MsgCode.VS016.get());
  1132. }
  1133. if (Objects.equals(entity.getEnabledMark(), 0)) {
  1134. throw new WorkFlowException(MsgCode.VS017.get());
  1135. }
  1136. IntegrateChildNode childNode = JsonUtil.getJsonToBean(entity.getTemplateJson(), IntegrateChildNode.class);
  1137. IntegrateProperties properties = childNode.getProperties();
  1138. List<FieLdsModel> formFieldList = properties.getFormFieldList();
  1139. List<Map<String, Object>> dataList = new ArrayList<>();
  1140. Map<String, Object> map = new HashMap<>();
  1141. for (FieLdsModel fieLdsModel : formFieldList) {
  1142. map.put(fieLdsModel.getId(), body.get(fieLdsModel.getId()));
  1143. }
  1144. dataList.add(map);
  1145. //登录一个临时用户
  1146. String token = AuthUtil.loginTempUser(entity.getCreatorUserId(), tenantId);
  1147. UserInfo userInfo = UserProvider.getUser(token);
  1148. UserProvider.setLocalLoginUser(userInfo);
  1149. integrate(entity.getId(), dataList, userInfo);
  1150. }
  1151. }