|
@@ -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);
|
|
|
+
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+}
|