Procházet zdrojové kódy

增加消息发送

fenghaifu před 2 roky
rodič
revize
4c85c9b7ab

+ 0 - 22
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/activiti/listener/ListenerAuto.java

@@ -1,22 +0,0 @@
-package org.jeecg.modules.activiti.listener;
-
-import org.activiti.engine.delegate.DelegateExecution;
-import org.activiti.engine.delegate.JavaDelegate;
-
-/**
- * @author fenghaifu
- * @version V1.0
- * @Copyright: 上海萃颠信息科技有限公司. All rights reserved.
- * @Title:ListenerAuto
- * @projectName jeecg-boot-parent
- * @Description:自动执行监听、什么都不做
- * @date: 2022-10-26 22:02
- * @updatehistory: 2022-10-26 22:02 新增
- */
-public class ListenerAuto implements JavaDelegate {
-	@Override
-	public void execute(DelegateExecution delegateExecution){
-		System.out.println("-------------------------->11111");
-
-	}
-}

+ 131 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/activiti/listener/ListenerSendMessage.java

@@ -0,0 +1,131 @@
+package org.jeecg.modules.activiti.listener;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.activiti.bpmn.model.BpmnModel;
+import org.activiti.bpmn.model.FlowNode;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.RepositoryService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.delegate.*;
+import org.activiti.engine.history.HistoricActivityInstance;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.history.HistoricTaskInstance;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.api.ISysBaseAPI;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.activiti.entity.ActivitiConstant;
+import org.jeecg.modules.activiti.service.IActBusinessService;
+import org.jeecg.modules.activiti.service.Impl.ActBusinessServiceImpl;
+import org.jeecg.modules.message.entity.SysMessageTemplate;
+import org.jeecg.modules.message.service.ISysMessageTemplateService;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.jeecg.common.util.oConvertUtils;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @author fenghaifu
+ * @version V1.0
+ * @Copyright: 上海萃颠信息科技有限公司. All rights reserved.
+ * @Title:ListenerSendMessage
+ * @projectName jeecg-boot-parent
+ * @Description:流程节点消息通知监听
+ * @date: 2022-10-28 13:38
+ * @updatehistory: 2022-10-28 13:38 新增
+ */
+@Component
+public class ListenerSendMessage implements TaskListener, JavaDelegate {
+	private Expression json;
+	@Autowired
+	ISysMessageTemplateService sysMessageTemplateService;
+	@Autowired
+	private RuntimeService runtimeService;
+	@Autowired
+	private HistoryService historyService;
+	@Autowired
+	private RepositoryService repositoryService;
+	@Autowired
+	private ISysUserService sysUserService;
+	@Autowired
+	private ISysBaseAPI sysBaseAPI;
+	@Autowired
+	private ActBusinessServiceImpl actBusinessService;
+
+	private static final String MSG_PARAM_TASK_NAME = "${taskName}";   // 消息模板替换的任务名称
+	private static final String MSG_PARAM_APPLY_USER = "${applyUser}";   // 消息模板替换的申请人
+	private static final String MSG_PARAM_TASK_URL = "${taskUrl}";      // 消息模板替换的任务表单路径
+
+	@Override
+	public void notify(DelegateTask delegateTask){
+		System.out.println("-------------1");
+	}
+
+	@Override
+	public void execute(DelegateExecution delegateExecution){
+		String jsonString = json.getExpressionText();
+		JSONObject jsonObject = JSON.parseObject(jsonString);
+		String msgTemplateId = oConvertUtils.getString(jsonObject.get("msg_template"));
+		String sendUserId = oConvertUtils.getString(jsonObject.get("user"));
+		if (oConvertUtils.isNotEmpty(msgTemplateId) && oConvertUtils.isNotEmpty(sendUserId)){
+			QueryWrapper<SysMessageTemplate> queryWrapper = new QueryWrapper<>();
+			queryWrapper.eq("TEMPLATE_CODE", "PROCESS_COMPLETE_MESSAGE");
+			List<SysMessageTemplate> sysMessageTemplateList = sysMessageTemplateService.list(queryWrapper);
+			if (oConvertUtils.listIsNotEmpty(sysMessageTemplateList)){
+				SysMessageTemplate sysMessageTemplate = sysMessageTemplateList.get(0);
+				ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(delegateExecution.getProcessInstanceId()).singleResult();
+				String taskName = pi.getProcessDefinitionKey();
+				HashMap<String,String> userAndTask = getFirstUserAndTaskId(delegateExecution.getProcessInstanceId());
+				String taskId = oConvertUtils.getString(userAndTask.get("taskId"));
+				String applyUser = oConvertUtils.getString(userAndTask.get("user"));
+				String msgTitle = sysMessageTemplate.getTemplateName().
+						replace(MSG_PARAM_TASK_NAME, taskName).
+						replace(MSG_PARAM_APPLY_USER, applyUser);
+				String msgBody = sysMessageTemplate.getTemplateContent().
+						replace(MSG_PARAM_TASK_NAME, taskName).
+						replace(MSG_PARAM_APPLY_USER, applyUser);
+				String[] userList = sendUserId.split(",");
+				LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+				HashMap<String,Object> taskParam = new HashMap<>();
+				taskParam.put("isUrl", "1");
+				taskParam.put("taskId", taskId);
+				for (String userId : userList){
+					sysBaseAPI.sendSysAnnouncement(loginUser,applyUser,userId,msgTitle,msgBody, CommonConstant.MSG_CATEGORY_2,taskParam);
+
+				}
+
+
+			}
+		}
+
+	}
+
+	protected HashMap<String,String> getFirstUserAndTaskId(String processInstId) {
+		HashMap<String,String> ret = new HashMap<>();
+		List<HistoricTaskInstance> taskList = historyService.createHistoricTaskInstanceQuery()
+				.processInstanceId(processInstId).orderByHistoricActivityInstanceId().asc().list();
+		if (oConvertUtils.listIsNotEmpty(taskList)){
+			HistoricTaskInstance historicTaskInstance = taskList.get(0);
+			// 获取实际审批用户id
+			String userId = actBusinessService.findUserIdByTypeAndTaskId(ActivitiConstant.EXECUTOR_TYPE, historicTaskInstance.getId());
+
+			ret.put("taskId", historicTaskInstance.getId());
+			SysUser sysUser = sysUserService.getUserByName(userId);
+			if (sysUser != null){
+				ret.put("user", sysUser.getRealname());
+			}
+
+		}
+		return ret;
+	}
+}