Parcourir la source

自定义流程接口-流程加入短信通知

wangliang il y a 3 ans
Parent
commit
bd3c52a3d6

+ 59 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/custom/listener/ProcessEventListener.java

@@ -1,25 +1,36 @@
 package com.qmth.distributed.print.business.activiti.custom.listener;
 
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.TFFlowLog;
+import com.qmth.distributed.print.business.enums.CustomFlowMultipleUserApproveTypeEnum;
+import com.qmth.distributed.print.business.enums.MessageEnum;
 import com.qmth.distributed.print.business.enums.TFCustomTypeEnum;
+import com.qmth.distributed.print.business.service.BasicMessageService;
 import com.qmth.distributed.print.business.service.ExamTaskService;
 import com.qmth.distributed.print.business.service.PrintCommonService;
+import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.FlowApproveOperationEnum;
 import com.qmth.teachcloud.common.service.SysUserService;
+import com.qmth.teachcloud.common.util.JacksonUtil;
 import org.activiti.engine.HistoryService;
+import org.activiti.engine.TaskService;
 import org.activiti.engine.delegate.event.ActivitiEvent;
 import org.activiti.engine.delegate.event.ActivitiEventListener;
 import org.activiti.engine.history.HistoricVariableInstance;
+import org.activiti.engine.task.Task;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
@@ -45,6 +56,7 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
             case PROCESS_COMPLETED:
                 // 流程结束
                 log.info("流程结束_PROCESS_COMPLETED:ProcessInstanceId:{},ExecutionId:{},ProcessDefinitionId:{}", event.getProcessInstanceId(), event.getExecutionId(), event.getProcessDefinitionId());
+                TaskService taskService = SpringContextHolder.getBean(TaskService.class);
                 HistoryService historyService = SpringContextHolder.getBean(HistoryService.class);
                 SysUserService sysUserService = SpringContextHolder.getBean(SysUserService.class);
                 ExamTaskService examTaskService = SpringContextHolder.getBean(ExamTaskService.class);
@@ -164,6 +176,53 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
             case TASK_COMPLETED:
                 // 任务被完成了。它会在ENTITY_DELETE事件之前触发。当任务是流程一部分时,事件会在流程继续运行之前, 后续事件将是ACTIVITY_COMPLETE,对应着完成任务的节点。
                 log.info("流程任务完成_TASK_COMPLETED:ProcessInstanceId:{},ExecutionId:{},ProcessDefinitionId:{}", event.getProcessInstanceId(), event.getExecutionId(), event.getProcessDefinitionId());
+                taskService = SpringContextHolder.getBean(TaskService.class);
+                sysUserService = SpringContextHolder.getBean(SysUserService.class);
+                examTaskService = SpringContextHolder.getBean(ExamTaskService.class);
+                BasicMessageService basicMessageService = SpringContextHolder.getBean(BasicMessageService.class);
+
+                Task task = taskService.createTaskQuery().executionId(event.getExecutionId()).singleResult();
+                if (Objects.nonNull(task)) {
+                    TFFlowLog tfFlowLog = (TFFlowLog) taskService.getVariable(task.getId(), SystemConstant.APPROVE_TF_FLOW_LOG);
+                    Object o = null;
+                    if (Objects.nonNull(tfFlowLog.getObjectTable()) && Objects.equals(tfFlowLog.getObjectTable(), TFCustomTypeEnum.ELECTRON_FLOW.getTable())) {
+                        o = examTaskService.getById(tfFlowLog.getObjectId());
+                    }
+                    if (Objects.nonNull(tfFlowLog) && (tfFlowLog.getApproveOperation() != FlowApproveOperationEnum.SUBMIT
+                            && tfFlowLog.getApproveOperation() != FlowApproveOperationEnum.END
+                            && tfFlowLog.getApproveOperation() != FlowApproveOperationEnum.FINISH)) {
+                        if (Objects.nonNull(tfFlowLog.getPendApproveId())) {
+                            String[] strs = tfFlowLog.getPendApproveId().split(",");
+                            List<Long> userIds = new ArrayList<>();
+                            for (String s : strs) {
+                                userIds.add(SystemConstant.convertIdToLong(s.trim()));
+                            }
+                            List<SysUser> sysUsers = sysUserService.listByIds(userIds);
+                            List<ApproveUserResult> sysUserList = new Gson().fromJson(JacksonUtil.parseJson(sysUsers), new TypeToken<List<ApproveUserResult>>() {
+                            }.getType());
+
+                            List<ApproveUserResult> nextApproverPeopleList = new ArrayList<>();
+                            nextApproverPeopleList.addAll(sysUserList);
+                            if (Objects.nonNull(tfFlowLog.getApproveUserApproveType()) && tfFlowLog.getApproveUserApproveType() == CustomFlowMultipleUserApproveTypeEnum.ORDER) {
+                                nextApproverPeopleList.clear();
+                                nextApproverPeopleList.add(sysUserList.get(0));
+                            }
+
+                            if (Objects.nonNull(nextApproverPeopleList) && (tfFlowLog.getApproveOperation() == FlowApproveOperationEnum.APPROVE
+                                    || tfFlowLog.getApproveOperation() == FlowApproveOperationEnum.EXCHANGE)) {
+                                if (Objects.nonNull(o) && o instanceof ExamTask) {
+                                    basicMessageService.sendNoticeTaskAuditFlow((ExamTask) o, nextApproverPeopleList, MessageEnum.NOTICE_OF_AUDIT_CREATED);
+                                }
+                            } else if (Objects.nonNull(nextApproverPeopleList) && (tfFlowLog.getApproveOperation() == FlowApproveOperationEnum.REJECT
+                                    || tfFlowLog.getApproveOperation() == FlowApproveOperationEnum.CANCEL)) {
+                                if (Objects.nonNull(o) && o instanceof ExamTask) {
+                                    basicMessageService.sendNoticeTaskAuditFlow((ExamTask) o, nextApproverPeopleList, MessageEnum.NOTICE_OF_AUDIT_REJECT);
+                                }
+                            }
+                        }
+                    }
+                }
+
                 break;
 //            case TIMER_FIRED:
 //                // 触发了定时器。job包含在事件中。

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/TFCustomFlowController.java

@@ -197,7 +197,7 @@ public class TFCustomFlowController {
                                   @ApiParam(value = "页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                   @ApiParam(value = "数量", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(tfFlowApproveService.findApproveList(new Page<>(pageNumber, pageSize), status, createUserName, SystemConstant.convertIdToLong(teachingRoomId), startTime, endTime, pendApproveUserName, sysUser.getSchoolId(), sysUser.getOrgId()));
+        return ResultUtil.ok(tfFlowApproveService.findApproveList(new Page<>(pageNumber, pageSize), status, createUserName, SystemConstant.convertIdToLong(teachingRoomId), startTime, endTime, pendApproveUserName, sysUser.getSchoolId(), null));
     }
 
     @ApiOperation(value = "流程列表")

+ 0 - 76
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowApproveVariableEnum.java

@@ -1,76 +0,0 @@
-//package com.qmth.teachcloud.common.enums;
-//
-//import java.util.Objects;
-//
-///**
-// * @Description: 流程审批变量 enum
-// * @Param:
-// * @return:
-// * @Author: wangliang
-// * @Date: 2021/8/2
-// */
-//public enum FlowApproveVariableEnum {
-//
-//    PRIMARY_APPROVE("一级审核通过", "1"),
-//
-//    PRIMARY_REJECT("一级审核驳回", "0"),
-//
-//    SECOND_APPROVE("二级审核通过", "2"),
-//
-//    SECOND_REJECT_ONE("二级审核驳回至第一节点", "0"),
-//
-//    SECOND_REJECT_TWO("二级审核驳回至第二节点", "1"),
-//
-//    THREE_APPROVE("三级审核通过", "3"),
-//
-//    FOUR_APPROVE("四级审核通过", "1"),
-//
-//    FOUR_REJECT("四级审核驳回", "0");
-//
-//    private String title;
-//
-//    private String id;
-//
-//    private FlowApproveVariableEnum(String title, String id) {
-//        this.title = title;
-//        this.id = id;
-//    }
-//
-//    public String getTitle() {
-//        return title;
-//    }
-//
-//    public String getId() {
-//        return id;
-//    }
-//
-//    /**
-//     * 状态转换 toName
-//     *
-//     * @param title
-//     * @return
-//     */
-//    public static String convertToName(String title) {
-//        for (FlowApproveVariableEnum e : FlowApproveVariableEnum.values()) {
-//            if (Objects.equals(title, e.getTitle())) {
-//                return e.name();
-//            }
-//        }
-//        return null;
-//    }
-//
-//    /**
-//     * 状态转换 toInstance
-//     *
-//     * @param id
-//     * @return
-//     */
-//    public static FlowApproveVariableEnum convertToInstance(String id) {
-//        for (FlowApproveVariableEnum e : FlowApproveVariableEnum.values()) {
-//            if (Objects.equals(id, e.getTitle())) {
-//                return e;
-//            }
-//        }
-//        return null;
-//    }
-//}

+ 7 - 1
teachcloud-common/src/main/resources/mapper/SysUserMapper.xml

@@ -185,7 +185,13 @@
     </select>
 
     <select id="findByIds" resultType="com.qmth.teachcloud.common.bean.params.ApproveUserResult">
-        select group_concat(su.real_name,'(',so.name,')' order by field(su.id,#{ids})) as pendApproveUsers from sys_user su left join sys_org so on so.id = su.org_id
+        select group_concat(su.real_name,'(',so.name,')' order by field(su.id,
+            <if test="ids != null">
+                <foreach collection="ids" item="item" index="index" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+            )) as pendApproveUsers from sys_user su left join sys_org so on so.id = su.org_id
         <where>
             <if test="ids != null">
                 AND su.id IN