From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/util/MsgUtil.java |  550 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 550 insertions(+), 0 deletions(-)

diff --git a/jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/util/MsgUtil.java b/jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/util/MsgUtil.java
new file mode 100644
index 0000000..e35848f
--- /dev/null
+++ b/jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/util/MsgUtil.java
@@ -0,0 +1,550 @@
+package jnpf.flowable.util;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.google.common.collect.ImmutableList;
+import jnpf.base.UserInfo;
+import jnpf.base.model.systemconfig.SysConfigModel;
+import jnpf.flowable.entity.*;
+import jnpf.flowable.enums.*;
+import jnpf.flowable.model.message.ContModel;
+import jnpf.flowable.model.message.DelegateModel;
+import jnpf.flowable.model.message.FlowEventModel;
+import jnpf.flowable.model.message.FlowMsgModel;
+import jnpf.flowable.model.task.FlowModel;
+import jnpf.flowable.model.templatenode.nodejson.*;
+import jnpf.flowable.model.util.*;
+import jnpf.message.model.SentMessageForm;
+import jnpf.permission.entity.UserEntity;
+import jnpf.util.JsonUtil;
+import jnpf.util.StringUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author 锛欽NPF寮�鍙戝钩鍙扮粍
+ * @version: V3.1.0
+ * @copyright 寮曡繄淇℃伅鎶�鏈湁闄愬叕鍙�
+ * @date 锛�2022/3/30 11:45
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class MsgUtil {
+
+
+    private final ServiceUtil serviceUtil;
+
+    private final FlowUtil flowUtil;
+
+    /**
+     * 鍙戦�佹秷鎭�
+     *
+     * @param flowMsgModel
+     */
+    public void message(FlowMsgModel flowMsgModel) {
+        List<SentMessageForm> messageListAll = new ArrayList<>();
+        TaskEntity task = flowMsgModel.getTaskEntity();
+        String taskId = task.getId();
+        UserEntity user = StringUtil.isNotEmpty(task.getCreatorUserId()) ? serviceUtil.getUserInfo(task.getCreatorUserId()) : null;
+        flowMsgModel.setCreateUser(user);
+        UserEntity delegate = StringUtil.isNotEmpty(task.getDelegateUserId()) ? serviceUtil.getUserInfo(task.getDelegateUserId()) : null;
+        flowMsgModel.setDelegate(delegate);
+        Map<String, Map<String, Object>> formData = flowMsgModel.getFormData();
+        String nodeCode = flowMsgModel.getNodeCode();
+        List<TemplateNodeEntity> nodeList = flowMsgModel.getNodeList();
+        List<OperatorEntity> operatorList = flowMsgModel.getOperatorList();
+        List<CirculateEntity> circulateList = flowMsgModel.getCirculateList();
+        TemplateNodeEntity startNodeEntity = nodeList.stream().filter(t -> NodeEnum.START.getType().equals(t.getNodeType())).findFirst().orElse(null);
+        String nodeJson = startNodeEntity != null ? startNodeEntity.getNodeJson() : "{}";
+        NodeModel startNode = JsonUtil.getJsonToBean(nodeJson, NodeModel.class);
+        //鍚屾剰
+        if (Boolean.TRUE.equals(flowMsgModel.getApprove())) {
+            MsgConfig msgConfig = startNode.getApproveMsgConfig();
+            TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(nodeCode)).findFirst().orElse(null);
+            NodeModel taskChildNode = JsonUtil.getJsonToBean(taskNode.getNodeJson(), NodeModel.class);
+            MsgConfig taskMsgConfig = taskChildNode.getApproveMsgConfig();
+            if (taskMsgConfig.getOn() == 2) {
+                taskMsgConfig = msgConfig;
+            }
+            if (taskMsgConfig.getOn() == 3) {
+                taskMsgConfig.setMsgId("PZXTLC002");
+            }
+            List<SentMessageForm> messageList = new ArrayList<>();
+            flowMsgModel.setOpType(OpTypeEnum.LAUNCH_DETAIL.getType());
+            Map<String, Object> data = flowUtil.infoData(startNode.getFormId(), taskId, formData);
+            flowMsgModel.setData(data);
+            flowMsgModel.setMsgConfig(taskMsgConfig);
+            List<OperatorEntity> taskOperatorList = new ArrayList<>();
+            OperatorEntity operatorEntity = new OperatorEntity();
+            operatorEntity.setTaskId(task.getId());
+            operatorEntity.setHandleId(task.getCreatorUserId());
+            taskOperatorList.add(operatorEntity);
+            FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
+            setMessageList(messageList, msgModel);
+            messageListAll.addAll(messageList);
+        }
+        // 鎷掔粷
+        if (Boolean.TRUE.equals(flowMsgModel.getReject())) {
+            MsgConfig msgConfig = startNode.getRejectMsgConfig();
+            TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(nodeCode)).findFirst().orElse(null);
+            NodeModel taskChildNode = JsonUtil.getJsonToBean(taskNode.getNodeJson(), NodeModel.class);
+            MsgConfig taskMsgConfig = taskChildNode.getRejectMsgConfig();
+            if (taskMsgConfig.getOn() == 2) {
+                taskMsgConfig = msgConfig;
+            }
+            if (taskMsgConfig.getOn() == 3) {
+                taskMsgConfig.setMsgId("PZXTLC018");
+            }
+            List<SentMessageForm> messageList = new ArrayList<>();
+            flowMsgModel.setOpType(OpTypeEnum.LAUNCH_DETAIL.getType());
+            Map<String, Object> data = flowUtil.infoData(startNode.getFormId(), taskId, formData);
+            flowMsgModel.setData(data);
+            flowMsgModel.setMsgConfig(taskMsgConfig);
+            List<OperatorEntity> taskOperatorList = new ArrayList<>();
+            OperatorEntity operatorEntity = new OperatorEntity();
+            operatorEntity.setTaskId(task.getId());
+            operatorEntity.setHandleId(task.getCreatorUserId());
+            taskOperatorList.add(operatorEntity);
+            FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
+            setMessageList(messageList, msgModel);
+            messageListAll.addAll(messageList);
+        }
+        //绛夊緟
+        if (flowMsgModel.getWait().equals(Boolean.TRUE)) {
+            MsgConfig taskMsgConfig = startNode.getWaitMsgConfig();
+            if (taskMsgConfig.getOn() == 3) {
+                if (Boolean.TRUE.equals(flowMsgModel.getTransfer())) {
+                    taskMsgConfig.setMsgId("PZXTLC006");
+                } else if (Boolean.TRUE.equals(flowMsgModel.getAssign())) {
+                    taskMsgConfig.setMsgId("PZXTLC005");
+                } else if (Boolean.TRUE.equals(flowMsgModel.getPress())) {
+                    taskMsgConfig.setMsgId("PZXTLC004");
+                } else {
+                    taskMsgConfig.setMsgId("PZXTLC001");
+                }
+            }
+            Map<String, List<OperatorEntity>> operatorMap = operatorList.stream().collect(Collectors.groupingBy(OperatorEntity::getNodeCode));
+            for (Map.Entry<String, List<OperatorEntity>> stringListEntry : operatorMap.entrySet()) {
+                String key = stringListEntry.getKey();
+
+                List<SentMessageForm> messageList = new ArrayList<>();
+                List<OperatorEntity> taskOperatorList = operatorMap.get(key);
+                flowMsgModel.setOpType(OpTypeEnum.SIGN.getType());
+                TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(key)).findFirst().orElse(null);
+                // 鑾峰彇琛ㄥ崟鏁版嵁
+                Map<String, Object> data = flowUtil.infoData(taskNode.getFormId(), taskId, formData);
+                flowMsgModel.setData(data);
+                flowMsgModel.setMsgConfig(taskMsgConfig);
+                FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
+                setMessageList(messageList, msgModel);
+                messageListAll.addAll(messageList);
+                for (OperatorEntity operator : taskOperatorList) {
+                    List<SentMessageForm> delegationMsg = delegationMsg(operator, msgModel);
+                    messageListAll.addAll(delegationMsg);
+                }
+
+            }
+
+
+        }
+        //缁撴潫
+        if (Boolean.TRUE.equals(flowMsgModel.getEnd())) {
+            MsgConfig taskMsgConfig = startNode.getEndMsgConfig();
+            if (taskMsgConfig.getOn() == 3) {
+                taskMsgConfig.setMsgId("PZXTLC010");
+            }
+            List<SentMessageForm> messageList = new ArrayList<>();
+            flowMsgModel.setOpType(OpTypeEnum.LAUNCH_DETAIL.getType());
+            Map<String, Object> data = flowUtil.infoData(startNode.getFormId(), taskId, formData);
+            flowMsgModel.setData(data);
+            flowMsgModel.setMsgConfig(taskMsgConfig);
+            List<OperatorEntity> taskOperatorList = new ArrayList<>();
+            OperatorEntity operatorEntity = new OperatorEntity();
+            operatorEntity.setTaskId(task.getId());
+            operatorEntity.setHandleId(task.getCreatorUserId());
+            taskOperatorList.add(operatorEntity);
+            FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
+            setMessageList(messageList, msgModel);
+            messageListAll.addAll(messageList);
+        }
+        //閫�鍥�
+        if (Boolean.TRUE.equals(flowMsgModel.getBack())) {
+            MsgConfig msgConfig = startNode.getBackMsgConfig();
+            Map<String, List<OperatorEntity>> operatorMap = operatorList.stream().collect(Collectors.groupingBy(OperatorEntity::getNodeCode));
+            for (Map.Entry<String, List<OperatorEntity>> stringListEntry : operatorMap.entrySet()) {
+                String key = stringListEntry.getKey();
+                TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(nodeCode)).findFirst().orElse(null);
+                NodeModel taskChildNode = JsonUtil.getJsonToBean(taskNode.getNodeJson(), NodeModel.class);
+                MsgConfig taskMsgConfig = taskChildNode.getBackMsgConfig();
+                if (taskMsgConfig.getOn() == 2) {
+                    taskMsgConfig = msgConfig;
+                }
+                if (taskMsgConfig.getOn() == 3) {
+                    taskMsgConfig.setMsgId("PZXTLC003");
+                }
+                List<SentMessageForm> messageList = new ArrayList<>();
+                List<OperatorEntity> taskOperatorList = operatorMap.get(key);
+                if (ObjectUtil.equals(flowMsgModel.getWait(), true)) {
+                    flowMsgModel.setOpType(OpTypeEnum.SIGN.getType());
+                }
+                Map<String, Object> data = flowUtil.infoData(taskNode.getFormId(), taskId, formData);
+                flowMsgModel.setData(data);
+                flowMsgModel.setMsgConfig(taskMsgConfig);
+                FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
+                setMessageList(messageList, msgModel);
+                messageListAll.addAll(messageList);
+                for (OperatorEntity operator : taskOperatorList) {
+                    List<SentMessageForm> delegationMsg = delegationMsg(operator, msgModel);
+                    messageListAll.addAll(delegationMsg);
+                }
+            }
+        }
+        //鎶勯��
+        if (Boolean.TRUE.equals(flowMsgModel.getCopy())) {
+            MsgConfig msgConfig = startNode.getCopyMsgConfig();
+            Map<String, List<CirculateEntity>> circulateMap = circulateList.stream().collect(Collectors.groupingBy(CirculateEntity::getNodeCode));
+            for (Map.Entry<String, List<CirculateEntity>> stringListEntry : circulateMap.entrySet()) {
+                String key = stringListEntry.getKey();
+                TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(key)).findFirst().orElse(null);
+                NodeModel taskChildNode = JsonUtil.getJsonToBean(taskNode.getNodeJson(), NodeModel.class);
+                MsgConfig taskMsgConfig = taskChildNode.getCopyMsgConfig();
+                if (taskMsgConfig.getOn() == 2) {
+                    taskMsgConfig = msgConfig;
+                }
+                if (taskMsgConfig.getOn() == 3) {
+                    taskMsgConfig.setMsgId("PZXTLC007");
+                }
+                List<SentMessageForm> messageList = new ArrayList<>();
+                List<OperatorEntity> taskOperatorList = new ArrayList<>();
+                for (CirculateEntity circulateEntity : circulateMap.get(key)) {
+                    OperatorEntity operatorEntity = JsonUtil.getJsonToBean(circulateEntity, OperatorEntity.class);
+                    operatorEntity.setHandleId(circulateEntity.getUserId());
+                    taskOperatorList.add(operatorEntity);
+                }
+                flowMsgModel.setOpType(OpTypeEnum.CIRCULATE.getType());
+                Map<String, Object> data = flowUtil.infoData(taskNode.getFormId(), taskId, formData);
+                flowMsgModel.setData(data);
+                flowMsgModel.setMsgConfig(taskMsgConfig);
+                FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
+                setMessageList(messageList, msgModel);
+                messageListAll.addAll(messageList);
+            }
+        }
+        //瀛愭祦绋�
+        if (Boolean.TRUE.equals(flowMsgModel.getLaunch())) {
+            MsgConfig msgConfig = startNode.getLaunchMsgConfig();
+            Map<String, List<OperatorEntity>> operatorMap = operatorList.stream().collect(Collectors.groupingBy(OperatorEntity::getNodeCode));
+            for (Map.Entry<String, List<OperatorEntity>> stringListEntry : operatorMap.entrySet()) {
+                String key = stringListEntry.getKey();
+                TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(key)).findFirst().orElse(null);
+                NodeModel taskChildNode = JsonUtil.getJsonToBean(taskNode.getNodeJson(), NodeModel.class);
+                MsgConfig taskMsgConfig = taskChildNode.getLaunchMsgConfig();
+                if (taskMsgConfig.getOn() == 2) {
+                    taskMsgConfig = msgConfig;
+                }
+                if (taskMsgConfig.getOn() == 3) {
+                    taskMsgConfig.setMsgId("PZXTLC011");
+                }
+                List<SentMessageForm> messageList = new ArrayList<>();
+                List<OperatorEntity> taskOperatorList = operatorMap.get(key);
+                Map<String, Object> data = flowUtil.infoData(taskNode.getFormId(), taskId, formData);
+                flowMsgModel.setData(data);
+                flowMsgModel.setMsgConfig(taskMsgConfig);
+                flowMsgModel.setOpType(taskChildNode.getAutoSubmit().equals(1) ? OpTypeEnum.LAUNCH_DETAIL.getType() : OpTypeEnum.LAUNCH_CREATE.getType());
+                FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
+                setMessageList(messageList, msgModel);
+                messageListAll.addAll(messageList);
+            }
+        }
+        //瓒呮椂
+        if (Boolean.TRUE.equals(flowMsgModel.getOvertime())) {
+            MsgConfig msgConfig = startNode.getOverTimeMsgConfig();
+            Map<String, List<OperatorEntity>> operatorMap = operatorList.stream().collect(Collectors.groupingBy(OperatorEntity::getNodeCode));
+            for (Map.Entry<String, List<OperatorEntity>> stringListEntry : operatorMap.entrySet()) {
+                String key = stringListEntry.getKey();
+                TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(key)).findFirst().orElse(null);
+                NodeModel taskChildNode = JsonUtil.getJsonToBean(taskNode.getNodeJson(), NodeModel.class);
+                MsgConfig taskMsgConfig = taskChildNode.getOverTimeMsgConfig();
+                if (taskMsgConfig.getOn() == 2) {
+                    taskMsgConfig = msgConfig;
+                }
+                if (taskMsgConfig.getOn() == 3) {
+                    taskMsgConfig.setMsgId("PZXTLC009");
+                }
+                List<SentMessageForm> messageList = new ArrayList<>();
+                List<OperatorEntity> taskOperatorList = operatorMap.get(key);
+                flowMsgModel.setOpType(OpTypeEnum.SIGN.getType());
+                Map<String, Object> data = flowUtil.infoData(taskNode.getFormId(), taskId, formData);
+                flowMsgModel.setData(data);
+                flowMsgModel.setMsgConfig(taskMsgConfig);
+                FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
+                setMessageList(messageList, msgModel);
+                messageListAll.addAll(messageList);
+                for (OperatorEntity operator : taskOperatorList) {
+                    List<SentMessageForm> delegationMsg = delegationMsg(operator, flowMsgModel);
+                    messageListAll.addAll(delegationMsg);
+                }
+            }
+        }
+        //鎻愰啋
+        if (Boolean.TRUE.equals(flowMsgModel.getNotice())) {
+            MsgConfig msgConfig = startNode.getNoticeMsgConfig();
+            Map<String, List<OperatorEntity>> operatorMap = operatorList.stream().collect(Collectors.groupingBy(OperatorEntity::getNodeCode));
+            for (Map.Entry<String, List<OperatorEntity>> stringListEntry : operatorMap.entrySet()) {
+                String key = stringListEntry.getKey();
+                TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(key)).findFirst().orElse(null);
+                NodeModel taskChildNode = JsonUtil.getJsonToBean(taskNode.getNodeJson(), NodeModel.class);
+                MsgConfig taskMsgConfig = taskChildNode.getNoticeMsgConfig();
+                if (taskMsgConfig.getOn() == 2) {
+                    taskMsgConfig = msgConfig;
+                }
+                if (taskMsgConfig.getOn() == 3) {
+                    taskMsgConfig.setMsgId("PZXTLC008");
+                }
+                List<SentMessageForm> messageList = new ArrayList<>();
+                List<OperatorEntity> taskOperatorList = operatorMap.get(key);
+                flowMsgModel.setOpType(OpTypeEnum.SIGN.getType());
+                Map<String, Object> data = flowUtil.infoData(taskNode.getFormId(), taskId, formData);
+                flowMsgModel.setData(data);
+                flowMsgModel.setMsgConfig(taskMsgConfig);
+                FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
+                setMessageList(messageList, msgModel);
+                messageListAll.addAll(messageList);
+                for (OperatorEntity operator : taskOperatorList) {
+                    List<SentMessageForm> delegationMsg = delegationMsg(operator, msgModel);
+                    messageListAll.addAll(delegationMsg);
+                }
+            }
+        }
+        //璇勮
+        if (Boolean.TRUE.equals(flowMsgModel.getComment())) {
+            MsgConfig msgConfig = startNode.getCommentMsgConfig();
+            if (msgConfig.getOn() == 3) {
+                msgConfig.setMsgId("PZXTLC017");
+            }
+            Map<String, List<OperatorEntity>> operatorMap = operatorList.stream().collect(Collectors.groupingBy(OperatorEntity::getNodeCode));
+            for (Map.Entry<String, List<OperatorEntity>> stringListEntry : operatorMap.entrySet()) {
+                String key = stringListEntry.getKey();
+                List<SentMessageForm> messageList = new ArrayList<>();
+                List<OperatorEntity> taskOperatorList = operatorMap.get(key);
+                flowMsgModel.setOpType(OpTypeEnum.CIRCULATE.getType());
+
+                TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(key)).findFirst().orElse(null);
+                if (BeanUtil.isNotEmpty(taskNode)) {
+                    assert taskNode != null;
+                    Map<String, Object> data = flowUtil.infoData(taskNode.getFormId(), taskId, formData);
+                    flowMsgModel.setData(data);
+
+                }
+                flowMsgModel.setMsgConfig(msgConfig);
+                FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
+                setMessageList(messageList, msgModel);
+                messageListAll.addAll(messageList);
+            }
+            //鎶勯��
+            Map<String, List<CirculateEntity>> circulateMap = circulateList.stream().collect(Collectors.groupingBy(CirculateEntity::getNodeCode));
+            for (Map.Entry<String, List<CirculateEntity>> stringListEntry : circulateMap.entrySet()) {
+                String key = stringListEntry.getKey();
+                TemplateNodeEntity taskNode = nodeList.stream().filter(t -> t.getNodeCode().equals(key)).findFirst().orElse(null);
+                List<SentMessageForm> messageList = new ArrayList<>();
+                List<OperatorEntity> taskOperatorList = new ArrayList<>();
+                for (CirculateEntity circulateEntity : circulateMap.get(key)) {
+                    OperatorEntity operatorEntity = JsonUtil.getJsonToBean(circulateEntity, OperatorEntity.class);
+                    operatorEntity.setHandleId(circulateEntity.getUserId());
+                    taskOperatorList.add(operatorEntity);
+                }
+                flowMsgModel.setOpType(OpTypeEnum.CIRCULATE.getType());
+                if (BeanUtil.isNotEmpty(taskNode)) {
+                    assert taskNode != null;
+                    Map<String, Object> data = flowUtil.infoData(taskNode.getFormId(), taskId, formData);
+                    flowMsgModel.setData(data);
+                }
+                flowMsgModel.setMsgConfig(msgConfig);
+                FlowMsgModel msgModel = messageModel(taskOperatorList, flowMsgModel);
+                setMessageList(messageList, msgModel);
+                messageListAll.addAll(messageList);
+
+            }
+            if (Boolean.TRUE.equals(flowMsgModel.getStartHandId())) {
+                List<SentMessageForm> messageList = new ArrayList<>();
+                flowMsgModel.setOpType(OpTypeEnum.LAUNCH_DETAIL.getType());
+                Map<String, Object> data = flowUtil.infoData(startNode.getFormId(), taskId, formData);
+                flowMsgModel.setData(data);
+                OperatorEntity operatorEntity = new OperatorEntity();
+                operatorEntity.setTaskId(task.getId());
+                operatorEntity.setHandleId(task.getCreatorUserId());
+                List<OperatorEntity> meOperatorList = new ArrayList<>();
+                meOperatorList.add(operatorEntity);
+                FlowMsgModel msgModel = messageModel(meOperatorList, flowMsgModel);
+                setMessageList(messageList, msgModel);
+                messageListAll.addAll(messageList);
+            }
+        }
+        for (SentMessageForm sentMessageForm : messageListAll) {
+            sentMessageForm.setFlowName(task.getFullName());
+            sentMessageForm.setUserName(user != null ? user.getRealName() : "");
+        }
+        serviceUtil.sendMessage(messageListAll);
+    }
+
+    private void setMessageList(List<SentMessageForm> messageList, FlowMsgModel flowMsgModel) {
+        HashMap<String, Object> data = new HashMap<>(flowMsgModel.getData());
+        MsgConfig msgConfig = flowMsgModel.getMsgConfig() != null ? flowMsgModel.getMsgConfig() : new MsgConfig();
+        List<String> userList = flowMsgModel.getUserList();
+        UserInfo userInfo = flowMsgModel.getUserInfo();
+        TaskEntity task = flowMsgModel.getTaskEntity();
+        UserEntity createUser = flowMsgModel.getCreateUser();
+        UserEntity delegate = flowMsgModel.getDelegate();
+        if (!userList.isEmpty()) {
+            String templateId = msgConfig.getOn() == 0 ? "0" : msgConfig.getMsgId();
+            boolean sysMessage = msgConfig.getOn() != 0;
+            //瑙f瀽鍙戦�侀厤缃甹son锛岃幏鍙栨秷鎭ā鏉垮弬鏁�
+            List<TemplateJsonModel> templateJson = new ArrayList<>();
+            for (SendConfigJson configJson : msgConfig.getTemplateJson()) {
+                List<TemplateJsonModel> paramJson = configJson.getParamJson();
+                templateJson.addAll(paramJson);
+                List<String> list = ImmutableList.of(FlowConstant.MANDATOR, FlowConstant.MANDATARY, FlowConstant.CREATORUSERNAME, FlowConstant.SENDTIME);
+                for (String field : list) {
+                    TemplateJsonModel jsonModel = new TemplateJsonModel();
+                    jsonModel.setMsgTemplateId(configJson.getId());
+                    jsonModel.setRelationField(field);
+                    jsonModel.setField(field);
+                    jsonModel.setSourceType(FieldEnum.SYSTEM.getCode());
+                    templateJson.add(jsonModel);
+                }
+            }
+            SentMessageForm sentMessageForm = new SentMessageForm();
+            sentMessageForm.setSysMessage(sysMessage);
+            sentMessageForm.setTemplateId(templateId);
+            sentMessageForm.setToUserIds(userList);
+            RecordEntity recordEntity = new RecordEntity();
+            recordEntity.setNodeCode(flowMsgModel.getNodeCode());
+            FlowModel parameterModel = new FlowModel();
+            parameterModel.setFormData(data);
+            parameterModel.setRecordEntity(recordEntity);
+            parameterModel.setTaskEntity(task);
+            Map<String, String> parameterMap = FlowUtil.parameterMap(parameterModel, templateJson, createUser, delegate);
+            data.putAll(parameterMap);
+            sentMessageForm.setUserInfo(userInfo);
+            sentMessageForm.setParameterMap(data);
+            sentMessageForm.setContentMsg(flowMsgModel.getContMsg());
+            sentMessageForm.setTitle(task.getFullName());
+            messageList.add(sentMessageForm);
+        }
+    }
+
+    private FlowMsgModel messageModel(List<OperatorEntity> taskOperatorList, FlowMsgModel flowMsgModel) {
+        FlowMsgModel msgModel = JsonUtil.getJsonToBean(flowMsgModel, FlowMsgModel.class);
+        List<String> userList = new ArrayList<>();
+        TaskEntity task = flowMsgModel.getTaskEntity();
+        Map<String, String> contMsg = new HashMap<>();
+        for (OperatorEntity taskOperator : taskOperatorList) {
+            ContModel contModel = new ContModel();
+            contModel.setFlowId(task.getFlowId());
+            contModel.setOperatorId(taskOperator.getId());
+            contModel.setTaskId(task.getId());
+            contModel.setOpType(flowMsgModel.getOpType());
+            if (StringUtils.equals(flowMsgModel.getOpType(), OpTypeEnum.SIGN.getType())) {
+                if (null == taskOperator.getSignTime() && null == taskOperator.getStartHandleTime() && null == taskOperator.getHandleStatus()) {
+                    contModel.setOpType(OpTypeEnum.SIGN.getType());
+                } else if (null != taskOperator.getSignTime() && null == taskOperator.getStartHandleTime() && null == taskOperator.getHandleStatus()) {
+                    contModel.setOpType(OpTypeEnum.TODO.getType());
+                } else if (null != taskOperator.getSignTime() && null != taskOperator.getStartHandleTime() && null == taskOperator.getHandleStatus()) {
+                    contModel.setOpType(OpTypeEnum.DOING.getType());
+                }
+            }
+            contMsg.put(taskOperator.getHandleId(), JsonUtil.getObjectToString(contModel));
+            userList.add(taskOperator.getHandleId());
+        }
+        msgModel.setUserList(userList);
+        msgModel.setContMsg(contMsg);
+        return msgModel;
+    }
+
+    private List<SentMessageForm> delegationMsg(OperatorEntity operator, FlowMsgModel flowMsgModel) {
+        List<SentMessageForm> messageList = new ArrayList<>();
+        TaskEntity task = flowMsgModel.getTaskEntity();
+        if (task != null) {
+            // 鑾峰彇濮旀墭浜�
+            List<String> userList = flowUtil.getToUser(operator.getHandleId(), task.getFlowId());
+            List<OperatorEntity> operatorList = new ArrayList<>();
+            for (String user : userList) {
+                OperatorEntity delegate = JsonUtil.getJsonToBean(operator, OperatorEntity.class);
+                delegate.setHandleId(user);
+                operatorList.add(delegate);
+                FlowMsgModel msgModel = messageModel(operatorList, flowMsgModel);
+                setMessageList(messageList, msgModel);
+            }
+        }
+        return messageList;
+    }
+
+
+    //--------------------------------------濮旀墭娑堟伅------------------------------------------------------
+    public void delegateMsg(DelegateModel flowDelegate) {
+        SysConfigModel sysConfig = serviceUtil.getSysConfig();
+        // 濮旀墭/浠g悊纭閫氱煡
+        Integer ack = Boolean.TRUE.equals(flowDelegate.getDelegate()) ? sysConfig.getDelegateAck() : sysConfig.getProxyAck();
+        flowDelegate.setAck(ack);
+        List<String> toUserIds = flowDelegate.getToUserIds();
+        if (!toUserIds.isEmpty()) {
+            UserInfo userInfo = flowDelegate.getUserInfo();
+            TaskEntity flowTask = flowDelegate.getFlowTask();
+            Map<String, String> contentMsg = new HashMap<>();
+            Boolean delegate = flowDelegate.getDelegate();
+            boolean approve = flowDelegate.getApprove();
+            if (approve) {
+                SentMessageForm flowMsgModel = new SentMessageForm();
+                flowMsgModel.setToUserIds(toUserIds);
+                flowMsgModel.setUserInfo(flowDelegate.getUserInfo());
+                Map<String, Object> parameterMap = new HashMap<>();
+                parameterMap.put(FlowConstant.MANDATOR, userInfo.getUserName());
+                UserEntity mandatary = StringUtil.isNotEmpty(flowTask.getDelegateUserId()) ? serviceUtil.getUserInfo(flowTask.getDelegateUserId()) : null;
+                parameterMap.put(FlowConstant.MANDATARY, mandatary != null ? mandatary.getRealName() : "");
+                parameterMap.put(FlowConstant.TITLE, Boolean.TRUE.equals(delegate) ? "濮旀墭" : "浠g悊");
+                flowMsgModel.setParameterMap(parameterMap);
+                //1.濮旀墭璁剧疆 2.濮旀墭缁欐垜
+                String s = ObjectUtil.equals(ack, 1) ? "PZXTLG020" : "PZXTLG019";
+                Integer type = flowDelegate.getType();
+                String templateId = FlowNature.END_MSG.equals(type) ? "PZXTLG021" : s;
+                flowMsgModel.setTemplateId(templateId);
+                int i = Boolean.TRUE.equals(delegate) ? 2 : 4;
+                Integer delegateType = FlowNature.END_MSG.equals(type) ? 0 : i;
+                contentMsg.put("type", delegateType + "");
+
+                flowMsgModel.setContentMsg(contentMsg);
+                flowMsgModel.setFlowType(2);
+                flowMsgModel.setType(2);
+                List<SentMessageForm> messageListAll = new ArrayList<>();
+                messageListAll.add(flowMsgModel);
+                serviceUtil.sendDelegateMsg(messageListAll);
+            }
+        }
+    }
+
+
+    // 鎺ュ彛璋冪敤鐨勫弬鏁伴渶杞负瀛楃涓�
+    public Map<String, String> intefaceParameterMap(Map<String, Object> data, List<TemplateJsonModel> templateJsonModelList, RecordEntity recordEntity, TaskEntity task, UserEntity createUser, UserEntity delegate) {
+        Map<String, String> parameterMap = new HashMap<>();
+        for (TemplateJsonModel templateJsonModel : templateJsonModelList) {
+            String fieldId = templateJsonModel.getField();
+            String msgTemplateId = templateJsonModel.getMsgTemplateId();
+            String relationField = templateJsonModel.getRelationField();
+            boolean isList = data.get(relationField) instanceof List;
+            String s = isList ? JsonUtil.getObjectToString(data.get(relationField)) : String.valueOf(data.get(relationField));
+            String dataValue = data.get(relationField) != null ? s : null;
+            String dataFieldValue = relationField;
+            String dataJson = Objects.equals(FieldEnum.FIELD.getCode(), templateJsonModel.getSourceType()) ? dataValue : dataFieldValue;
+            FlowEventModel eventModel = FlowEventModel.builder().data(data).dataJson(dataJson).recordEntity(recordEntity).templateJson(templateJsonModel).taskEntity(task).createUser(createUser).delegate(delegate).build();
+            dataJson = FlowUtil.data(eventModel);
+            parameterMap.put(StringUtil.isNotEmpty(msgTemplateId) ? msgTemplateId : "" + fieldId, dataJson);
+        }
+        return parameterMap;
+    }
+}

--
Gitblit v1.8.0