MsgUtil.java 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744
  1. package jnpf.flowable.util;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import com.google.common.collect.ImmutableList;
  4. import jnpf.base.ActionResult;
  5. import jnpf.base.UserInfo;
  6. import jnpf.base.model.systemconfig.SysConfigModel;
  7. import jnpf.constant.JnpfConst;
  8. import jnpf.emnus.TemplateEnum;
  9. import jnpf.exception.WorkFlowException;
  10. import jnpf.flowable.entity.*;
  11. import jnpf.flowable.enums.EventEnum;
  12. import jnpf.flowable.enums.FieldEnum;
  13. import jnpf.flowable.enums.NodeEnum;
  14. import jnpf.flowable.enums.OpTypeEnum;
  15. import jnpf.flowable.model.message.ContModel;
  16. import jnpf.flowable.model.message.DelegateModel;
  17. import jnpf.flowable.model.message.FlowEventModel;
  18. import jnpf.flowable.model.message.FlowMsgModel;
  19. import jnpf.flowable.model.task.FlowModel;
  20. import jnpf.flowable.model.templatenode.nodejson.*;
  21. import jnpf.flowable.model.util.FlowConstant;
  22. import jnpf.flowable.model.util.FlowNature;
  23. import jnpf.flowable.service.DelegateService;
  24. import jnpf.message.model.SentMessageForm;
  25. import jnpf.permission.entity.UserEntity;
  26. import jnpf.util.DateUtil;
  27. import jnpf.util.JsonUtil;
  28. import jnpf.util.StringUtil;
  29. import jnpf.util.UserProvider;
  30. import lombok.extern.slf4j.Slf4j;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.stereotype.Component;
  33. import java.util.*;
  34. import java.util.stream.Collectors;
  35. /**
  36. * @author :JNPF开发平台组
  37. * @version: V3.1.0
  38. * @copyright 引迈信息技术有限公司
  39. * @date :2022/3/30 11:45
  40. */
  41. @Slf4j
  42. @Component
  43. public class MsgUtil {
  44. @Autowired
  45. private ServiceUtil serviceUtil;
  46. @Autowired
  47. private DelegateService delegateService;
  48. public Map<String, Object> infoData(String formId, String taskId, Map<String, Map<String, Object>> allData) throws WorkFlowException {
  49. Map<String, Object> dataAll = allData.get(taskId + JnpfConst.SIDE_MARK + formId) != null ? allData.get(taskId + JnpfConst.SIDE_MARK + formId) : serviceUtil.infoData(formId, taskId);
  50. return dataAll;
  51. }
  52. /**
  53. * 发送消息
  54. *
  55. * @param flowMsgModel
  56. */
  57. public void message(FlowMsgModel flowMsgModel) throws WorkFlowException {
  58. List<SentMessageForm> messageListAll = new ArrayList<>();
  59. TaskEntity task = flowMsgModel.getTaskEntity();
  60. String taskId = task.getId();
  61. UserEntity user = StringUtil.isNotEmpty(task.getCreatorUserId()) ? serviceUtil.getUserInfo(task.getCreatorUserId()) : null;
  62. flowMsgModel.setCreateUser(user);
  63. UserEntity delegate = StringUtil.isNotEmpty(task.getDelegateUserId()) ? serviceUtil.getUserInfo(task.getDelegateUserId()) : null;
  64. flowMsgModel.setDelegate(delegate);
  65. Map<String, Map<String, Object>> formData = flowMsgModel.getFormData();
  66. String nodeCode = flowMsgModel.getNodeCode();
  67. List<TemplateNodeEntity> nodeList = flowMsgModel.getNodeList();
  68. List<OperatorEntity> operatorList = flowMsgModel.getOperatorList();
  69. List<CirculateEntity> circulateList = flowMsgModel.getCirculateList();
  70. TemplateNodeEntity startNodeEntity = nodeList.stream().filter(t -> NodeEnum.start.getType().equals(t.getNodeType())).findFirst().orElse(null);
  71. String nodeJson = startNodeEntity != null ? startNodeEntity.getNodeJson() : "{}";
  72. NodeModel startNode = JsonUtil.getJsonToBean(nodeJson, NodeModel.class);
  73. //同意
  74. if (flowMsgModel.getApprove()) {
  75. MsgConfig msgConfig = startNode.getApproveMsgConfig();
  76. TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(nodeCode)).findFirst().orElse(null);
  77. NodeModel taskChildNode = JsonUtil.getJsonToBean(taskNode.getNodeJson(), NodeModel.class);
  78. MsgConfig taskMsgConfig = taskChildNode.getApproveMsgConfig();
  79. if (taskMsgConfig.getOn() == 2) {
  80. taskMsgConfig = msgConfig;
  81. }
  82. if (taskMsgConfig.getOn() == 3) {
  83. taskMsgConfig.setMsgId("PZXTLC002");
  84. }
  85. List<SentMessageForm> messageList = new ArrayList<>();
  86. flowMsgModel.setOpType(OpTypeEnum.LaunchDetail.getType());
  87. Map<String, Object> data = this.infoData(startNode.getFormId(), taskId, formData);
  88. flowMsgModel.setData(data);
  89. flowMsgModel.setMsgConfig(taskMsgConfig);
  90. List<OperatorEntity> taskOperatorList = new ArrayList() {{
  91. OperatorEntity operatorEntity = new OperatorEntity();
  92. operatorEntity.setTaskId(task.getId());
  93. operatorEntity.setHandleId(task.getCreatorUserId());
  94. add(operatorEntity);
  95. }};
  96. FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
  97. setMessageList(messageList, msgModel);
  98. messageListAll.addAll(messageList);
  99. }
  100. // 拒绝
  101. if (flowMsgModel.getReject()) {
  102. MsgConfig msgConfig = startNode.getRejectMsgConfig();
  103. TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(nodeCode)).findFirst().orElse(null);
  104. NodeModel taskChildNode = JsonUtil.getJsonToBean(taskNode.getNodeJson(), NodeModel.class);
  105. MsgConfig taskMsgConfig = taskChildNode.getRejectMsgConfig();
  106. if (taskMsgConfig.getOn() == 2) {
  107. taskMsgConfig = msgConfig;
  108. }
  109. if (taskMsgConfig.getOn() == 3) {
  110. taskMsgConfig.setMsgId("PZXTLC018");
  111. }
  112. List<SentMessageForm> messageList = new ArrayList<>();
  113. flowMsgModel.setOpType(OpTypeEnum.LaunchDetail.getType());
  114. Map<String, Object> data = this.infoData(startNode.getFormId(), taskId, formData);
  115. flowMsgModel.setData(data);
  116. flowMsgModel.setMsgConfig(taskMsgConfig);
  117. List<OperatorEntity> taskOperatorList = new ArrayList() {{
  118. OperatorEntity operatorEntity = new OperatorEntity();
  119. operatorEntity.setTaskId(task.getId());
  120. operatorEntity.setHandleId(task.getCreatorUserId());
  121. add(operatorEntity);
  122. }};
  123. FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
  124. setMessageList(messageList, msgModel);
  125. messageListAll.addAll(messageList);
  126. }
  127. //等待
  128. if (flowMsgModel.getWait()) {
  129. MsgConfig taskMsgConfig = startNode.getWaitMsgConfig();
  130. if (taskMsgConfig.getOn() == 3) {
  131. if (flowMsgModel.getTransfer()) {
  132. taskMsgConfig.setMsgId("PZXTLC006");
  133. } else if (flowMsgModel.getAssign()) {
  134. taskMsgConfig.setMsgId("PZXTLC005");
  135. } else if (flowMsgModel.getPress()) {
  136. taskMsgConfig.setMsgId("PZXTLC004");
  137. } else {
  138. taskMsgConfig.setMsgId("PZXTLC001");
  139. }
  140. }
  141. Map<String, List<OperatorEntity>> operatorMap = operatorList.stream().collect(Collectors.groupingBy(OperatorEntity::getNodeCode));
  142. for (String key : operatorMap.keySet()) {
  143. List<SentMessageForm> messageList = new ArrayList<>();
  144. List<OperatorEntity> taskOperatorList = operatorMap.get(key);
  145. flowMsgModel.setOpType(OpTypeEnum.Sign.getType());
  146. TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(key)).findFirst().orElse(null);
  147. // 获取表单数据
  148. Map<String, Object> data = this.infoData(taskNode.getFormId(), taskId, formData);
  149. flowMsgModel.setData(data);
  150. flowMsgModel.setMsgConfig(taskMsgConfig);
  151. FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
  152. setMessageList(messageList, msgModel);
  153. messageListAll.addAll(messageList);
  154. for (OperatorEntity operator : taskOperatorList) {
  155. List<SentMessageForm> delegationMsg = delegationMsg(operator, msgModel);
  156. messageListAll.addAll(delegationMsg);
  157. }
  158. }
  159. }
  160. //结束
  161. if (flowMsgModel.getEnd()) {
  162. MsgConfig taskMsgConfig = startNode.getEndMsgConfig();
  163. if (taskMsgConfig.getOn() == 3) {
  164. taskMsgConfig.setMsgId("PZXTLC010");
  165. }
  166. List<SentMessageForm> messageList = new ArrayList<>();
  167. flowMsgModel.setOpType(OpTypeEnum.LaunchDetail.getType());
  168. Map<String, Object> data = this.infoData(startNode.getFormId(), taskId, formData);
  169. flowMsgModel.setData(data);
  170. flowMsgModel.setMsgConfig(taskMsgConfig);
  171. List<OperatorEntity> taskOperatorList = new ArrayList() {{
  172. OperatorEntity operatorEntity = new OperatorEntity();
  173. operatorEntity.setTaskId(task.getId());
  174. operatorEntity.setHandleId(task.getCreatorUserId());
  175. add(operatorEntity);
  176. }};
  177. FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
  178. setMessageList(messageList, msgModel);
  179. messageListAll.addAll(messageList);
  180. }
  181. //退回
  182. if (flowMsgModel.getBack()) {
  183. MsgConfig msgConfig = startNode.getBackMsgConfig();
  184. Map<String, List<OperatorEntity>> operatorMap = operatorList.stream().collect(Collectors.groupingBy(OperatorEntity::getNodeCode));
  185. for (String key : operatorMap.keySet()) {
  186. TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(nodeCode)).findFirst().orElse(null);
  187. NodeModel taskChildNode = JsonUtil.getJsonToBean(taskNode.getNodeJson(), NodeModel.class);
  188. MsgConfig taskMsgConfig = taskChildNode.getBackMsgConfig();
  189. if (taskMsgConfig.getOn() == 2) {
  190. taskMsgConfig = msgConfig;
  191. }
  192. if (taskMsgConfig.getOn() == 3) {
  193. taskMsgConfig.setMsgId("PZXTLC003");
  194. }
  195. List<SentMessageForm> messageList = new ArrayList<>();
  196. List<OperatorEntity> taskOperatorList = operatorMap.get(key);
  197. if (ObjectUtil.equals(flowMsgModel.getWait(), true)) {
  198. flowMsgModel.setOpType(OpTypeEnum.Sign.getType());
  199. }
  200. Map<String, Object> data = this.infoData(taskNode.getFormId(), taskId, formData);
  201. flowMsgModel.setData(data);
  202. flowMsgModel.setMsgConfig(taskMsgConfig);
  203. FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
  204. setMessageList(messageList, msgModel);
  205. messageListAll.addAll(messageList);
  206. for (OperatorEntity operator : taskOperatorList) {
  207. List<SentMessageForm> delegationMsg = delegationMsg(operator, msgModel);
  208. messageListAll.addAll(delegationMsg);
  209. }
  210. }
  211. }
  212. //抄送
  213. if (flowMsgModel.getCopy()) {
  214. MsgConfig msgConfig = startNode.getCopyMsgConfig();
  215. Map<String, List<CirculateEntity>> circulateMap = circulateList.stream().collect(Collectors.groupingBy(CirculateEntity::getNodeCode));
  216. for (String key : circulateMap.keySet()) {
  217. TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(key)).findFirst().orElse(null);
  218. NodeModel taskChildNode = JsonUtil.getJsonToBean(taskNode.getNodeJson(), NodeModel.class);
  219. MsgConfig taskMsgConfig = taskChildNode.getCopyMsgConfig();
  220. if (taskMsgConfig.getOn() == 2) {
  221. taskMsgConfig = msgConfig;
  222. }
  223. if (taskMsgConfig.getOn() == 3) {
  224. taskMsgConfig.setMsgId("PZXTLC007");
  225. }
  226. List<SentMessageForm> messageList = new ArrayList<>();
  227. List<OperatorEntity> taskOperatorList = new ArrayList<>();
  228. for (CirculateEntity circulateEntity : circulateMap.get(key)) {
  229. OperatorEntity operatorEntity = JsonUtil.getJsonToBean(circulateEntity, OperatorEntity.class);
  230. operatorEntity.setHandleId(circulateEntity.getUserId());
  231. taskOperatorList.add(operatorEntity);
  232. }
  233. flowMsgModel.setOpType(OpTypeEnum.Circulate.getType());
  234. Map<String, Object> data = this.infoData(taskNode.getFormId(), taskId, formData);
  235. flowMsgModel.setData(data);
  236. flowMsgModel.setMsgConfig(taskMsgConfig);
  237. FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
  238. setMessageList(messageList, msgModel);
  239. messageListAll.addAll(messageList);
  240. }
  241. }
  242. //子流程
  243. if (flowMsgModel.getLaunch()) {
  244. MsgConfig msgConfig = startNode.getLaunchMsgConfig();
  245. Map<String, List<OperatorEntity>> operatorMap = operatorList.stream().collect(Collectors.groupingBy(OperatorEntity::getNodeCode));
  246. for (String key : operatorMap.keySet()) {
  247. TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(key)).findFirst().orElse(null);
  248. NodeModel taskChildNode = JsonUtil.getJsonToBean(taskNode.getNodeJson(), NodeModel.class);
  249. MsgConfig taskMsgConfig = taskChildNode.getLaunchMsgConfig();
  250. if (taskMsgConfig.getOn() == 2) {
  251. taskMsgConfig = msgConfig;
  252. }
  253. if (taskMsgConfig.getOn() == 3) {
  254. taskMsgConfig.setMsgId("PZXTLC011");
  255. }
  256. List<SentMessageForm> messageList = new ArrayList<>();
  257. List<OperatorEntity> taskOperatorList = operatorMap.get(key);
  258. Map<String, Object> data = this.infoData(taskNode.getFormId(), taskId, formData);
  259. flowMsgModel.setData(data);
  260. flowMsgModel.setMsgConfig(taskMsgConfig);
  261. flowMsgModel.setOpType(taskChildNode.getAutoSubmit().equals(1) ? OpTypeEnum.LaunchDetail.getType() : OpTypeEnum.LaunchCreate.getType());
  262. FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
  263. setMessageList(messageList, msgModel);
  264. messageListAll.addAll(messageList);
  265. }
  266. }
  267. //超时
  268. if (flowMsgModel.getOvertime()) {
  269. MsgConfig msgConfig = startNode.getOverTimeMsgConfig();
  270. Map<String, List<OperatorEntity>> operatorMap = operatorList.stream().collect(Collectors.groupingBy(OperatorEntity::getNodeCode));
  271. for (String key : operatorMap.keySet()) {
  272. TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(key)).findFirst().orElse(null);
  273. NodeModel taskChildNode = JsonUtil.getJsonToBean(taskNode.getNodeJson(), NodeModel.class);
  274. MsgConfig taskMsgConfig = taskChildNode.getOverTimeMsgConfig();
  275. if (taskMsgConfig.getOn() == 2) {
  276. taskMsgConfig = msgConfig;
  277. }
  278. if (taskMsgConfig.getOn() == 3) {
  279. taskMsgConfig.setMsgId("PZXTLC009");
  280. }
  281. List<SentMessageForm> messageList = new ArrayList<>();
  282. List<OperatorEntity> taskOperatorList = operatorMap.get(key);
  283. flowMsgModel.setOpType(OpTypeEnum.Sign.getType());
  284. Map<String, Object> data = this.infoData(taskNode.getFormId(), taskId, formData);
  285. flowMsgModel.setData(data);
  286. flowMsgModel.setMsgConfig(taskMsgConfig);
  287. FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
  288. setMessageList(messageList, msgModel);
  289. messageListAll.addAll(messageList);
  290. for (OperatorEntity operator : taskOperatorList) {
  291. List<SentMessageForm> delegationMsg = delegationMsg(operator, flowMsgModel);
  292. messageListAll.addAll(delegationMsg);
  293. }
  294. }
  295. }
  296. //提醒
  297. if (flowMsgModel.getNotice()) {
  298. MsgConfig msgConfig = startNode.getNoticeMsgConfig();
  299. Map<String, List<OperatorEntity>> operatorMap = operatorList.stream().collect(Collectors.groupingBy(OperatorEntity::getNodeCode));
  300. for (String key : operatorMap.keySet()) {
  301. TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(key)).findFirst().orElse(null);
  302. NodeModel taskChildNode = JsonUtil.getJsonToBean(taskNode.getNodeJson(), NodeModel.class);
  303. MsgConfig taskMsgConfig = taskChildNode.getNoticeMsgConfig();
  304. if (taskMsgConfig.getOn() == 2) {
  305. taskMsgConfig = msgConfig;
  306. }
  307. if (taskMsgConfig.getOn() == 3) {
  308. taskMsgConfig.setMsgId("PZXTLC008");
  309. }
  310. List<SentMessageForm> messageList = new ArrayList<>();
  311. List<OperatorEntity> taskOperatorList = operatorMap.get(key);
  312. flowMsgModel.setOpType(OpTypeEnum.Sign.getType());
  313. Map<String, Object> data = this.infoData(taskNode.getFormId(), taskId, formData);
  314. flowMsgModel.setData(data);
  315. flowMsgModel.setMsgConfig(taskMsgConfig);
  316. FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
  317. setMessageList(messageList, msgModel);
  318. messageListAll.addAll(messageList);
  319. for (OperatorEntity operator : taskOperatorList) {
  320. List<SentMessageForm> delegationMsg = delegationMsg(operator, msgModel);
  321. messageListAll.addAll(delegationMsg);
  322. }
  323. }
  324. }
  325. //评论
  326. if (flowMsgModel.getComment()) {
  327. MsgConfig msgConfig = startNode.getCommentMsgConfig();
  328. if (msgConfig.getOn() == 3) {
  329. msgConfig.setMsgId("PZXTLC017");
  330. }
  331. Map<String, List<OperatorEntity>> operatorMap = operatorList.stream().collect(Collectors.groupingBy(OperatorEntity::getNodeCode));
  332. for (String key : operatorMap.keySet()) {
  333. List<SentMessageForm> messageList = new ArrayList<>();
  334. List<OperatorEntity> taskOperatorList = operatorMap.get(key);
  335. flowMsgModel.setOpType(OpTypeEnum.Circulate.getType());
  336. TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(key)).findFirst().orElse(null);
  337. Map<String, Object> data = this.infoData(taskNode.getFormId(), taskId, formData);
  338. flowMsgModel.setData(data);
  339. flowMsgModel.setMsgConfig(msgConfig);
  340. FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
  341. setMessageList(messageList, msgModel);
  342. messageListAll.addAll(messageList);
  343. }
  344. //抄送
  345. Map<String, List<CirculateEntity>> circulateMap = circulateList.stream().collect(Collectors.groupingBy(CirculateEntity::getNodeCode));
  346. for (String key : circulateMap.keySet()) {
  347. TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(key)).findFirst().orElse(null);
  348. List<SentMessageForm> messageList = new ArrayList<>();
  349. List<OperatorEntity> taskOperatorList = new ArrayList<>();
  350. for (CirculateEntity circulateEntity : circulateMap.get(key)) {
  351. OperatorEntity operatorEntity = JsonUtil.getJsonToBean(circulateEntity, OperatorEntity.class);
  352. operatorEntity.setHandleId(circulateEntity.getUserId());
  353. taskOperatorList.add(operatorEntity);
  354. }
  355. flowMsgModel.setOpType(OpTypeEnum.Circulate.getType());
  356. Map<String, Object> data = this.infoData(taskNode.getFormId(), taskId, formData);
  357. flowMsgModel.setData(data);
  358. flowMsgModel.setMsgConfig(msgConfig);
  359. FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
  360. setMessageList(messageList, msgModel);
  361. messageListAll.addAll(messageList);
  362. }
  363. if (flowMsgModel.getStartHandId()) {
  364. List<SentMessageForm> messageList = new ArrayList<>();
  365. flowMsgModel.setOpType(OpTypeEnum.LaunchDetail.getType());
  366. Map<String, Object> data = this.infoData(startNode.getFormId(), taskId, formData);
  367. flowMsgModel.setData(data);
  368. OperatorEntity operatorEntity = new OperatorEntity();
  369. operatorEntity.setTaskId(task.getId());
  370. operatorEntity.setHandleId(task.getCreatorUserId());
  371. List<OperatorEntity> meOperatorList = new ArrayList<>();
  372. meOperatorList.add(operatorEntity);
  373. FlowMsgModel msgModel = messageModel(meOperatorList, flowMsgModel);
  374. setMessageList(messageList, msgModel);
  375. messageListAll.addAll(messageList);
  376. }
  377. }
  378. for (SentMessageForm sentMessageForm : messageListAll) {
  379. sentMessageForm.setFlowName(task.getFullName());
  380. sentMessageForm.setUserName(user != null ? user.getRealName() : "");
  381. }
  382. serviceUtil.sendMessage(messageListAll);
  383. }
  384. /**
  385. * 组装接口数据
  386. *
  387. * @return
  388. */
  389. public Map<String, String> parameterMap(FlowModel flowModel, List<TemplateJsonModel> templateJsonModelList) {
  390. TaskEntity task = flowModel.getTaskEntity();
  391. List<String> creator = ImmutableList.of(
  392. FlowConstant.LAUNCH_USER_NAME,
  393. FlowConstant.CREATORUSERNAME,
  394. FlowConstant.MANDATOR
  395. );
  396. List<String> mandatary = ImmutableList.of(FlowConstant.MANDATARY);
  397. List<TemplateJsonModel> templateList = templateJsonModelList.stream().filter(e -> Objects.equals(e.getSourceType(), TemplateEnum.System.getCode())).collect(Collectors.toList());
  398. boolean isCreator = templateList.stream().anyMatch(e -> creator.contains(e.getRelationField()));
  399. UserEntity createUser = null;
  400. if (isCreator) {
  401. createUser = serviceUtil.getUserInfo(task.getCreatorUserId());
  402. }
  403. boolean isMandatary = templateList.stream().anyMatch(e -> mandatary.contains(e.getRelationField()));
  404. UserEntity delegate = null;
  405. if (isMandatary) {
  406. delegate = StringUtil.isNotEmpty(task.getDelegateUserId()) ? serviceUtil.getUserInfo(task.getDelegateUserId()) : null;
  407. }
  408. return parameterMap(flowModel, templateJsonModelList, createUser, delegate);
  409. }
  410. /**
  411. * 组装接口数据
  412. *
  413. * @return
  414. */
  415. public Map<String, String> parameterMap(FlowModel flowModel, List<TemplateJsonModel> templateJsonModelList, UserEntity createUser, UserEntity delegate) {
  416. Map<String, Object> data = flowModel.getFormData();
  417. TaskEntity task = flowModel.getTaskEntity();
  418. RecordEntity record = flowModel.getRecordEntity();
  419. Map<String, String> parameterMap = new HashMap<>();
  420. for (TemplateJsonModel templateJsonModel : templateJsonModelList) {
  421. String fieldId = templateJsonModel.getField();
  422. String msgTemplateId = templateJsonModel.getMsgTemplateId();
  423. String relationField = templateJsonModel.getRelationField();
  424. Integer sourceType = templateJsonModel.getSourceType();
  425. Map<String, Object> parameterData = task.getGlobalParameter() != null ? JsonUtil.stringToMap(task.getGlobalParameter()) : new HashMap<>();
  426. String parameterValue = parameterData.get(relationField) != null ? String.valueOf(parameterData.get(relationField)) : null;
  427. boolean isList = data.get(relationField) instanceof List;
  428. String dataValue = data.get(relationField) != null ? isList ? JsonUtil.getObjectToString(data.get(relationField)) : String.valueOf(data.get(relationField)) : null;
  429. String dataJson = Objects.equals(FieldEnum.Field.getCode(), sourceType) ? dataValue : Objects.equals(FieldEnum.Global.getCode(), sourceType) ? parameterValue : relationField;
  430. FlowEventModel eventModel = FlowEventModel.builder().data(data).dataJson(dataJson).record(record).templateJson(templateJsonModel).taskEntity(task).createUser(createUser).delegate(delegate).build();
  431. dataJson = data(eventModel);
  432. parameterMap.put(StringUtil.isNotEmpty(msgTemplateId) ? msgTemplateId : "" + fieldId, dataJson);
  433. }
  434. return parameterMap;
  435. }
  436. /**
  437. * @return
  438. */
  439. private String data(FlowEventModel eventModel) {
  440. RecordEntity record = eventModel.getRecord();
  441. TemplateJsonModel templateJson = eventModel.getTemplateJson();
  442. String relationField = StringUtil.isNotEmpty(templateJson.getRelationField()) ? templateJson.getRelationField() : "";
  443. List<Integer> typeList = ImmutableList.of(FieldEnum.Field.getCode(), FieldEnum.System.getCode());
  444. boolean isType = typeList.contains(templateJson.getSourceType());
  445. String dataJson = eventModel.getDataJson();
  446. Map<String, Object> data = eventModel.getData();
  447. UserInfo userInfo = UserProvider.getUser();
  448. String userId = userInfo.getUserId();
  449. String userName = userInfo.getUserName() != null ? userInfo.getUserName() : "";
  450. String value = dataJson;
  451. TaskEntity taskEntity = eventModel.getTaskEntity();
  452. if (isType) {
  453. switch (relationField) {
  454. case FlowConstant.FLOW_ID:
  455. value = taskEntity.getFlowId();
  456. break;
  457. case FlowConstant.TASK_ID:
  458. value = taskEntity.getId();
  459. break;
  460. case FlowConstant.EVENT_ID:
  461. //外部节点才有
  462. value = record.getNodeId();
  463. break;
  464. case FlowConstant.TASK_NODE_ID:
  465. value = record.getNodeCode();
  466. break;
  467. case FlowConstant.FLOW_FULL_NAME:
  468. value = taskEntity.getFlowName();
  469. break;
  470. case FlowConstant.TASK_FULL_NAME:
  471. value = taskEntity.getFullName();
  472. break;
  473. case FlowConstant.FORMDATA:
  474. value = JsonUtil.getObjectToString(data);
  475. break;
  476. case FlowConstant.LAUNCH_USER_ID:
  477. value = taskEntity.getCreatorUserId();
  478. break;
  479. case FlowConstant.LAUNCH_USER_NAME:
  480. case FlowConstant.CREATORUSERNAME:
  481. case FlowConstant.MANDATOR:
  482. // UserEntity createUser = StringUtil.isNotBlank(taskEntity.getCreatorUserId()) ? serviceUtil.getUserInfo(taskEntity.getCreatorUserId()) : null;
  483. UserEntity createUser = eventModel.getCreateUser();
  484. value = createUser != null ? createUser.getRealName() : "";
  485. break;
  486. case FlowConstant.FLOW_OPERATOR_USER_ID:
  487. value = userId;
  488. break;
  489. case FlowConstant.FLOW_OPERATOR_USER_NAME:
  490. value = userName;
  491. break;
  492. case FlowConstant.SENDTIME:
  493. value = DateUtil.getNow();
  494. break;
  495. case FlowConstant.MANDATARY:
  496. // UserEntity delegate = StringUtil.isNotBlank(taskEntity.getDelegateUserId()) ? serviceUtil.getUserInfo(taskEntity.getDelegateUserId()) : null;
  497. UserEntity delegate = eventModel.getDelegate();
  498. value = delegate != null ? delegate.getRealName() : "";
  499. break;
  500. default:
  501. String[] model = StringUtil.isNotEmpty(relationField) ? relationField.split("-") : new String[]{};
  502. if (model.length > 1) {
  503. Object dataList = data.get(model[0]);
  504. if (dataList instanceof List) {
  505. List<Map<String, Object>> listAll = (List<Map<String, Object>>) dataList;
  506. List<Object> list = new ArrayList<>();
  507. for (Map<String, Object> objectMap : listAll) {
  508. list.add(objectMap.get(model[1]));
  509. }
  510. value = String.valueOf(list);
  511. }
  512. }
  513. break;
  514. }
  515. }
  516. return value;
  517. }
  518. private void setMessageList(List<SentMessageForm> messageList, FlowMsgModel flowMsgModel) {
  519. HashMap<String, Object> data = new HashMap<>(flowMsgModel.getData());
  520. MsgConfig msgConfig = flowMsgModel.getMsgConfig() != null ? flowMsgModel.getMsgConfig() : new MsgConfig();
  521. List<String> userList = flowMsgModel.getUserList();
  522. UserInfo userInfo = flowMsgModel.getFlowModel().getUserInfo();
  523. TaskEntity task = flowMsgModel.getTaskEntity();
  524. UserEntity createUser = flowMsgModel.getCreateUser();
  525. UserEntity delegate = flowMsgModel.getDelegate();
  526. if (!userList.isEmpty()) {
  527. String templateId = msgConfig.getOn() == 0 ? "0" : msgConfig.getMsgId();
  528. boolean sysMessage = msgConfig.getOn() != 0;
  529. //解析发送配置json,获取消息模板参数
  530. List<TemplateJsonModel> templateJson = new ArrayList<>();
  531. for (SendConfigJson configJson : msgConfig.getTemplateJson()) {
  532. List<TemplateJsonModel> paramJson = configJson.getParamJson();
  533. templateJson.addAll(paramJson);
  534. List<String> list = ImmutableList.of(FlowConstant.MANDATOR, FlowConstant.MANDATARY, FlowConstant.CREATORUSERNAME, FlowConstant.SENDTIME);
  535. for (String field : list) {
  536. TemplateJsonModel jsonModel = new TemplateJsonModel();
  537. jsonModel.setMsgTemplateId(configJson.getId());
  538. jsonModel.setRelationField(field);
  539. jsonModel.setField(field);
  540. jsonModel.setSourceType(FieldEnum.System.getCode());
  541. templateJson.add(jsonModel);
  542. }
  543. }
  544. SentMessageForm sentMessageForm = new SentMessageForm();
  545. sentMessageForm.setSysMessage(sysMessage);
  546. sentMessageForm.setTemplateId(templateId);
  547. sentMessageForm.setToUserIds(userList);
  548. RecordEntity record = new RecordEntity();
  549. record.setNodeCode(flowMsgModel.getNodeCode());
  550. FlowModel parameterModel = new FlowModel();
  551. parameterModel.setFormData(data);
  552. parameterModel.setRecordEntity(record);
  553. parameterModel.setTaskEntity(task);
  554. Map<String, String> parameterMap = parameterMap(parameterModel, templateJson, createUser, delegate);
  555. data.putAll(parameterMap);
  556. sentMessageForm.setUserInfo(userInfo);
  557. sentMessageForm.setParameterMap(data);
  558. sentMessageForm.setContentMsg(flowMsgModel.getContMsg());
  559. sentMessageForm.setTitle(task.getFullName());
  560. messageList.add(sentMessageForm);
  561. }
  562. }
  563. private FlowMsgModel messageModel(List<OperatorEntity> taskOperatorList, FlowMsgModel flowMsgModel) {
  564. FlowMsgModel msgModel = JsonUtil.getJsonToBean(flowMsgModel, FlowMsgModel.class);
  565. List<String> userList = new ArrayList<>();
  566. TaskEntity task = flowMsgModel.getTaskEntity();
  567. Map<String, String> contMsg = new HashMap<>();
  568. for (OperatorEntity taskOperator : taskOperatorList) {
  569. ContModel contModel = new ContModel();
  570. contModel.setFlowId(task.getFlowId());
  571. contModel.setOperatorId(taskOperator.getId());
  572. contModel.setTaskId(task.getId());
  573. contModel.setOpType(flowMsgModel.getOpType());
  574. if (StringUtil.equals(flowMsgModel.getOpType(), OpTypeEnum.Sign.getType())) {
  575. if (null == taskOperator.getSignTime() && null == taskOperator.getStartHandleTime() && null == taskOperator.getHandleStatus()) {
  576. contModel.setOpType(OpTypeEnum.Sign.getType());
  577. } else if (null != taskOperator.getSignTime() && null == taskOperator.getStartHandleTime() && null == taskOperator.getHandleStatus()) {
  578. contModel.setOpType(OpTypeEnum.Todo.getType());
  579. } else if (null != taskOperator.getSignTime() && null != taskOperator.getStartHandleTime() && null == taskOperator.getHandleStatus()) {
  580. contModel.setOpType(OpTypeEnum.Doing.getType());
  581. }
  582. }
  583. contMsg.put(taskOperator.getHandleId(), JsonUtil.getObjectToString(contModel));
  584. userList.add(taskOperator.getHandleId());
  585. }
  586. msgModel.setUserList(userList);
  587. msgModel.setContMsg(contMsg);
  588. return msgModel;
  589. }
  590. private List<SentMessageForm> delegationMsg(OperatorEntity operator, FlowMsgModel flowMsgModel) {
  591. List<SentMessageForm> messageList = new ArrayList<>();
  592. TaskEntity task = flowMsgModel.getTaskEntity();
  593. if (task != null) {
  594. // 获取委托人
  595. List<String> userList = delegateService.getToUser(operator.getHandleId(), task.getFlowId());
  596. List<OperatorEntity> operatorList = new ArrayList<>();
  597. for (String user : userList) {
  598. OperatorEntity delegate = JsonUtil.getJsonToBean(operator, OperatorEntity.class);
  599. delegate.setHandleId(user);
  600. operatorList.add(delegate);
  601. FlowMsgModel msgModel = messageModel(operatorList, flowMsgModel);
  602. setMessageList(messageList, msgModel);
  603. }
  604. }
  605. return messageList;
  606. }
  607. //--------------------------------------委托消息------------------------------------------------------
  608. public void delegateMsg(DelegateModel flowDelegate) {
  609. SysConfigModel sysConfig = serviceUtil.getSysConfig();
  610. // 委托/代理确认通知
  611. Integer ack = flowDelegate.getDelegate() ? sysConfig.getDelegateAck() : sysConfig.getProxyAck();
  612. flowDelegate.setAck(ack);
  613. List<String> toUserIds = flowDelegate.getToUserIds();
  614. if (!toUserIds.isEmpty()) {
  615. UserInfo userInfo = flowDelegate.getUserInfo();
  616. TaskEntity flowTask = flowDelegate.getFlowTask();
  617. Map<String, String> contentMsg = new HashMap<>();
  618. Boolean delegate = flowDelegate.getDelegate();
  619. boolean approve = flowDelegate.getApprove();
  620. if (approve) {
  621. SentMessageForm flowMsgModel = new SentMessageForm();
  622. flowMsgModel.setToUserIds(toUserIds);
  623. flowMsgModel.setUserInfo(flowDelegate.getUserInfo());
  624. Map<String, Object> parameterMap = new HashMap<>();
  625. parameterMap.put(FlowConstant.MANDATOR, userInfo.getUserName());
  626. UserEntity mandatary = StringUtil.isNotEmpty(flowTask.getDelegateUserId()) ? serviceUtil.getUserInfo(flowTask.getDelegateUserId()) : null;
  627. parameterMap.put(FlowConstant.MANDATARY, mandatary != null ? mandatary.getRealName() : "");
  628. parameterMap.put(FlowConstant.TITLE, delegate ? "委托" : "代理");
  629. flowMsgModel.setParameterMap(parameterMap);
  630. //1.委托设置 2.委托给我
  631. Integer type = flowDelegate.getType();
  632. String templateId = FlowNature.EndMsg.equals(type) ? "PZXTLG021" : ObjectUtil.equals(ack, 1) ? "PZXTLG020" : "PZXTLG019";
  633. flowMsgModel.setTemplateId(templateId);
  634. Integer delegateType = FlowNature.EndMsg.equals(type) ? 0 : delegate ? 2 : 4;
  635. contentMsg.put("type", delegateType + "");
  636. flowMsgModel.setContentMsg(contentMsg);
  637. flowMsgModel.setFlowType(2);
  638. flowMsgModel.setType(2);
  639. List<SentMessageForm> messageListAll = new ArrayList<>();
  640. messageListAll.add(flowMsgModel);
  641. serviceUtil.sendDelegateMsg(messageListAll);
  642. }
  643. }
  644. }
  645. /**
  646. * 流程事件
  647. *
  648. * @param status 事件状态 1.发起 2.结束 3.发起撤回 4同意 5拒绝 6节点撤回 7 超时 8提醒 9退回
  649. * @param nodeModel 节点数据
  650. * @param record 审批数据
  651. */
  652. public void event(Integer status, NodeModel nodeModel, RecordEntity record, FlowModel flowModel) {
  653. if (nodeModel != null) {
  654. FuncConfig config = new FuncConfig();
  655. EventEnum eventStatus = EventEnum.getEventStatus(status);
  656. switch (eventStatus) {
  657. case Init:
  658. config = nodeModel.getInitFuncConfig();
  659. break;
  660. case End:
  661. config = nodeModel.getEndFuncConfig();
  662. break;
  663. case FlowRecall:
  664. config = nodeModel.getFlowRecallFuncConfig();
  665. break;
  666. case Approve:
  667. config = nodeModel.getApproveFuncConfig();
  668. break;
  669. case Reject:
  670. config = nodeModel.getRejectFuncConfig();
  671. break;
  672. case Recall:
  673. config = nodeModel.getRecallFuncConfig();
  674. break;
  675. case Overtime:
  676. config = nodeModel.getOvertimeFuncConfig();
  677. break;
  678. case Notice:
  679. config = nodeModel.getNoticeFuncConfig();
  680. break;
  681. case Back:
  682. config = nodeModel.getBackFuncConfig();
  683. break;
  684. }
  685. boolean on = config.getOn();
  686. String interId = config.getInterfaceId();
  687. List<TemplateJsonModel> templateJsonModelList = config.getTemplateJson();
  688. if (on && StringUtil.isNotEmpty(interId)) {
  689. Map<String, Object> data = flowModel.getFormData();
  690. TaskEntity taskEntity = flowModel.getTaskEntity();
  691. // UserEntity createUser = null;
  692. // UserEntity delegate = null;
  693. // if (taskEntity != null) {
  694. // createUser = serviceUtil.getUserInfo(taskEntity.getCreatorUserId());
  695. // delegate = StringUtil.isNotEmpty(taskEntity.getDelegateUserId()) ? serviceUtil.getUserInfo(taskEntity.getDelegateUserId()) : null;
  696. // }
  697. FlowModel parameterModel = new FlowModel();
  698. parameterModel.setFormData(data);
  699. parameterModel.setRecordEntity(record);
  700. parameterModel.setTaskEntity(taskEntity);
  701. Map<String, String> parameterMap = parameterMap(parameterModel, templateJsonModelList);
  702. ActionResult result = serviceUtil.infoToId(interId, parameterMap);
  703. if (null == result || Objects.equals(400, result.getCode())) {
  704. log.error("接口调用失败: {}", result);
  705. }
  706. }
  707. }
  708. }
  709. // 接口调用的参数需转为字符串
  710. public Map<String, String> intefaceParameterMap(Map<String, Object> data, List<TemplateJsonModel> templateJsonModelList, RecordEntity record, TaskEntity task, UserEntity createUser, UserEntity delegate) {
  711. Map<String, String> parameterMap = new HashMap<>();
  712. for (TemplateJsonModel templateJsonModel : templateJsonModelList) {
  713. String fieldId = templateJsonModel.getField();
  714. String msgTemplateId = templateJsonModel.getMsgTemplateId();
  715. String relationField = templateJsonModel.getRelationField();
  716. boolean isList = data.get(relationField) instanceof List;
  717. String dataValue = data.get(relationField) != null ? isList ? JsonUtil.getObjectToString(data.get(relationField)) : String.valueOf(data.get(relationField)) : null;
  718. String dataFieldValue = relationField;
  719. String dataJson = Objects.equals(FieldEnum.Field.getCode(), templateJsonModel.getSourceType()) ? dataValue : dataFieldValue;
  720. FlowEventModel eventModel = FlowEventModel.builder().data(data).dataJson(dataJson).record(record).templateJson(templateJsonModel).taskEntity(task).createUser(createUser).delegate(delegate).build();
  721. dataJson = data(eventModel);
  722. parameterMap.put(StringUtil.isNotEmpty(msgTemplateId) ? msgTemplateId : "" + fieldId, dataJson);
  723. }
  724. return parameterMap;
  725. }
  726. }