瀏覽代碼

消息通知

tudc 3 年之前
父節點
當前提交
7980e79830

+ 14 - 9
flowable/src/main/java/com/huyi/flowable/api/FlowProcess.java

@@ -5,6 +5,7 @@ import com.github.pagehelper.PageHelper;
 import com.huyi.flowable.BaseResult;
 import com.huyi.flowable.mapper.MeHistoryMapper;
 import com.huyi.flowable.mapper.TaskMapper;
+import com.huyi.flowable.message.MessageService;
 import com.huyi.flowable.util.HttpClient;
 import net.sf.json.JSONObject;
 import org.flowable.bpmn.constants.BpmnXMLConstants;
@@ -15,7 +16,6 @@ import org.flowable.engine.ProcessEngineConfiguration;
 import org.flowable.engine.history.HistoricActivityInstance;
 import org.flowable.engine.history.HistoricProcessInstance;
 import org.flowable.engine.history.HistoricProcessInstanceQuery;
-import org.flowable.engine.repository.Deployment;
 import org.flowable.engine.runtime.Execution;
 import org.flowable.engine.runtime.ProcessInstance;
 import org.flowable.engine.runtime.ProcessInstanceBuilder;
@@ -23,7 +23,6 @@ import org.flowable.image.ProcessDiagramGenerator;
 import org.flowable.task.api.Task;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -41,6 +40,10 @@ public class FlowProcess extends FlowableConfig {
     protected MeHistoryMapper meHistoryMapper;
     @Autowired
     private TaskMapper taskMapper;
+    @Autowired
+    protected MessageService messageService;
+    @Autowired
+    protected HttpClient httpClient;
 
 
     /**
@@ -64,7 +67,8 @@ public class FlowProcess extends FlowableConfig {
                                 .businessKey(businessKey)                                       // 业务表主键
                                 .start();                                                       // 启动(即创建)流程实例
         Authentication.setAuthenticatedUserId(null); // 这个方法最终使用一个ThreadLocal类型的变量进行存储,也就是与当前的线程绑定,所以流程实例启动完毕之后,需要设置为null,防止多线程的时候出问题。
-
+        // 增加消息通知
+        messageService.addStartFlowMessage(instance);
         return instance;
     }
 
@@ -75,16 +79,19 @@ public class FlowProcess extends FlowableConfig {
      * @param reason            终止原因
      */
     public void deleteProcessInstanceById(String processInstanceId, String reason, HttpServletRequest request,String state){
-        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+        if (reason == null||"null".equals(reason) ) {
+            throw new FlowableException("审批拒绝不能为空!");
+        }
 
+        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
         // 获取菜单id与公司id
         Map<String, Object> param = new HashMap<>();
         param.put("procdefId", processInstance.getProcessDefinitionId());
         List<Map<String, Object>> configList =  meHistoryMapper.queryMeHistory(param);
         try{
-            String menuListStr = HttpClient.doPost(HttpClient.REJECT_APPROVAL, "id=" + processInstance.getBusinessKey()
+            String menuListStr = httpClient.doPost(HttpClient.REJECT_APPROVAL, "id=" + processInstance.getBusinessKey()
                     + "&menuId=" + configList.get(0).get("menuId")
-                    + "&companyId=" + configList.get(0).get("companyId")+"&state="+state, request);
+                    + "&companyId=" + configList.get(0).get("companyId")+"&state="+state + "&reason=" + reason, request);
 
             JSONObject res = JSONObject.fromObject(menuListStr);
             // 请求失败
@@ -94,9 +101,7 @@ public class FlowProcess extends FlowableConfig {
         } catch (Exception e) {
             throw new FlowableException("操作失败!");
         }
-        if (reason == null||"null".equals(reason) ) {
-            throw new FlowableException("审批拒绝不能为空!");
-        }
+
         runtimeService.deleteProcessInstance(processInstanceId, reason);
     }
 

+ 13 - 0
flowable/src/main/java/com/huyi/flowable/api/FlowTask.java

@@ -4,6 +4,7 @@ import com.github.pagehelper.Page;
 import com.github.pagehelper.PageHelper;
 import com.huyi.flowable.BaseResult;
 import com.huyi.flowable.mapper.TaskMapper;
+import com.huyi.flowable.message.MessageService;
 import org.apache.commons.lang3.StringUtils;
 import org.flowable.bpmn.constants.BpmnXMLConstants;
 import org.flowable.bpmn.model.FlowElement;
@@ -18,6 +19,7 @@ import org.flowable.engine.history.HistoricProcessInstanceQuery;
 import org.flowable.engine.impl.cmd.AbstractCustomSqlExecution;
 import org.flowable.engine.repository.ProcessDefinition;
 import org.flowable.engine.runtime.Execution;
+import org.flowable.engine.runtime.ProcessInstance;
 import org.flowable.engine.task.Attachment;
 import org.flowable.idm.api.Group;
 import org.flowable.task.api.Task;
@@ -34,6 +36,8 @@ import java.util.concurrent.atomic.AtomicReference;
 public class FlowTask extends FlowableConfig {
     @Autowired
     private TaskMapper taskMapper;
+    @Autowired
+    protected MessageService messageService;
 
     /**
      * 候选人模式 文件指定方式 -- flowable:candidateUsers="user1,user2"
@@ -162,6 +166,15 @@ public class FlowTask extends FlowableConfig {
             }
             // 完成任务
             taskService.complete(taskId);
+
+            // 消息通知
+            try {
+                ProcessInstance instance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
+                messageService.addStartFlowMessage(instance);
+            } catch (Exception e) {
+                e.printStackTrace();
+                throw new FlowableException("任务处理失败!");
+            }
         } catch (Exception e) {
             e.printStackTrace();
             return new BaseResult("500", "任务处理失败!", null);

+ 8 - 2
flowable/src/main/java/com/huyi/flowable/controller/FlowController.java

@@ -91,6 +91,9 @@ public class FlowController {
     @Autowired
     RuntimeService runtimeService;
 
+    @Autowired
+    HttpClient httpClient;
+
     /**
      * 上传xml文件,生成流程模型
      * @param requestParam      请求参数
@@ -446,7 +449,10 @@ public class FlowController {
         LoginUser loginUser = tokenService.getUser(request);
         String companyId = loginUser.getSysUser().getCompanyId();
         // TODO  暂时不加公司和部门条件
-        res.put("userList", flowUser.getUserList(companyId));
+//        res.put("userList", flowUser.getUserList(companyId));
+        String postResString = httpClient.doPost(HttpClient.GET_USERINFO_BY_COMPANYID, "companyId=" + companyId, request);
+        Map<String, Object> map = JSONObject.fromObject(postResString);
+        res.put("userList", map.get("data"));
         res.put("groupList", flowUser.getGroupList(companyId));
         return res;
     }
@@ -746,7 +752,7 @@ public class FlowController {
         sb.append(formData);
         sb.append("&type=");
         sb.append(type);
-        String result = HttpClient.doPost(callBackUrl, sb.toString(), request);
+        String result = httpClient.doPost(callBackUrl, sb.toString(), request);
         JSONObject  jsonObject = JSONObject.fromObject(result);
         if(!"200".equals(String.valueOf(jsonObject.get("code")))){
             throw new Exception(String.valueOf(jsonObject.get("msg")));

+ 4 - 1
flowable/src/main/java/com/huyi/flowable/controller/ServerController.java

@@ -61,6 +61,9 @@ public class ServerController {
     @Autowired
     TokenService tokenService;
 
+    @Autowired
+    HttpClient httpClient;
+
     /**
      * 获取表字段信息
      * @param tableName 表名
@@ -124,7 +127,7 @@ public class ServerController {
     public List getMenuList(HttpServletRequest request,@RequestParam("pageNum") int pageNum,
                             @RequestParam("pageSize") int pageSize) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
         // 请求获取参数
-        String menuListStr = HttpClient.doPost(HttpClient.GET_MENU, "pageNum=" + pageNum
+        String menuListStr = httpClient.doPost(HttpClient.GET_MENU, "pageNum=" + pageNum
                 + "&pageSize=" + pageSize, request);
         menuListStr = menuListStr.replace(":null", ":\"\"");
         Map dataMap = (Map)JSONObject.fromObject(menuListStr);

+ 3 - 1
flowable/src/main/java/com/huyi/flowable/listener/ExecutionCallListener.java

@@ -23,6 +23,8 @@ public class ExecutionCallListener implements ExecutionListener {
     protected RuntimeService runtimeService;
     @Autowired
     protected MeHistoryMapper meHistoryMapper;
+    @Autowired
+    protected HttpClient httpClient;
 
     private static ExecutionCallListener myListener;
     @PostConstruct
@@ -49,7 +51,7 @@ public class ExecutionCallListener implements ExecutionListener {
         param.put("procdefId", processDefinitionId);
         List<Map<String, Object>> configList =  myListener.meHistoryMapper.queryMeHistory(param);
         try{
-            String menuListStr = HttpClient.doPost(HttpClient.AGREE_APPROVAL, "id=" + businessKey
+            String menuListStr = httpClient.doPost(HttpClient.AGREE_APPROVAL, "id=" + businessKey
                     + "&menuId=" + configList.get(0).get("menuId")
                     + "&companyId=" + configList.get(0).get("companyId"), null);
 

+ 108 - 0
flowable/src/main/java/com/huyi/flowable/message/MessageService.java

@@ -0,0 +1,108 @@
+package com.huyi.flowable.message;
+
+import com.huyi.flowable.mapper.MeHistoryMapper;
+import com.huyi.flowable.server.mapper.MessageMapper;
+import net.sf.json.JSONObject;
+import org.apache.commons.lang3.StringUtils;
+import org.flowable.engine.IdentityService;
+import org.flowable.engine.TaskService;
+import org.flowable.engine.runtime.ProcessInstance;
+import org.flowable.identitylink.api.IdentityLink;
+import org.flowable.identitylink.api.IdentityLinkInfo;
+import org.flowable.idm.api.User;
+import org.flowable.task.api.Task;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+@Component
+public class MessageService {
+    @Autowired
+    protected TaskService taskService;
+    @Autowired
+    protected MessageMapper messageMapper;
+    @Autowired
+    protected IdentityService identityService;
+    @Autowired
+    protected MeHistoryMapper meHistoryMapper;
+
+    //TODO 不同项目不适用
+    public void addStartFlowMessage(ProcessInstance instance){
+        if (instance == null) {
+            return;
+        }
+        Map<String, Object> paras = instance.getProcessVariables();
+        // 获取公司ID
+        Map<String, Object> map = new HashMap<>();
+        map.put("procdefId", instance.getProcessDefinitionId());
+        List<Map<String, Object>> historyList = meHistoryMapper.queryMeHistory(map);
+        String companyId = historyList.get(0).get("companyId").toString();
+        // 1000000006 为融资审批,其他为融信审批
+        String menuId = historyList.get(0).get("menuId").toString();
+        String businessKey = instance.getBusinessKey();
+
+        Map<String, Object> param = new HashMap<>();
+        param.put("id", UUID.randomUUID().toString().replaceAll("-", ""));
+        param.put("companyId", companyId);
+        param.put("tableId", businessKey);
+
+        // 融资审批
+        if ("1000000006".equals(menuId)) {
+            param.put("workType", "03");
+        // 融信审批
+        } else {
+//            Map<String, Object> financeInf = messageMapper.queryFinanceInf(businessKey);
+            Map<String, String> userInf = messageMapper.queryUser(String.valueOf(paras.get("createBy")));
+            param.put("workType", "00");
+            param.put("title", "【内部审批】融信【"+paras.get("zfiNumber")+"】资料待审批,审批发起人【"+userInf.get("nickName")+"】");
+        }
+        messageMapper.insertMessage(param);
+
+        try {
+            List<Task> taskList = this.taskService.createTaskQuery().processInstanceId(instance.getId()).list();
+            for (Task task : taskList) {
+                Map<String, String> messageData = new HashMap<>();
+                messageData.put("id", UUID.randomUUID().toString().replaceAll("-", ""));
+
+                List<Long> userIdList = new ArrayList<>();
+                // 审批人
+                String assignee = task.getAssignee();
+                // 无审批人代表为多人审批
+                if (StringUtils.isEmpty(assignee)) {
+                    List<IdentityLink> identityLinkList = taskService.getIdentityLinksForTask(task.getId());
+                    for (Object o : identityLinkList) {
+                        IdentityLinkInfo identityLinkInfo = (IdentityLinkInfo)o;
+                        String type = identityLinkInfo.getType();
+                        if ("candidate".equals(type)) {
+                            String userId = identityLinkInfo.getUserId();
+                            String groupId = identityLinkInfo.getGroupId();
+                            // 指定用户审批
+                            if (userId != null) {
+                                userIdList.add(Long.parseLong(userId));
+                            // 用户分组审批
+                            } else {
+                                List<User> userList = identityService.createUserQuery().memberOfGroup(groupId).list();
+                                for (User user : userList) {
+                                    userIdList.add(Long.parseLong(user.getId()));
+                                }
+                            }
+                        }
+                    }
+                // 指定人员审批
+                } else {
+                    userIdList.add(Long.parseLong(assignee));
+                }
+                if (userIdList.size() > 0) {
+                    Map userMap = new HashMap();
+                    userMap.put("noticeId", param.get("id"));
+                    userMap.put("userList", userIdList);
+                    messageMapper.insertNoticeUserRel(userMap);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.out.println("消息增加失败");
+        }
+    }
+}

+ 12 - 0
flowable/src/main/java/com/huyi/flowable/server/mapper/ConfigMapper.java

@@ -0,0 +1,12 @@
+package com.huyi.flowable.server.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Mapper
+@Component
+public interface ConfigMapper {
+    Map<String, String> querySysConfig(String config_key);
+}

+ 7 - 0
flowable/src/main/java/com/huyi/flowable/server/mapper/ConfigMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.huyi.flowable.server.mapper.ConfigMapper">
+    <select id = "querySysConfig" resultType="java.util.Map" parameterType="java.lang.String">
+        select config_name 'name', config_value 'value', config_key 'key' from sys_config where config_key = #{config_key}
+    </select>
+</mapper>

+ 15 - 0
flowable/src/main/java/com/huyi/flowable/server/mapper/MessageMapper.java

@@ -0,0 +1,15 @@
+package com.huyi.flowable.server.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Mapper
+@Component
+public interface MessageMapper {
+    int insertMessage(Map d);
+    int insertNoticeUserRel(Map d);
+    Map<String, String> queryUser(String userId);
+    Map<String, Object> queryFinanceInf(String id);
+}

+ 19 - 0
flowable/src/main/java/com/huyi/flowable/server/mapper/MessageMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.huyi.flowable.server.mapper.MessageMapper">
+    <insert id="insertMessage">
+        insert into sys_notice values (#{id}, #{companyId}, #{tableId}, #{title}, '00', null, #{workType}, '0', '0', null, null, null, '审批自动生成', now());
+    </insert>
+    <insert id="insertNoticeUserRel">
+        insert into sys_notice_user_rel values
+        <foreach item="item" collection="userList" separator=",">
+            (#{noticeId}, #{item.id}, '0')
+        </foreach>
+    </insert>
+    <select id = "queryUser" resultType="java.util.Map" parameterType="java.lang.String">
+        select nick_name nickName from sys_user where user_id = #{id}
+    </select>
+    <select id = "queryFinanceInf" resultType="java.util.Map" parameterType="java.lang.String">
+        select zfi_number 'number', create_by 'createBy' from zc_finance_inf where zfi_id = #{id}
+    </select>
+</mapper>

+ 14 - 4
flowable/src/main/java/com/huyi/flowable/util/HttpClient.java

@@ -1,6 +1,9 @@
 package com.huyi.flowable.util;
 
+import com.huyi.flowable.server.mapper.ConfigMapper;
 import org.flowable.common.engine.impl.identity.Authentication;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
@@ -8,16 +11,22 @@ import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
 
+@Component
 public class HttpClient {
-    public static final String URL_ = "http://192.168.0.127:8081";
+//    public static final String URL_ = "http://192.168.0.127:8081";
+    // 审批配置查询接口
     public static final String GET_MENU = "/sc-service/flowable/list";
-
     // 审批通过接口
     public static final String AGREE_APPROVAL = "/sc-service/flowable/agreeApproval";
     // 审批拒绝接口
     public static final String REJECT_APPROVAL = "/sc-service/flowable/rejectApproval";
+    // 审批拒绝接口
+    public static final String GET_USERINFO_BY_COMPANYID = "/sc-service/flowable/getUserInfoByCompanyId";
+
+    @Autowired
+    ConfigMapper configMapper;
 
-    public static String doPost(String httpUrl, String param, HttpServletRequest request) {
+    public String doPost(String httpUrl, String param, HttpServletRequest request) {
         HttpURLConnection connection = null;
         InputStream is = null;
         OutputStream os = null;
@@ -28,7 +37,8 @@ public class HttpClient {
             if (httpUrl.startsWith("http") || httpUrl.startsWith("HTTP")) {
                 url = new URL(httpUrl);
             } else {
-                url = new URL(URL_ + httpUrl);
+                String flowable_post_url = configMapper.querySysConfig("flowable_post_url").get("value");
+                url = new URL(flowable_post_url + httpUrl);
             }
 
             // 通过远程url连接对象打开连接