Browse Source

Merge branch 'dev_v2.2.0' of http://git.qmth.com.cn/wangliang/distributed-print-service into dev_v2.2.0

xiaof 3 years ago
parent
commit
2dcef41849
21 changed files with 552 additions and 118 deletions
  1. 25 15
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/DirectorApproveListener.java
  2. 27 18
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/PresidentApproveListener.java
  3. 17 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamTaskApplyParam.java
  4. 77 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/FlowTaskApproveParam.java
  5. 17 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskApplyTemp.java
  6. 19 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskDetail.java
  7. 14 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TFFlowApprove.java
  8. 42 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/FlowModelEnum.java
  9. 9 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ActivitiService.java
  10. 12 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java
  11. 110 30
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java
  12. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java
  13. 27 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  14. 24 9
      distributed-print/src/main/java/com/qmth/distributed/print/api/TFFlowController.java
  15. 5 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  16. 2 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysOrgMapper.java
  17. 7 4
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysOrgService.java
  18. 23 3
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java
  19. 11 9
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java
  20. 79 24
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java
  21. 4 1
      teachcloud-common/src/main/resources/mapper/SysOrgMapper.xml

+ 25 - 15
distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/DirectorApproveListener.java

@@ -1,6 +1,8 @@
 package com.qmth.distributed.print.business.activiti;
 package com.qmth.distributed.print.business.activiti;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.reflect.TypeToken;
+import com.google.gson.Gson;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.TFFlowApprove;
 import com.qmth.distributed.print.business.entity.TFFlowApprove;
 import com.qmth.distributed.print.business.enums.MessageEnum;
 import com.qmth.distributed.print.business.enums.MessageEnum;
@@ -9,18 +11,19 @@ import com.qmth.distributed.print.business.service.ExamTaskService;
 import com.qmth.distributed.print.business.service.TFFlowApproveService;
 import com.qmth.distributed.print.business.service.TFFlowApproveService;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
 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.FlowGdykdxApproveSetupEnum;
 import com.qmth.teachcloud.common.enums.FlowGdykdxApproveSetupEnum;
 import com.qmth.teachcloud.common.enums.FlowStatusEnum;
 import com.qmth.teachcloud.common.enums.FlowStatusEnum;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.service.SysUserService;
+import com.qmth.teachcloud.common.util.JacksonUtil;
 import org.activiti.engine.delegate.DelegateTask;
 import org.activiti.engine.delegate.DelegateTask;
 import org.activiti.engine.delegate.TaskListener;
 import org.activiti.engine.delegate.TaskListener;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 
 
-import javax.annotation.Resource;
 import java.util.List;
 import java.util.List;
-import java.util.Set;
+import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -40,24 +43,31 @@ public class DirectorApproveListener implements TaskListener {
      */
      */
     @Override
     @Override
     public void notify(DelegateTask delegateTask) {
     public void notify(DelegateTask delegateTask) {
-        ExamTaskService examTaskService = SpringContextHolder.getBean(ExamTaskService.class);
         SysUserService sysUserService = SpringContextHolder.getBean(SysUserService.class);
         SysUserService sysUserService = SpringContextHolder.getBean(SysUserService.class);
+        ExamTaskService examTaskService = SpringContextHolder.getBean(ExamTaskService.class);
         BasicMessageService basicMessageService = SpringContextHolder.getBean(BasicMessageService.class);
         BasicMessageService basicMessageService = SpringContextHolder.getBean(BasicMessageService.class);
         TFFlowApproveService tfFlowApproveService = SpringContextHolder.getBean(TFFlowApproveService.class);
         TFFlowApproveService tfFlowApproveService = SpringContextHolder.getBean(TFFlowApproveService.class);
-
+        List<Long> approveUserIds = (List<Long>) delegateTask.getVariable(SystemConstant.APPROVE_DIRECTOR_USER_IDS);
         String flowId = delegateTask.getProcessInstanceId();
         String flowId = delegateTask.getProcessInstanceId();
-        QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
-        examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, Long.parseLong(flowId));
-        ExamTask examTask = examTaskService.getOne(examTaskQueryWrapper);
-
-        List<ApproveUserResult> sysUserList = sysUserService.findByDirectorApprove(examTask.getCourseCode(), null);
-        List<String> ids = sysUserList.stream().map(s -> String.valueOf(s.getId())).collect(Collectors.toList());
-        //添加或签的人员,一人通过即可进入下一环节
-        delegateTask.addCandidateUsers(ids);
-
+        ExamTask examTask = examTaskService.findByFlowId(Long.parseLong(flowId));
+        List<ApproveUserResult> sysUserList = null;
+        if (Objects.nonNull(approveUserIds) && approveUserIds.size() > 0) {
+            List<SysUser> sysUsers = sysUserService.listByIds(approveUserIds);
+            Gson gson = new Gson();
+            sysUserList = gson.fromJson(JacksonUtil.parseJson(sysUsers), new TypeToken<List<ApproveUserResult>>() {
+            }.getType());
+            delegateTask.addCandidateUsers(approveUserIds.stream().map(x -> String.valueOf(x)).collect(Collectors.toList()));
+        } else {
+            sysUserList = sysUserService.findByDirectorApprove(examTask.getCourseCode(), null);
+            if (Objects.nonNull(sysUserList) && sysUserList.size() > 0) {
+                List<String> ids = sysUserList.stream().map(s -> String.valueOf(s.getId())).collect(Collectors.toList());
+                //添加或签的人员,一人通过即可进入下一环节
+                delegateTask.addCandidateUsers(ids);
+            }
+        }
         // 发送审核短信
         // 发送审核短信
         TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(Long.valueOf(flowId));
         TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(Long.valueOf(flowId));
-        if(tfFlowApprove.getStatus().equals(FlowStatusEnum.AUDITING)
+        if (tfFlowApprove.getStatus().equals(FlowStatusEnum.AUDITING)
                 && tfFlowApprove.getSetup().equals(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup())) {
                 && tfFlowApprove.getSetup().equals(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup())) {
             basicMessageService.sendNoticeTaskAuditFlow(examTask, sysUserList, MessageEnum.NOTICE_OF_AUDIT_CREATED);
             basicMessageService.sendNoticeTaskAuditFlow(examTask, sysUserList, MessageEnum.NOTICE_OF_AUDIT_CREATED);
         }
         }

+ 27 - 18
distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/PresidentApproveListener.java

@@ -1,6 +1,8 @@
 package com.qmth.distributed.print.business.activiti;
 package com.qmth.distributed.print.business.activiti;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.reflect.TypeToken;
+import com.google.gson.Gson;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.TFFlowApprove;
 import com.qmth.distributed.print.business.entity.TFFlowApprove;
 import com.qmth.distributed.print.business.enums.MessageEnum;
 import com.qmth.distributed.print.business.enums.MessageEnum;
@@ -9,19 +11,19 @@ import com.qmth.distributed.print.business.service.ExamTaskService;
 import com.qmth.distributed.print.business.service.TFFlowApproveService;
 import com.qmth.distributed.print.business.service.TFFlowApproveService;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
 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.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.FlowGdykdxApproveSetupEnum;
 import com.qmth.teachcloud.common.enums.FlowGdykdxApproveSetupEnum;
 import com.qmth.teachcloud.common.enums.FlowStatusEnum;
 import com.qmth.teachcloud.common.enums.FlowStatusEnum;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.service.SysUserService;
+import com.qmth.teachcloud.common.util.JacksonUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.activiti.engine.delegate.DelegateTask;
 import org.activiti.engine.delegate.DelegateTask;
 import org.activiti.engine.delegate.TaskListener;
 import org.activiti.engine.delegate.TaskListener;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 
 
-import javax.annotation.Resource;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 import java.util.Objects;
 import java.util.Objects;
@@ -44,28 +46,35 @@ public class PresidentApproveListener implements TaskListener {
      */
      */
     @Override
     @Override
     public void notify(DelegateTask delegateTask) {
     public void notify(DelegateTask delegateTask) {
-        ExamTaskService examTaskService = SpringContextHolder.getBean(ExamTaskService.class);
         SysUserService sysUserService = SpringContextHolder.getBean(SysUserService.class);
         SysUserService sysUserService = SpringContextHolder.getBean(SysUserService.class);
+        ExamTaskService examTaskService = SpringContextHolder.getBean(ExamTaskService.class);
         BasicMessageService basicMessageService = SpringContextHolder.getBean(BasicMessageService.class);
         BasicMessageService basicMessageService = SpringContextHolder.getBean(BasicMessageService.class);
         TFFlowApproveService tfFlowApproveService = SpringContextHolder.getBean(TFFlowApproveService.class);
         TFFlowApproveService tfFlowApproveService = SpringContextHolder.getBean(TFFlowApproveService.class);
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        if (Objects.isNull(sysUser.getOrgId())) {
-            throw ExceptionResultEnum.ERROR.exception("审批人机构为空");
-        }
-
+        List<Long> approveUserIds = (List<Long>) delegateTask.getVariable(SystemConstant.APPROVE_PRESIDENT_USER_IDS);
         String flowId = delegateTask.getProcessInstanceId();
         String flowId = delegateTask.getProcessInstanceId();
-        QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
-        examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, Long.parseLong(flowId));
-        ExamTask examTask = examTaskService.getOne(examTaskQueryWrapper);
-
-        List<ApproveUserResult> sysUserList = sysUserService.findByPresidentApprove(Arrays.asList(sysUser.getOrgId()), null);
-        List<String> ids = sysUserList.stream().map(s -> String.valueOf(s.getId())).collect(Collectors.toList());
-        //添加或签的人员,一人通过即可进入下一环节
-        delegateTask.addCandidateUsers(ids);
-
+        ExamTask examTask = examTaskService.findByFlowId(Long.parseLong(flowId));
+        List<ApproveUserResult> sysUserList = null;
+        if (Objects.nonNull(approveUserIds) && approveUserIds.size() > 0) {
+            List<SysUser> sysUsers = sysUserService.listByIds(approveUserIds);
+            Gson gson = new Gson();
+            sysUserList = gson.fromJson(JacksonUtil.parseJson(sysUsers), new TypeToken<List<ApproveUserResult>>() {
+            }.getType());
+            delegateTask.addCandidateUsers(approveUserIds.stream().map(x -> String.valueOf(x)).collect(Collectors.toList()));
+        } else {
+            SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+            if (Objects.isNull(sysUser.getOrgId())) {
+                throw ExceptionResultEnum.ERROR.exception("审批人机构为空");
+            }
+            sysUserList = sysUserService.findByPresidentApprove(Arrays.asList(sysUser.getOrgId()), null);
+            if (Objects.nonNull(sysUserList) && sysUserList.size() > 0) {
+                List<String> ids = sysUserList.stream().map(s -> String.valueOf(s.getId())).collect(Collectors.toList());
+                //添加或签的人员,一人通过即可进入下一环节
+                delegateTask.addCandidateUsers(ids);
+            }
+        }
         // 发送审核短信
         // 发送审核短信
         TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(Long.valueOf(flowId));
         TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(Long.valueOf(flowId));
-        if(tfFlowApprove.getStatus().equals(FlowStatusEnum.AUDITING)
+        if (tfFlowApprove.getStatus().equals(FlowStatusEnum.AUDITING)
                 && tfFlowApprove.getSetup().equals(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup())) {
                 && tfFlowApprove.getSetup().equals(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup())) {
             basicMessageService.sendNoticeTaskAuditFlow(examTask, sysUserList, MessageEnum.NOTICE_OF_AUDIT_CREATED);
             basicMessageService.sendNoticeTaskAuditFlow(examTask, sysUserList, MessageEnum.NOTICE_OF_AUDIT_CREATED);
         }
         }

+ 17 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamTaskApplyParam.java

@@ -1,8 +1,13 @@
 package com.qmth.distributed.print.business.bean.params;
 package com.qmth.distributed.print.business.bean.params;
 
 
 
 
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.ExamTaskDetail;
 import com.qmth.distributed.print.business.entity.ExamTaskDetail;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
 
 
 /**
 /**
  * @Date: 2021/3/23.
  * @Date: 2021/3/23.
@@ -12,6 +17,18 @@ public class ExamTaskApplyParam {
     private ExamTask examTask;
     private ExamTask examTask;
     private ExamTaskDetail examTaskDetail;
     private ExamTaskDetail examTaskDetail;
 
 
+    @ApiModelProperty(value = "流程审批人列表")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private List<Long> approveUserIds;
+
+    public List<Long> getApproveUserIds() {
+        return approveUserIds;
+    }
+
+    public void setApproveUserIds(List<Long> approveUserIds) {
+        this.approveUserIds = approveUserIds;
+    }
+
     public ExamTask getExamTask() {
     public ExamTask getExamTask() {
         return examTask;
         return examTask;
     }
     }

+ 77 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/FlowTaskApproveParam.java

@@ -0,0 +1,77 @@
+package com.qmth.distributed.print.business.bean.params;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.enums.FlowApprovePassEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 流程任务审批参数
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/8/6
+ */
+public class FlowTaskApproveParam implements Serializable {
+
+    @ApiModelProperty(value = "流程任务id")
+    @NotNull(message = "流程任务id不能为空")
+    private String taskId;
+
+    @ApiModelProperty(value = "是否启用,0:停用,1:启用")
+    private FlowApprovePassEnum approvePass;
+
+    @ApiModelProperty(value = "流程审核意见")
+    private String remark;
+
+    @ApiModelProperty(value = "流程驳回节点")
+    private Integer setup;
+
+    @ApiModelProperty(value = "流程审批人列表")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private List<Long> approveUserIds;
+
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
+    public FlowApprovePassEnum getApprovePass() {
+        return approvePass;
+    }
+
+    public void setApprovePass(FlowApprovePassEnum approvePass) {
+        this.approvePass = approvePass;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Integer getSetup() {
+        return setup;
+    }
+
+    public void setSetup(Integer setup) {
+        this.setup = setup;
+    }
+
+    public List<Long> getApproveUserIds() {
+        return approveUserIds;
+    }
+
+    public void setApproveUserIds(List<Long> approveUserIds) {
+        this.approveUserIds = approveUserIds;
+    }
+}

+ 17 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskApplyTemp.java

@@ -43,6 +43,23 @@ public class ExamTaskApplyTemp extends BaseEntity implements Serializable {
     @TableField("exam_task_content")
     @TableField("exam_task_content")
     private String examTaskContent;
     private String examTaskContent;
 
 
+    @ApiModelProperty(value = "流程审批人列表")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField(exist = false)
+    private List<Long> approveUserIds;
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public List<Long> getApproveUserIds() {
+        return approveUserIds;
+    }
+
+    public void setApproveUserIds(List<Long> approveUserIds) {
+        this.approveUserIds = approveUserIds;
+    }
+
     public Long getSchoolId() {
     public Long getSchoolId() {
         return schoolId;
         return schoolId;
     }
     }

+ 19 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskDetail.java

@@ -6,9 +6,11 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.distributed.print.business.enums.MakeMethodEnum;
 import com.qmth.distributed.print.business.enums.MakeMethodEnum;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.base.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
+import java.util.List;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -95,6 +97,23 @@ public class ExamTaskDetail extends BaseEntity implements Serializable {
     @TableField(exist = false)
     @TableField(exist = false)
     private String operateType;
     private String operateType;
 
 
+    @ApiModelProperty(value = "流程审批人列表")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField(exist = false)
+    private List<Long> approveUserIds;
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public List<Long> getApproveUserIds() {
+        return approveUserIds;
+    }
+
+    public void setApproveUserIds(List<Long> approveUserIds) {
+        this.approveUserIds = approveUserIds;
+    }
+
     public Long getExamTaskId() {
     public Long getExamTaskId() {
         return examTaskId;
         return examTaskId;
     }
     }

+ 14 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TFFlowApprove.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.enums.FlowModelEnum;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.FlowGdykdxApproveSetupEnum;
 import com.qmth.teachcloud.common.enums.FlowGdykdxApproveSetupEnum;
@@ -51,11 +52,14 @@ public class TFFlowApprove extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "计划步骤")
     @ApiModelProperty(value = "计划步骤")
     private Integer setup;
     private Integer setup;
 
 
+    @ApiModelProperty(value = "流程模式,CHOOSE:选人,SYSTEM:系统选择")
+    private FlowModelEnum model;
+
     public TFFlowApprove() {
     public TFFlowApprove() {
 
 
     }
     }
 
 
-    public TFFlowApprove(Long schoolId, Long orgId, Long flowId, Long approveId, FlowStatusEnum status, Long userId) {
+    public TFFlowApprove(Long schoolId, Long orgId, Long flowId, Long approveId, FlowStatusEnum status, Long userId, FlowModelEnum model) {
         setId(SystemConstant.getDbUuid());
         setId(SystemConstant.getDbUuid());
         this.schoolId = schoolId;
         this.schoolId = schoolId;
         this.orgId = orgId;
         this.orgId = orgId;
@@ -64,6 +68,15 @@ public class TFFlowApprove extends BaseEntity implements Serializable {
         this.status = status;
         this.status = status;
         insertInfo(userId);
         insertInfo(userId);
         this.setup = FlowGdykdxApproveSetupEnum.SUBMIT.getSetup();
         this.setup = FlowGdykdxApproveSetupEnum.SUBMIT.getSetup();
+        this.model = model;
+    }
+
+    public FlowModelEnum getModel() {
+        return model;
+    }
+
+    public void setModel(FlowModelEnum model) {
+        this.model = model;
     }
     }
 
 
     public Long getSchoolId() {
     public Long getSchoolId() {

+ 42 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/FlowModelEnum.java

@@ -0,0 +1,42 @@
+package com.qmth.distributed.print.business.enums;
+
+import java.util.Objects;
+
+/**
+ * @Description: 流程模式 enum
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/9/9
+ */
+public enum FlowModelEnum {
+
+    CHOOSE("选人"),
+
+    SYSTEM("系统选择");
+
+    private String title;
+
+    private FlowModelEnum(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param title
+     * @return
+     */
+    public static String convertToName(String title) {
+        for (FlowModelEnum e : FlowModelEnum.values()) {
+            if (Objects.equals(title, e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 9 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ActivitiService.java

@@ -96,4 +96,13 @@ public interface ActivitiService {
      * @return
      * @return
      */
      */
     public FlowTaskApprovePeopleAllResult taskApproverExchangePeople(String taskId, String realName);
     public FlowTaskApprovePeopleAllResult taskApproverExchangePeople(String taskId, String realName);
+
+    /**
+     * 获取下级节点审批人
+     *
+     * @param courseCode
+     * @param taskId
+     * @return
+     */
+    public FlowTaskApprovePeopleAllResult taskApproverNextPeople(String courseCode, String taskId);
 }
 }

+ 12 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java

@@ -209,6 +209,7 @@ public interface ExamTaskService extends IService<ExamTask> {
 
 
     /**
     /**
      * 新增命题申请
      * 新增命题申请
+     *
      * @param examTaskApplyTemp
      * @param examTaskApplyTemp
      * @return
      * @return
      */
      */
@@ -216,18 +217,28 @@ public interface ExamTaskService extends IService<ExamTask> {
 
 
     /**
     /**
      * 查找命题任务审核表
      * 查找命题任务审核表
+     *
      * @param examTaskId 命题任务id
      * @param examTaskId 命题任务id
      * @return 命题任务审核表参数
      * @return 命题任务审核表参数
      */
      */
     ExamTaskApprovalFormDto findExamTaskApprovalForm(Long examTaskId);
     ExamTaskApprovalFormDto findExamTaskApprovalForm(Long examTaskId);
 
 
 
 
-    void findExamTaskApprovalPdf(HttpServletResponse response,Long examTaskId, String htmlContext) throws Exception;
+    void findExamTaskApprovalPdf(HttpServletResponse response, Long examTaskId, String htmlContext) throws Exception;
 
 
     /**
     /**
      * 根据试卷编号查找考试对象
      * 根据试卷编号查找考试对象
+     *
      * @param paperNumber 试卷编号
      * @param paperNumber 试卷编号
      * @return 考试对象
      * @return 考试对象
      */
      */
     ExamObjectDto findExamObjectDtoByPaperNumber(String paperNumber);
     ExamObjectDto findExamObjectDtoByPaperNumber(String paperNumber);
+
+    /**
+     * 根据流程id查找examtask
+     *
+     * @param flowId
+     * @return
+     */
+    public ExamTask findByFlowId(Long flowId);
 }
 }

+ 110 - 30
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -11,11 +11,14 @@ import com.qmth.distributed.print.business.bean.result.FlowTaskApprovePeopleResu
 import com.qmth.distributed.print.business.bean.result.FlowTaskResult;
 import com.qmth.distributed.print.business.bean.result.FlowTaskResult;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamStatusEnum;
 import com.qmth.distributed.print.business.enums.ExamStatusEnum;
+import com.qmth.distributed.print.business.enums.FlowModelEnum;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.enums.*;
+import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
@@ -87,6 +90,9 @@ public class ActivitiServiceImpl implements ActivitiService {
     @Resource
     @Resource
     SysUserService sysUserService;
     SysUserService sysUserService;
 
 
+    @Resource
+    SysOrgService sysOrgService;
+
     /**
     /**
      * 注册流程
      * 注册流程
      *
      *
@@ -155,7 +161,9 @@ public class ActivitiServiceImpl implements ActivitiService {
             tfFlowApproveQueryWrapper.lambda().eq(TFFlowApprove::getFlowId, Long.parseLong(flowId));
             tfFlowApproveQueryWrapper.lambda().eq(TFFlowApprove::getFlowId, Long.parseLong(flowId));
             TFFlowApprove tfFlowApprove = tfFlowApproveService.getOne(tfFlowApproveQueryWrapper);
             TFFlowApprove tfFlowApprove = tfFlowApproveService.getOne(tfFlowApproveQueryWrapper);
             if (Objects.isNull(tfFlowApprove)) {
             if (Objects.isNull(tfFlowApprove)) {
-                tfFlowApprove = new TFFlowApprove(sysUser.getSchoolId(), sysUser.getOrgId(), Long.parseLong(flowId), sysUser.getId(), FlowStatusEnum.END, sysUser.getId());
+                ExamTask examTask = examTaskService.findByFlowId(Long.parseLong(flowId));
+                int count = sysUserService.countByTeachingRoomId(examTask.getTeachingRoomId());
+                tfFlowApprove = new TFFlowApprove(sysUser.getSchoolId(), sysUser.getOrgId(), Long.parseLong(flowId), sysUser.getId(), FlowStatusEnum.END, sysUser.getId(), count == 0 ? FlowModelEnum.CHOOSE : FlowModelEnum.SYSTEM);
             } else {
             } else {
                 tfFlowApprove.setStatus(FlowStatusEnum.END);
                 tfFlowApprove.setStatus(FlowStatusEnum.END);
                 tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.END.getSetup());
                 tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.END.getSetup());
@@ -164,9 +172,7 @@ public class ActivitiServiceImpl implements ActivitiService {
             tfFlowApproveService.saveOrUpdate(tfFlowApprove);
             tfFlowApproveService.saveOrUpdate(tfFlowApprove);
 
 
             //流程流水日志
             //流程流水日志
-            QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
-            examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, Long.parseLong(flowId));
-            ExamTask examTask = examTaskService.getOne(examTaskQueryWrapper);
+            ExamTask examTask = examTaskService.findByFlowId(Long.parseLong(flowId));
             TFFlowLog tfFlowLog = new TFFlowLog(sysUser.getSchoolId(), sysUser.getOrgId(), Long.parseLong(flowId), examTask.getId(), sysUser.getId(), sysUser.getId(), FlowGdykdxApproveSetupEnum.END.getTitle());
             TFFlowLog tfFlowLog = new TFFlowLog(sysUser.getSchoolId(), sysUser.getOrgId(), Long.parseLong(flowId), examTask.getId(), sysUser.getId(), sysUser.getId(), FlowGdykdxApproveSetupEnum.END.getTitle());
             tfFlowLog.setApproveOperation(FlowApproveOperationEnum.END);
             tfFlowLog.setApproveOperation(FlowApproveOperationEnum.END);
             tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.END.getSetup());
             tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.END.getSetup());
@@ -247,7 +253,9 @@ public class ActivitiServiceImpl implements ActivitiService {
         FlowStatusEnum flowStatusEnum = (FlowStatusEnum) map.get(SystemConstant.FLOW_STATUS);
         FlowStatusEnum flowStatusEnum = (FlowStatusEnum) map.get(SystemConstant.FLOW_STATUS);
 
 
         Long approveId = Objects.nonNull(map.get(SystemConstant.APPROVE_ID)) ? Long.parseLong(String.valueOf(map.get(SystemConstant.APPROVE_ID))) : null;
         Long approveId = Objects.nonNull(map.get(SystemConstant.APPROVE_ID)) ? Long.parseLong(String.valueOf(map.get(SystemConstant.APPROVE_ID))) : null;
-        tfFlowApproveService.save(new TFFlowApprove(sysUser.getSchoolId(), sysUser.getOrgId(), flowId, approveId, flowStatusEnum, sysUser.getId()));
+        Long teachingRoomId = Objects.nonNull(map.get(SystemConstant.TEACHING_ROOM_ID)) ? (Long) map.get(SystemConstant.TEACHING_ROOM_ID) : null;
+        int count = sysUserService.countByTeachingRoomId(teachingRoomId);
+        tfFlowApproveService.save(new TFFlowApprove(sysUser.getSchoolId(), sysUser.getOrgId(), flowId, approveId, flowStatusEnum, sysUser.getId(), count == 0 ? FlowModelEnum.CHOOSE : FlowModelEnum.SYSTEM));
     }
     }
 
 
     /**
     /**
@@ -274,9 +282,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                 throw ExceptionResultEnum.ERROR.exception("流程任务为空");
                 throw ExceptionResultEnum.ERROR.exception("流程任务为空");
             }
             }
             String processInstanceId = task.getProcessInstanceId();
             String processInstanceId = task.getProcessInstanceId();
-            QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
-            examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, Long.parseLong(processInstanceId));
-            ExamTask examTask = examTaskService.getOne(examTaskQueryWrapper);
+            ExamTask examTask = examTaskService.findByFlowId(Long.parseLong(processInstanceId));
 
 
             String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().getProcessDefinitionId();
             String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().getProcessDefinitionId();
             ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinitionId);
             ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinitionId);
@@ -314,6 +320,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                         tfFlowLog.setApproveOperation(FlowApproveOperationEnum.SUBMIT);
                         tfFlowLog.setApproveOperation(FlowApproveOperationEnum.SUBMIT);
                         tfFlowApprove.setStatus(FlowStatusEnum.AUDITING);
                         tfFlowApprove.setStatus(FlowStatusEnum.AUDITING);
                         tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
                         tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
+                        map.computeIfAbsent(SystemConstant.APPROVE_DIRECTOR_USER_IDS, v -> map.get(SystemConstant.APPROVE_USER_IDS));
                     } else if (setupEnum == FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE) {//主任提交
                     } else if (setupEnum == FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE) {//主任提交
                         flowApproveVaild(task, sysUser.getId(), map);
                         flowApproveVaild(task, sysUser.getId(), map);
                         FlowApprovePassEnum approvePass = (FlowApprovePassEnum) map.get(SystemConstant.APPROVE_OPERATION);
                         FlowApprovePassEnum approvePass = (FlowApprovePassEnum) map.get(SystemConstant.APPROVE_OPERATION);
@@ -335,6 +342,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                             throw ExceptionResultEnum.ERROR.exception("流程变量值错误");
                             throw ExceptionResultEnum.ERROR.exception("流程变量值错误");
                         }
                         }
                         map.computeIfAbsent(SystemConstant.APPROVE, v -> approve.getId());
                         map.computeIfAbsent(SystemConstant.APPROVE, v -> approve.getId());
+                        map.computeIfAbsent(SystemConstant.APPROVE_PRESIDENT_USER_IDS, v -> map.get(SystemConstant.APPROVE_USER_IDS));
                     } else if (setupEnum == FlowGdykdxApproveSetupEnum.SECOND_APPROVE) {//院长提交
                     } else if (setupEnum == FlowGdykdxApproveSetupEnum.SECOND_APPROVE) {//院长提交
                         flowApproveVaild(task, sysUser.getId(), map);
                         flowApproveVaild(task, sysUser.getId(), map);
                         FlowApprovePassEnum approvePass = (FlowApprovePassEnum) map.get(SystemConstant.APPROVE_OPERATION);
                         FlowApprovePassEnum approvePass = (FlowApprovePassEnum) map.get(SystemConstant.APPROVE_OPERATION);
@@ -488,16 +496,14 @@ public class ActivitiServiceImpl implements ActivitiService {
             if (tfFlowApprove.getSetup() <= 0) {
             if (tfFlowApprove.getSetup() <= 0) {
                 throw ExceptionResultEnum.ERROR.exception("流程已结束或已终止");
                 throw ExceptionResultEnum.ERROR.exception("流程已结束或已终止");
             }
             }
-
-            QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
-            examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, flowTaskApprovePeopleAllResult.getFlowId());
-            ExamTask examTask = examTaskService.getOne(examTaskQueryWrapper);
+            ExamTask examTask = examTaskService.findByFlowId(flowTaskApprovePeopleAllResult.getFlowId());
 
 
             IPage<FlowApproveResult> flowApproveResultIPage = tfFlowService.flowApproveList(new Page<>(SystemConstant.PAGE_NUMBER, SystemConstant.PAGE_SIZE), null, SystemConstant.getHeadOrUserSchoolId(), null, flowTaskApprovePeopleAllResult.getFlowId());
             IPage<FlowApproveResult> flowApproveResultIPage = tfFlowService.flowApproveList(new Page<>(SystemConstant.PAGE_NUMBER, SystemConstant.PAGE_SIZE), null, SystemConstant.getHeadOrUserSchoolId(), null, flowTaskApprovePeopleAllResult.getFlowId());
             FlowApproveResult flowApproveResult = null;
             FlowApproveResult flowApproveResult = null;
             if (Objects.nonNull(flowApproveResultIPage) && flowApproveResultIPage.getRecords().size() > 0) {
             if (Objects.nonNull(flowApproveResultIPage) && flowApproveResultIPage.getRecords().size() > 0) {
                 flowApproveResult = flowApproveResultIPage.getRecords().get(0);
                 flowApproveResult = flowApproveResultIPage.getRecords().get(0);
             }
             }
+            List<ApproveUserResult> approveUserMtResult = null;
             switch (tfFlowApprove.getSetup()) {
             switch (tfFlowApprove.getSetup()) {
                 case -1:
                 case -1:
                     if (Objects.isNull(flowApproveResult)) {
                     if (Objects.isNull(flowApproveResult)) {
@@ -505,7 +511,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                     }
                     }
                     if (Objects.nonNull(flowApproveResult.getStartId())) {
                     if (Objects.nonNull(flowApproveResult.getStartId())) {
                         //获取命题已审
                         //获取命题已审
-                        List<ApproveUserResult> approveUserMtResult = sysUserService.findById(flowApproveResult.getStartId());
+                        approveUserMtResult = sysUserService.findById(flowApproveResult.getStartId());
                         flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup(), true, approveUserMtResult));
                         flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup(), true, approveUserMtResult));
                     }
                     }
                     if (Objects.nonNull(flowApproveResult.getPrimaryApproveId())) {
                     if (Objects.nonNull(flowApproveResult.getPrimaryApproveId())) {
@@ -519,7 +525,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                         throw ExceptionResultEnum.ERROR.exception("未找到流程审批记录");
                         throw ExceptionResultEnum.ERROR.exception("未找到流程审批记录");
                     }
                     }
                     //获取命题已审
                     //获取命题已审
-                    List<ApproveUserResult> approveUserMtResult = sysUserService.findById(flowApproveResult.getStartId());
+                    approveUserMtResult = sysUserService.findById(flowApproveResult.getStartId());
                     flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup(), true, approveUserMtResult));
                     flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup(), true, approveUserMtResult));
                     //获取主任已审
                     //获取主任已审
                     List<ApproveUserResult> approveUserDirectorList = sysUserService.findById(flowApproveResult.getPrimaryApproveId());
                     List<ApproveUserResult> approveUserDirectorList = sysUserService.findById(flowApproveResult.getPrimaryApproveId());
@@ -529,7 +535,12 @@ public class ActivitiServiceImpl implements ActivitiService {
                     flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup(), true, approveUserPresidentList));
                     flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup(), true, approveUserPresidentList));
                     break;
                     break;
                 case 1:
                 case 1:
-                    flowTaskApprovePeopleResultList = getApproveUserAll(examTask.getCourseCode(), flowTaskApprovePeopleResultList);
+                    if (tfFlowApprove.getModel() == FlowModelEnum.SYSTEM) {
+                        flowTaskApprovePeopleResultList = getApproveUserAll(examTask.getCourseCode(), flowTaskApprovePeopleResultList);
+                    } else {
+                        flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup(), false, new ArrayList<>()));
+                        flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup(), false, new ArrayList<>()));
+                    }
                     break;
                     break;
                 case 2:
                 case 2:
                     if (Objects.isNull(flowApproveResult)) {
                     if (Objects.isNull(flowApproveResult)) {
@@ -539,11 +550,15 @@ public class ActivitiServiceImpl implements ActivitiService {
                     approveUserMtResult = sysUserService.findById(flowApproveResult.getStartId());
                     approveUserMtResult = sysUserService.findById(flowApproveResult.getStartId());
                     flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup(), true, approveUserMtResult));
                     flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup(), true, approveUserMtResult));
 
 
-                    SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-                    if (Objects.nonNull(sysUser.getOrgId())) {
-                        //获取院长审批人
-                        List<ApproveUserResult> sysUserPresidentList = sysUserService.findByPresidentApprove(Arrays.asList(sysUser.getOrgId()), null);
-                        flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup(), false, sysUserPresidentList));
+                    if (tfFlowApprove.getModel() == FlowModelEnum.SYSTEM) {
+                        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+                        if (Objects.nonNull(sysUser.getOrgId())) {
+                            //获取院长审批人
+                            List<ApproveUserResult> sysUserPresidentList = sysUserService.findByPresidentApprove(Arrays.asList(sysUser.getOrgId()), null);
+                            flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup(), false, sysUserPresidentList));
+                        }
+                    } else {
+                        flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup(), false, new ArrayList<>()));
                     }
                     }
                     break;
                     break;
                 case 3:
                 case 3:
@@ -593,6 +608,9 @@ public class ActivitiServiceImpl implements ActivitiService {
         if (tfFlowApprove.getSetup() <= 0) {
         if (tfFlowApprove.getSetup() <= 0) {
             throw ExceptionResultEnum.ERROR.exception("流程已结束或已终止");
             throw ExceptionResultEnum.ERROR.exception("流程已结束或已终止");
         }
         }
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+//        List<Long> ids = null;
+//        String variableName = null;
         switch (tfFlowApprove.getSetup()) {
         switch (tfFlowApprove.getSetup()) {
             case 1:
             case 1:
                 if (Objects.nonNull(task) && Objects.nonNull(task.getAssignee()) && Objects.equals(task.getAssignee(), userId)) {
                 if (Objects.nonNull(task) && Objects.nonNull(task.getAssignee()) && Objects.equals(task.getAssignee(), userId)) {
@@ -609,17 +627,25 @@ public class ActivitiServiceImpl implements ActivitiService {
                         throw ExceptionResultEnum.ERROR.exception("该审批人已有审批权限,无需流转");
                         throw ExceptionResultEnum.ERROR.exception("该审批人已有审批权限,无需流转");
                     }
                     }
                 }
                 }
+//                if (tfFlowApprove.getSetup() == FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup()) {
+//                    ids = (List<Long>) taskService.getVariable(taskId, SystemConstant.APPROVE_DIRECTOR_USER_IDS);
+//                    variableName = SystemConstant.APPROVE_DIRECTOR_USER_IDS;
+//                } else {
+//                    ids = (List<Long>) taskService.getVariable(taskId, SystemConstant.APPROVE_PRESIDENT_USER_IDS);
+//                    variableName = SystemConstant.APPROVE_PRESIDENT_USER_IDS;
+//                }
                 break;
                 break;
             default:
             default:
                 break;
                 break;
         }
         }
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         taskService.deleteCandidateUser(taskId, String.valueOf(sysUser.getId()));
         taskService.deleteCandidateUser(taskId, String.valueOf(sysUser.getId()));
         taskService.addCandidateUser(taskId, userId);
         taskService.addCandidateUser(taskId, userId);
-
-        QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
-        examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, flowId);
-        ExamTask examTask = examTaskService.getOne(examTaskQueryWrapper);
+//        if (Objects.nonNull(ids) && ids.size() > 0) {
+//            ids.remove(sysUser.getId());
+//            ids.add(Long.parseLong(userId));
+//            taskService.setVariable(taskId, variableName, ids);
+//        }
+        ExamTask examTask = examTaskService.findByFlowId(flowId);
 
 
         String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult().getProcessDefinitionId();
         String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult().getProcessDefinitionId();
         ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinitionId);
         ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinitionId);
@@ -666,21 +692,18 @@ public class ActivitiServiceImpl implements ActivitiService {
         if (tfFlowApprove.getSetup() <= 0) {
         if (tfFlowApprove.getSetup() <= 0) {
             throw ExceptionResultEnum.ERROR.exception("流程已结束或已终止");
             throw ExceptionResultEnum.ERROR.exception("流程已结束或已终止");
         }
         }
-        QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
-        examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, flowTaskApprovePeopleAllResult.getFlowId());
         ExamTask examTask = null;
         ExamTask examTask = null;
-
         List<FlowTaskApprovePeopleResult> flowTaskApprovePeopleResultList = new ArrayList<>();
         List<FlowTaskApprovePeopleResult> flowTaskApprovePeopleResultList = new ArrayList<>();
         switch (tfFlowApprove.getSetup()) {
         switch (tfFlowApprove.getSetup()) {
             case 1:
             case 1:
                 //获取命题审批人
                 //获取命题审批人
-                examTask = examTaskService.getOne(examTaskQueryWrapper);
+                examTask = examTaskService.findByFlowId(flowTaskApprovePeopleAllResult.getFlowId());
                 List<ApproveUserResult> approveUserResultList = sysUserService.findByAssignApprove(examTask.getCourseCode(), realName);
                 List<ApproveUserResult> approveUserResultList = sysUserService.findByAssignApprove(examTask.getCourseCode(), realName);
                 flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(approveUserResultList));
                 flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(approveUserResultList));
                 break;
                 break;
             case 2:
             case 2:
                 //获取教研室主任审批人
                 //获取教研室主任审批人
-                examTask = examTaskService.getOne(examTaskQueryWrapper);
+                examTask = examTaskService.findByFlowId(flowTaskApprovePeopleAllResult.getFlowId());
                 List<ApproveUserResult> sysUserDirectorList = sysUserService.findByDirectorApprove(examTask.getCourseCode(), realName);
                 List<ApproveUserResult> sysUserDirectorList = sysUserService.findByDirectorApprove(examTask.getCourseCode(), realName);
                 flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(sysUserDirectorList));
                 flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(sysUserDirectorList));
                 break;
                 break;
@@ -698,6 +721,63 @@ public class ActivitiServiceImpl implements ActivitiService {
         return flowTaskApprovePeopleAllResult;
         return flowTaskApprovePeopleAllResult;
     }
     }
 
 
+    /**
+     * 获取下级节点审批人
+     *
+     * @param courseCode
+     * @param taskId
+     * @return
+     */
+    @Override
+    public FlowTaskApprovePeopleAllResult taskApproverNextPeople(String courseCode, String taskId) {
+        FlowTaskApprovePeopleAllResult flowTaskApprovePeopleAllResult = null;
+        List<FlowTaskApprovePeopleResult> flowTaskApprovePeopleResultList = null;
+        if (Objects.nonNull(taskId) && !Objects.equals(taskId, "")) {//说明从已审核的节点开始捞人
+            Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+            if (Objects.isNull(task)) {
+                throw ExceptionResultEnum.ERROR.exception("流程任务为空");
+            }
+            flowTaskApprovePeopleAllResult = new FlowTaskApprovePeopleAllResult(Long.parseLong(task.getProcessInstanceId()));
+            //获取当前流程节点
+            TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(flowTaskApprovePeopleAllResult.getFlowId());
+            if (Objects.isNull(tfFlowApprove)) {
+                throw ExceptionResultEnum.ERROR.exception("未找到流程状态记录");
+            }
+            if (tfFlowApprove.getSetup() <= 0) {
+                throw ExceptionResultEnum.ERROR.exception("流程已结束或已终止");
+            }
+            List<ApproveUserResult> approveUserResultList = null;
+            flowTaskApprovePeopleResultList = new LinkedList<>();
+
+            ExamTask examTask = examTaskService.findByFlowId(flowTaskApprovePeopleAllResult.getFlowId());
+            List<SysOrg> sysOrgList = sysOrgService.findByConnectByParentId(examTask.getTeachingRoomId(), true, true);
+            switch (tfFlowApprove.getSetup()) {
+                case 1:
+                    //获取教研室主任审批人
+                    approveUserResultList = sysUserService.findByRootApprove(null, sysOrgList.stream().map(s -> s.getId()).collect(Collectors.toList()), null, FlowApproveNameEnum.DIRECTOR);
+                    flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup(), false, approveUserResultList));
+                    break;
+                case 2:
+                    //获取院长审批人
+                    approveUserResultList = sysUserService.findByRootApprove(null, sysOrgList.stream().map(s -> s.getId()).collect(Collectors.toList()), null, FlowApproveNameEnum.PRESIDENT);
+                    flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup(), false, approveUserResultList));
+                    break;
+                default:
+                    break;
+            }
+        } else {//获取整个节点审批人
+            if (Objects.isNull(courseCode) || Objects.equals(courseCode, "")) {
+                throw ExceptionResultEnum.ERROR.exception("课程编码为空");
+            }
+            List<ApproveUserResult> approveUserResultList = sysUserService.findByRootApprove(courseCode, null, null, FlowApproveNameEnum.DIRECTOR);
+            flowTaskApprovePeopleResultList = new LinkedList<>();
+            flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup(), false, approveUserResultList));
+            flowTaskApprovePeopleAllResult = new FlowTaskApprovePeopleAllResult();
+        }
+        flowTaskApprovePeopleAllResult.setApproveUserList(flowTaskApprovePeopleResultList);
+        return flowTaskApprovePeopleAllResult;
+    }
+
     /**
     /**
      * 流程提交校验
      * 流程提交校验
      *
      *

+ 1 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java

@@ -372,6 +372,7 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
             //TODO 这里以后要判断学校code来取流程key
             //TODO 这里以后要判断学校code来取流程key
             Map<String, Object> map = new HashMap<>();
             Map<String, Object> map = new HashMap<>();
             map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
             map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
+            map.computeIfAbsent(SystemConstant.TEACHING_ROOM_ID, v -> examTask.getTeachingRoomId());
             ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
             ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
             Long flowId = Long.parseLong(processInstance.getId());
             Long flowId = Long.parseLong(processInstance.getId());
             UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
             UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();

+ 27 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -8,8 +8,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
 import com.google.gson.Gson;
 import com.google.gson.Gson;
-import com.qmth.distributed.print.business.bean.dto.approvalForm.*;
 import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.dto.*;
+import com.qmth.distributed.print.business.bean.dto.approvalForm.*;
 import com.qmth.distributed.print.business.bean.dto.examObject.ExamObjectDto;
 import com.qmth.distributed.print.business.bean.dto.examObject.ExamObjectDto;
 import com.qmth.distributed.print.business.bean.params.ExamDetailList;
 import com.qmth.distributed.print.business.bean.params.ExamDetailList;
 import com.qmth.distributed.print.business.bean.params.ExamDetailParams;
 import com.qmth.distributed.print.business.bean.params.ExamDetailParams;
@@ -267,6 +267,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 //TODO 这里以后要判断学校code来取流程key
                 //TODO 这里以后要判断学校code来取流程key
                 Map<String, Object> map = new HashMap<>();
                 Map<String, Object> map = new HashMap<>();
                 map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
                 map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
+                map.computeIfAbsent(SystemConstant.TEACHING_ROOM_ID, v -> examTask.getTeachingRoomId());
                 ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
                 ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
                 flowId = Long.parseLong(processInstance.getId());
                 flowId = Long.parseLong(processInstance.getId());
             }
             }
@@ -285,6 +286,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 if (examTask.getUserId().longValue() != task.getUserId().longValue()) {
                 if (examTask.getUserId().longValue() != task.getUserId().longValue()) {
                     Map<String, Object> map = new HashMap<>();
                     Map<String, Object> map = new HashMap<>();
                     map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
                     map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
+                    map.computeIfAbsent(SystemConstant.TEACHING_ROOM_ID, v -> examTask.getTeachingRoomId());
                     ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
                     ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
                     flowId = Long.parseLong(processInstance.getId());
                     flowId = Long.parseLong(processInstance.getId());
                 } else {
                 } else {
@@ -411,6 +413,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 //TODO 这里以后要判断学校code来取流程key
                 //TODO 这里以后要判断学校code来取流程key
                 Map<String, Object> map = new HashMap<>();
                 Map<String, Object> map = new HashMap<>();
                 map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
                 map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
+                map.computeIfAbsent(SystemConstant.TEACHING_ROOM_ID, v -> examTask.getTeachingRoomId());
                 ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
                 ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
                 examTask.setFlowId(Long.parseLong(processInstance.getId()));
                 examTask.setFlowId(Long.parseLong(processInstance.getId()));
             } else if (!examTask.getReview()) {
             } else if (!examTask.getReview()) {
@@ -699,6 +702,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 //TODO 这里以后要判断学校code来取流程key
                 //TODO 这里以后要判断学校code来取流程key
                 Map<String, Object> map = new HashMap<>();
                 Map<String, Object> map = new HashMap<>();
                 map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
                 map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
+                map.computeIfAbsent(SystemConstant.TEACHING_ROOM_ID, v -> examTask.getTeachingRoomId());
                 ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
                 ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
                 examTask.setFlowId(Long.parseLong(processInstance.getId()));
                 examTask.setFlowId(Long.parseLong(processInstance.getId()));
                 this.updateById(examTask);
                 this.updateById(examTask);
@@ -955,11 +959,13 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         this.update(updateWrapper);
         this.update(updateWrapper);
 
 
         if (Objects.nonNull(examTask.getFlowId()) && ExamStatusEnum.SUBMIT.name().equals(examTaskDetail.getOperateType())) {
         if (Objects.nonNull(examTask.getFlowId()) && ExamStatusEnum.SUBMIT.name().equals(examTaskDetail.getOperateType())) {
+            //TODO 加入从前端获取userId
             // 审核一级
             // 审核一级
             Task task = taskService.createTaskQuery().processInstanceId(String.valueOf(examTask.getFlowId())).singleResult();
             Task task = taskService.createTaskQuery().processInstanceId(String.valueOf(examTask.getFlowId())).singleResult();
             if (Objects.nonNull(task)) {
             if (Objects.nonNull(task)) {
                 Map<String, Object> map1 = new HashMap<>();
                 Map<String, Object> map1 = new HashMap<>();
                 map1.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> task.getId());
                 map1.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> task.getId());
+                map1.computeIfAbsent(SystemConstant.APPROVE_USER_IDS, v -> examTaskDetail.getApproveUserIds());
                 activitiService.taskApprove(map1);
                 activitiService.taskApprove(map1);
             }
             }
         }
         }
@@ -1018,6 +1024,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         //TODO 这里以后要判断学校code来取流程key
         //TODO 这里以后要判断学校code来取流程key
         Map<String, Object> map = new HashMap<>();
         Map<String, Object> map = new HashMap<>();
         map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(task.getUserId()));
         map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(task.getUserId()));
+        map.computeIfAbsent(SystemConstant.TEACHING_ROOM_ID, v -> task.getTeachingRoomId());
         ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
         ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
 
 
         UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
         UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
@@ -1477,6 +1484,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 if (basicExamRule.getReview()) {
                 if (basicExamRule.getReview()) {
                     Map<String, Object> map = new HashMap<>();
                     Map<String, Object> map = new HashMap<>();
                     map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
                     map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
+                    map.computeIfAbsent(SystemConstant.TEACHING_ROOM_ID, v -> examTask.getTeachingRoomId());
                     ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
                     ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
                     examTask.setFlowId(Long.parseLong(processInstance.getId()));
                     examTask.setFlowId(Long.parseLong(processInstance.getId()));
 
 
@@ -1486,6 +1494,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
 
             // 提交时,校验
             // 提交时,校验
             if (ExamStatusEnum.SUBMIT.name().equals(examTaskDetail.getOperateType())) {
             if (ExamStatusEnum.SUBMIT.name().equals(examTaskDetail.getOperateType())) {
+                //TODO 加入从前端获取userId
                 validSubmitParam(examTaskDetail);
                 validSubmitParam(examTaskDetail);
                 if (Objects.nonNull(examTask.getFlowId())) {
                 if (Objects.nonNull(examTask.getFlowId())) {
                     // 审核一级
                     // 审核一级
@@ -1493,6 +1502,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                     if (Objects.nonNull(task)) {
                     if (Objects.nonNull(task)) {
                         Map<String, Object> map1 = new HashMap<>();
                         Map<String, Object> map1 = new HashMap<>();
                         map1.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> task.getId());
                         map1.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> task.getId());
+                        map1.computeIfAbsent(SystemConstant.APPROVE_USER_IDS, v -> examTaskApplyParam.getApproveUserIds());
                         activitiService.taskApprove(map1);
                         activitiService.taskApprove(map1);
                     }
                     }
                 }
                 }
@@ -1611,6 +1621,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 if (basicExamRule.getReview()) {
                 if (basicExamRule.getReview()) {
                     Map<String, Object> map = new HashMap<>();
                     Map<String, Object> map = new HashMap<>();
                     map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
                     map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
+                    map.computeIfAbsent(SystemConstant.TEACHING_ROOM_ID, v -> examTask.getTeachingRoomId());
                     ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
                     ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
                     examTask.setFlowId(Long.parseLong(processInstance.getId()));
                     examTask.setFlowId(Long.parseLong(processInstance.getId()));
                 }
                 }
@@ -1704,11 +1715,13 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             }
             }
 
 
             if (Objects.nonNull(examTask.getFlowId())) {
             if (Objects.nonNull(examTask.getFlowId())) {
+                //TODO 加入从前端获取userId
                 // 审核一级
                 // 审核一级
                 Task task = taskService.createTaskQuery().processInstanceId(String.valueOf(examTask.getFlowId())).singleResult();
                 Task task = taskService.createTaskQuery().processInstanceId(String.valueOf(examTask.getFlowId())).singleResult();
                 if (Objects.nonNull(task)) {
                 if (Objects.nonNull(task)) {
                     Map<String, Object> map1 = new HashMap<>();
                     Map<String, Object> map1 = new HashMap<>();
                     map1.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> task.getId());
                     map1.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> task.getId());
+                    map1.computeIfAbsent(SystemConstant.APPROVE_USER_IDS, v -> examTaskApplyTemp.getApproveUserIds());
                     activitiService.taskApprove(map1);
                     activitiService.taskApprove(map1);
                 }
                 }
             }
             }
@@ -1881,6 +1894,19 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         return examObjectDto;
         return examObjectDto;
     }
     }
 
 
+    /**
+     * 根据流程id查找examtask
+     *
+     * @param flowId
+     * @return
+     */
+    @Override
+    public ExamTask findByFlowId(Long flowId) {
+        QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
+        examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, flowId);
+        return examTaskService.getOne(examTaskQueryWrapper);
+    }
+
     /**
     /**
      * 简单校验提交参数
      * 简单校验提交参数
      *
      *

+ 24 - 9
distributed-print/src/main/java/com/qmth/distributed/print/api/TFFlowController.java

@@ -2,10 +2,13 @@ package com.qmth.distributed.print.api;
 
 
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.params.FlowApproveParam;
 import com.qmth.distributed.print.business.bean.params.FlowApproveParam;
 import com.qmth.distributed.print.business.bean.params.FlowParam;
 import com.qmth.distributed.print.business.bean.params.FlowParam;
+import com.qmth.distributed.print.business.bean.params.FlowTaskApproveParam;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.bean.result.FlowApproveResult;
 import com.qmth.distributed.print.business.bean.result.FlowApproveResult;
 import com.qmth.distributed.print.business.bean.result.FlowTaskApprovePeopleAllResult;
 import com.qmth.distributed.print.business.bean.result.FlowTaskApprovePeopleAllResult;
@@ -21,7 +24,10 @@ import com.qmth.distributed.print.business.service.TFFlowService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.SysUser;
-import com.qmth.teachcloud.common.enums.*;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.FieldUniqueEnum;
+import com.qmth.teachcloud.common.enums.FlowGdykdxApproveSetupEnum;
+import com.qmth.teachcloud.common.enums.UploadFileEnum;
 import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.Result;
@@ -158,15 +164,16 @@ public class TFFlowController {
     @ApiOperation(value = "审批流程")
     @ApiOperation(value = "审批流程")
     @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
     @RequestMapping(value = "/task/approve", method = RequestMethod.POST)
     @RequestMapping(value = "/task/approve", method = RequestMethod.POST)
-    public Result taskApprove(@ApiParam(value = "流程任务id", required = true) @RequestParam String taskId,
-                              @ApiParam(value = "流程审批操作", required = false) @RequestParam(required = false) FlowApprovePassEnum approvePass,
-                              @ApiParam(value = "流程审核意见", required = false) @RequestParam(required = false) String remark,
-                              @ApiParam(value = "流程驳回节点", required = false) @RequestParam(required = false) Integer setup) {
+    public Result taskApprove(@Valid @RequestBody FlowTaskApproveParam flowTaskApproveParam, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
         Map<String, Object> map = new HashMap<>();
         Map<String, Object> map = new HashMap<>();
-        map.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> taskId);
-        map.computeIfAbsent(SystemConstant.APPROVE_OPERATION, v -> approvePass);
-        map.computeIfAbsent(SystemConstant.APPROVE_REMARK, v -> remark);
-        map.computeIfAbsent(SystemConstant.APPROVE_SETUP, v -> setup);
+        map.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> flowTaskApproveParam.getTaskId());
+        map.computeIfAbsent(SystemConstant.APPROVE_OPERATION, v -> flowTaskApproveParam.getApprovePass());
+        map.computeIfAbsent(SystemConstant.APPROVE_REMARK, v -> flowTaskApproveParam.getRemark());
+        map.computeIfAbsent(SystemConstant.APPROVE_SETUP, v -> flowTaskApproveParam.getSetup());
+        map.computeIfAbsent(SystemConstant.APPROVE_USER_IDS, v -> flowTaskApproveParam.getApproveUserIds());
         Map<String, Object> objectMap = activitiService.taskApprove(map);
         Map<String, Object> objectMap = activitiService.taskApprove(map);
         if (Objects.nonNull(objectMap)) {
         if (Objects.nonNull(objectMap)) {
             TFFlowApprove tfFlowApprove = (TFFlowApprove) objectMap.get("tfFlowApprove");
             TFFlowApprove tfFlowApprove = (TFFlowApprove) objectMap.get("tfFlowApprove");
@@ -246,4 +253,12 @@ public class TFFlowController {
                                              @ApiParam(value = "用户姓名", required = false) @RequestParam(required = false) String realName) {
                                              @ApiParam(value = "用户姓名", required = false) @RequestParam(required = false) String realName) {
         return ResultUtil.ok(activitiService.taskApproverExchangePeople(taskId, realName));
         return ResultUtil.ok(activitiService.taskApproverExchangePeople(taskId, realName));
     }
     }
+
+    @ApiOperation(value = "获取下级节点审批人")
+    @ApiResponses({@ApiResponse(code = 200, message = "流程节点审批人", response = FlowTaskApprovePeopleAllResult.class)})
+    @RequestMapping(value = "/task/approver/next/people", method = RequestMethod.POST)
+    public Result taskApproverNextPeople(@ApiParam(value = "课程编码", required = false) @RequestParam(required = false) String courseCode,
+                                         @ApiParam(value = "流程节点id", required = false) @RequestParam(required = false) String taskId) {
+        return ResultUtil.ok(activitiService.taskApproverNextPeople(courseCode, taskId));
+    }
 }
 }

+ 5 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -193,11 +193,15 @@ public class SystemConstant {
     public static final String PROCESSES = "processes";
     public static final String PROCESSES = "processes";
     public static final String GDYKDX_FLOW_KEY = "GdykdxPaperApprove";//流程key
     public static final String GDYKDX_FLOW_KEY = "GdykdxPaperApprove";//流程key
     public static final String APPROVE_ID = "approveId";//审批id
     public static final String APPROVE_ID = "approveId";//审批id
+    public static final String TEACHING_ROOM_ID = "teachingRoomId";//教研室机构id
     public static final String FLOW_ID = "flowId";//流程id
     public static final String FLOW_ID = "flowId";//流程id
     public static final String FLOW_TASK_ID = "flowTaskId";//流程任务id
     public static final String FLOW_TASK_ID = "flowTaskId";//流程任务id
     public static final String APPROVE = "approve";//流程审核变量
     public static final String APPROVE = "approve";//流程审核变量
     public static final String APPROVE_SETUP = "approveSetup";//流程节点
     public static final String APPROVE_SETUP = "approveSetup";//流程节点
-    public static final String APPROVE_OPERATION = "approveOperation";//流程节点
+    public static final String APPROVE_USER_IDS = "approveUserIds";//流程审批人列表
+    public static final String APPROVE_DIRECTOR_USER_IDS = "approveDirectorUserIds";//流程主任审批人列表
+    public static final String APPROVE_PRESIDENT_USER_IDS = "approvePresidentUserIds";//流程院长审批人列表
+    public static final String APPROVE_OPERATION = "approveOperation";//流程操作
     public static final String FLOW_STATUS = "flowStatus";//流程状态
     public static final String FLOW_STATUS = "flowStatus";//流程状态
     public static final String APPROVE_REMARK = "approveRemark";//流程审批意见
     public static final String APPROVE_REMARK = "approveRemark";//流程审批意见
     public static final String REDIS_LOCK_FLOW_TASK_PREFIX = "redis:lock:flow:task:";//流程节点锁
     public static final String REDIS_LOCK_FLOW_TASK_PREFIX = "redis:lock:flow:task:";//流程节点锁

+ 2 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysOrgMapper.java

@@ -34,9 +34,10 @@ public interface SysOrgMapper extends BaseMapper<SysOrg> {
      *
      *
      * @param orgId
      * @param orgId
      * @param school
      * @param school
+     * @param college
      * @return
      * @return
      */
      */
-    List<SysOrg> findByConnectByParentId(@Param("orgId") Long orgId, @Param("school") Boolean school);
+    List<SysOrg> findByConnectByParentId(@Param("orgId") Long orgId, @Param("school") Boolean school, @Param("college") Boolean college);
 
 
     /**
     /**
      * 递归树查询(同级及以下)
      * 递归树查询(同级及以下)

+ 7 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysOrgService.java

@@ -74,9 +74,10 @@ public interface SysOrgService extends IService<SysOrg> {
      *
      *
      * @param orgId
      * @param orgId
      * @param school
      * @param school
+     * @param college
      * @return
      * @return
      */
      */
-    List<SysOrg> findByConnectByParentId(Long orgId, Boolean school);
+    List<SysOrg> findByConnectByParentId(Long orgId, Boolean school, Boolean college);
 
 
     /**
     /**
      * 递归树查询(同级及以下)
      * 递归树查询(同级及以下)
@@ -88,15 +89,17 @@ public interface SysOrgService extends IService<SysOrg> {
 
 
     /**
     /**
      * 查询符合条件的机构
      * 查询符合条件的机构
+     *
      * @param orgTypeEnum 机构类型
      * @param orgTypeEnum 机构类型
-     * @param orgId 某机构下级的全部符合条件的机构
-     * @param auth 使用当前用户所在机构数据权限的机构
+     * @param orgId       某机构下级的全部符合条件的机构
+     * @param auth        使用当前用户所在机构数据权限的机构
      * @return 符合条件的机构
      * @return 符合条件的机构
      */
      */
-    List<SysOrg> findDeepByOrgIdAndType(OrgTypeEnum orgTypeEnum,Long orgId,boolean auth);
+    List<SysOrg> findDeepByOrgIdAndType(OrgTypeEnum orgTypeEnum, Long orgId, boolean auth);
 
 
     /**
     /**
      * 根据机构id查询他的父亲们
      * 根据机构id查询他的父亲们
+     *
      * @param orgId 机构id
      * @param orgId 机构id
      * @return 父亲们
      * @return 父亲们
      */
      */

+ 23 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java

@@ -113,6 +113,17 @@ public interface SysUserService extends IService<SysUser> {
      */
      */
     public List<ApproveUserResult> findByPresidentApprove(List<Long> orgIds, String realName);
     public List<ApproveUserResult> findByPresidentApprove(List<Long> orgIds, String realName);
 
 
+    /**
+     * 获取同级别下一级审批人
+     *
+     * @param courseCode
+     * @param orgIds
+     * @param realName
+     * @param flowApproveNameEnum
+     * @return
+     */
+    public List<ApproveUserResult> findByRootApprove(String courseCode, List<Long> orgIds, String realName, FlowApproveNameEnum flowApproveNameEnum);
+
     /**
     /**
      * 根据id获取
      * 根据id获取
      *
      *
@@ -123,9 +134,18 @@ public interface SysUserService extends IService<SysUser> {
 
 
     /**
     /**
      * 校验短信验证码
      * 校验短信验证码
-     * @param userId 用户id
+     *
+     * @param userId       用户id
      * @param mobileNumber 用户手机号
      * @param mobileNumber 用户手机号
-     * @param code 验证码
+     * @param code         验证码
+     */
+    void checkSmsCode(Long userId, String mobileNumber, String code);
+
+    /**
+     * 获取教研室id底下的人数量
+     *
+     * @param orgId
+     * @return
      */
      */
-    void checkSmsCode(Long userId,String mobileNumber, String code);
+    public int countByTeachingRoomId(Long orgId);
 }
 }

+ 11 - 9
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -281,11 +281,12 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
      *
      *
      * @param orgId
      * @param orgId
      * @param school
      * @param school
+     * @param college
      * @return
      * @return
      */
      */
     @Override
     @Override
-    public List<SysOrg> findByConnectByParentId(Long orgId, Boolean school) {
-        return sysOrgMapper.findByConnectByParentId(orgId, school);
+    public List<SysOrg> findByConnectByParentId(Long orgId, Boolean school, Boolean college) {
+        return sysOrgMapper.findByConnectByParentId(orgId, school, college);
     }
     }
 
 
     /**
     /**
@@ -327,27 +328,28 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
     public List<SysOrg> findParentsByOrgId(Long orgId) {
     public List<SysOrg> findParentsByOrgId(Long orgId) {
         SysOrg sysOrg = this.getById(orgId);
         SysOrg sysOrg = this.getById(orgId);
         Long parentId = sysOrg.getParentId();
         Long parentId = sysOrg.getParentId();
-        return this.findTopDFS(null,parentId);
+        return this.findTopDFS(null, parentId);
     }
     }
 
 
     /**
     /**
      * 根据子机构id深度优先搜索其父机构们
      * 根据子机构id深度优先搜索其父机构们
+     *
      * @param sysOrgList 目标父机构们
      * @param sysOrgList 目标父机构们
-     * @param orgId 子机构id
+     * @param orgId      子机构id
      * @return 父亲们
      * @return 父亲们
      */
      */
-    private List<SysOrg> findTopDFS(List<SysOrg> sysOrgList,Long orgId){
-        if (CollectionUtils.isEmpty(sysOrgList)){
+    private List<SysOrg> findTopDFS(List<SysOrg> sysOrgList, Long orgId) {
+        if (CollectionUtils.isEmpty(sysOrgList)) {
             sysOrgList = new ArrayList<>();
             sysOrgList = new ArrayList<>();
         }
         }
         SysOrg sysOrg = this.getById(orgId);
         SysOrg sysOrg = this.getById(orgId);
-        if (Objects.isNull(sysOrg)){
+        if (Objects.isNull(sysOrg)) {
             throw ExceptionResultEnum.ERROR.exception("找不到机构");
             throw ExceptionResultEnum.ERROR.exception("找不到机构");
         }
         }
         sysOrgList.add(sysOrg);
         sysOrgList.add(sysOrg);
         Long parentId = sysOrg.getParentId();
         Long parentId = sysOrg.getParentId();
-        if (SystemConstant.longNotNull(parentId)){
-            this.findTopDFS(sysOrgList,parentId);
+        if (SystemConstant.longNotNull(parentId)) {
+            this.findTopDFS(sysOrgList, parentId);
         }
         }
         return sysOrgList;
         return sysOrgList;
     }
     }

+ 79 - 24
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -172,13 +172,13 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         boolean success = this.updateById(sysUser);
         boolean success = this.updateById(sysUser);
         //如果原密码和旧密码不一致,且用户已经登陆,需要重新登录
         //如果原密码和旧密码不一致,且用户已经登陆,需要重新登录
         Object object = ServletUtil.getRequest().getAttribute(SystemConstant.SESSION);
         Object object = ServletUtil.getRequest().getAttribute(SystemConstant.SESSION);
-        if (Objects.nonNull(object)){
-            if (SystemConstant.strNotNull(newPwd)){
-                if (!Objects.equals(user.getOldPassword(), sysUser.getPassword())){
+        if (Objects.nonNull(object)) {
+            if (SystemConstant.strNotNull(newPwd)) {
+                if (!Objects.equals(user.getOldPassword(), sysUser.getPassword())) {
                     commonService.removeUserInfo(sysUser.getId(), false);
                     commonService.removeUserInfo(sysUser.getId(), false);
                 }
                 }
             } else if (SystemConstant.strNotNull(mobilePhone)) {
             } else if (SystemConstant.strNotNull(mobilePhone)) {
-                if (!Objects.equals(mobilePhone, sysUser.getMobileNumber())){
+                if (!Objects.equals(mobilePhone, sysUser.getMobileNumber())) {
                     commonService.removeUserInfo(sysUser.getId(), false);
                     commonService.removeUserInfo(sysUser.getId(), false);
                 }
                 }
             }
             }
@@ -260,6 +260,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         List<SysOrg> sysOrgList = sysOrgService.findByConnectByRootOrgId(basicCourse.getTeachingRoomId());
         List<SysOrg> sysOrgList = sysOrgService.findByConnectByRootOrgId(basicCourse.getTeachingRoomId());
         Set<Long> orgIds = sysOrgList.stream().map(s -> s.getId()).collect(Collectors.toSet());
         Set<Long> orgIds = sysOrgList.stream().map(s -> s.getId()).collect(Collectors.toSet());
         List<ApproveUserResult> sysUserList = sysUserService.filterFlowPrivilege(schoolId, orgIds, false, null, null);
         List<ApproveUserResult> sysUserList = sysUserService.filterFlowPrivilege(schoolId, orgIds, false, null, null);
+        if (Objects.isNull(sysUserList) || sysUserList.size() == 0) {
+            sysOrgList = sysOrgService.findByConnectByParentId(basicCourse.getTeachingRoomId(), true, true);
+            orgIds = sysOrgList.stream().map(s -> s.getId()).collect(Collectors.toSet());
+            sysUserList = sysUserService.filterFlowPrivilege(schoolId, orgIds, false, null, null);
+        }
         List<BlurryUserDto> blurryUserDtoList = new ArrayList<>();
         List<BlurryUserDto> blurryUserDtoList = new ArrayList<>();
         for (ApproveUserResult sysUser : sysUserList) {
         for (ApproveUserResult sysUser : sysUserList) {
             blurryUserDtoList.add(new BlurryUserDto(sysUser.getId(), sysUser.getLoginName(), sysUser.getRealName()));
             blurryUserDtoList.add(new BlurryUserDto(sysUser.getId(), sysUser.getLoginName(), sysUser.getRealName()));
@@ -337,7 +342,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 }
                 }
             }
             }
             // 手机号检验
             // 手机号检验
-            if (SystemConstant.strNotNull(mobileNumber)){
+            if (SystemConstant.strNotNull(mobileNumber)) {
                 SysUser checkMobileNumber = this.getOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getSchoolId, schoolId).eq(SysUser::getEnable, true).eq(SysUser::getMobileNumber, mobileNumber));
                 SysUser checkMobileNumber = this.getOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getSchoolId, schoolId).eq(SysUser::getEnable, true).eq(SysUser::getMobileNumber, mobileNumber));
                 if (Objects.nonNull(checkMobileNumber)) {
                 if (Objects.nonNull(checkMobileNumber)) {
                     if (!checkMobileNumber.getId().equals(userSaveParams.getId())) {
                     if (!checkMobileNumber.getId().equals(userSaveParams.getId())) {
@@ -370,7 +375,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                     commonCacheService.removeUserRolePrivilegeCache(sysUser.getId());
                     commonCacheService.removeUserRolePrivilegeCache(sysUser.getId());
                     commonService.addUserRolePrivilege(sysUser, userSaveParams.getRoleIds());
                     commonService.addUserRolePrivilege(sysUser, userSaveParams.getRoleIds());
                     commonService.removeUserInfo(sysUser.getId(), true);
                     commonService.removeUserInfo(sysUser.getId(), true);
-                }else if (!dbUser.getOrgId().equals(sysUser.getOrgId())){
+                } else if (!dbUser.getOrgId().equals(sysUser.getOrgId())) {
                     commonService.removeUserInfo(sysUser.getId(), true);
                     commonService.removeUserInfo(sysUser.getId(), true);
                 }
                 }
                 //如果修改了机构或手机号,需更新用户缓存
                 //如果修改了机构或手机号,需更新用户缓存
@@ -568,7 +573,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 userSaveParams.setOrgId(orgId);
                 userSaveParams.setOrgId(orgId);
                 userSaveParams.setRealName(name);
                 userSaveParams.setRealName(name);
                 userSaveParams.setRoleIds(roleIdList.toArray(new Long[0]));
                 userSaveParams.setRoleIds(roleIdList.toArray(new Long[0]));
-                if (SystemConstant.strNotNull(phoneNumber)){
+                if (SystemConstant.strNotNull(phoneNumber)) {
                     userSaveParams.setMobileNumber(phoneNumber);
                     userSaveParams.setMobileNumber(phoneNumber);
                 }
                 }
                 userSaveParams.setCode(code);
                 userSaveParams.setCode(code);
@@ -651,9 +656,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         List<SysOrg> sysOrgList = sysOrgService.findByConnectByRootOrgId(basicCourse.getTeachingRoomId());
         List<SysOrg> sysOrgList = sysOrgService.findByConnectByRootOrgId(basicCourse.getTeachingRoomId());
         Set<Long> orgIds = sysOrgList.stream().map(s -> s.getId()).collect(Collectors.toSet());
         Set<Long> orgIds = sysOrgList.stream().map(s -> s.getId()).collect(Collectors.toSet());
         List<ApproveUserResult> approveUserResultList = sysUserService.filterFlowPrivilege(schoolId, orgIds, true, FlowApproveNameEnum.DIRECTOR, realName);
         List<ApproveUserResult> approveUserResultList = sysUserService.filterFlowPrivilege(schoolId, orgIds, true, FlowApproveNameEnum.DIRECTOR, realName);
-        if (Objects.isNull(approveUserResultList) || approveUserResultList.size() == 0) {
-            throw ExceptionResultEnum.ERROR.exception("课程["+ basicCourse.getName() + "]未配置主任审批人");
-        }
+//        if (Objects.isNull(approveUserResultList) || approveUserResultList.size() == 0) {
+//            throw ExceptionResultEnum.ERROR.exception("课程["+ basicCourse.getName() + "]未配置主任审批人");
+//        }
         return approveUserResultList;
         return approveUserResultList;
     }
     }
 
 
@@ -666,17 +671,54 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
      */
      */
     @Override
     @Override
     public List<ApproveUserResult> findByPresidentApprove(List<Long> orgIds, String realName) {
     public List<ApproveUserResult> findByPresidentApprove(List<Long> orgIds, String realName) {
-        Long schoolId = SystemConstant.getHeadOrUserSchoolId();
-        Set<SysOrg> sysOrgSet = new HashSet<>();
-        for (Long l : orgIds) {
-            sysOrgSet.addAll(sysOrgService.findByConnectByParentId(l, true));
+        if (Objects.nonNull(orgIds) && orgIds.size() > 0) {
+            Long schoolId = SystemConstant.getHeadOrUserSchoolId();
+            Set<SysOrg> sysOrgSet = new HashSet<>();
+            for (Long l : orgIds) {
+                sysOrgSet.addAll(sysOrgService.findByConnectByParentId(l, true, false));
+            }
+            Set<Long> orgIdsSet = sysOrgSet.stream().map(s -> s.getId()).collect(Collectors.toSet());
+            List<ApproveUserResult> approveUserResultList = sysUserService.filterFlowPrivilege(schoolId, orgIdsSet, true, FlowApproveNameEnum.PRESIDENT, realName);
+//        if (Objects.isNull(approveUserResultList) || approveUserResultList.size() == 0) {
+//            throw ExceptionResultEnum.ERROR.exception("未配置院长审批人");
+//        }
+            return approveUserResultList;
+        } else {
+            return new ArrayList<>();
         }
         }
-        Set<Long> orgIdsSet = sysOrgSet.stream().map(s -> s.getId()).collect(Collectors.toSet());
-        List<ApproveUserResult> approveUserResultList = sysUserService.filterFlowPrivilege(schoolId, orgIdsSet, true, FlowApproveNameEnum.PRESIDENT, realName);
-        if (Objects.isNull(approveUserResultList) || approveUserResultList.size() == 0) {
-            throw ExceptionResultEnum.ERROR.exception("未配置院长审批人");
+    }
+
+    /**
+     * 获取同级别下一级审批人
+     *
+     * @param courseCode
+     * @param orgIds
+     * @param realName
+     * @param flowApproveNameEnum
+     * @return
+     */
+    @Override
+    public List<ApproveUserResult> findByRootApprove(String courseCode, List<Long> orgIds, String realName, FlowApproveNameEnum flowApproveNameEnum) {
+        Long schoolId = SystemConstant.getHeadOrUserSchoolId();
+        Set<Long> orgIdsSet = new HashSet<>();
+        if (Objects.nonNull(courseCode)) {
+            QueryWrapper<BasicCourse> basicCourseQueryWrapper = new QueryWrapper<>();
+            basicCourseQueryWrapper.lambda().eq(BasicCourse::getSchoolId, schoolId)
+                    .eq(BasicCourse::getCode, courseCode);
+            BasicCourse basicCourse = basicCourseService.getOne(basicCourseQueryWrapper);
+
+            if (Objects.isNull(basicCourse)) {
+                throw ExceptionResultEnum.ERROR.exception("课程数据为空");
+            }
+            if (Objects.isNull(basicCourse.getTeachingRoomId())) {
+                throw ExceptionResultEnum.ERROR.exception("课程机构为空");
+            }
+            List<SysOrg> sysOrgList = sysOrgService.findByConnectByParentId(basicCourse.getTeachingRoomId(), true, true);
+            orgIdsSet.addAll(sysOrgList.stream().map(s -> s.getId()).collect(Collectors.toSet()));
+        } else {
+            orgIdsSet.addAll(orgIds);
         }
         }
-        return approveUserResultList;
+        return sysUserService.filterFlowPrivilege(schoolId, orgIdsSet, true, flowApproveNameEnum, realName);
     }
     }
 
 
     /**
     /**
@@ -691,15 +733,15 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     }
     }
 
 
     @Override
     @Override
-    public void checkSmsCode(Long userId,String mobileNumber, String code) {
+    public void checkSmsCode(Long userId, String mobileNumber, String code) {
         SysConfig value = sysConfigService.getByKey("sys.code.enable");
         SysConfig value = sysConfigService.getByKey("sys.code.enable");
         if (Objects.nonNull(value) && value.getConfigValue().equals("true")) {
         if (Objects.nonNull(value) && value.getConfigValue().equals("true")) {
             if (Objects.isNull(code)) {
             if (Objects.isNull(code)) {
                 throw ExceptionResultEnum.ERROR.exception("验证码为空");
                 throw ExceptionResultEnum.ERROR.exception("验证码为空");
             }
             }
             if (!dictionaryConfig.smsDomain().getSmsNormalCode().equals(code)) {
             if (!dictionaryConfig.smsDomain().getSmsNormalCode().equals(code)) {
-                List<VerifyCodeCheckDto> verifyCodeCheckDtoList = this.baseMapper.findVerifyCodeByUser(userId,mobileNumber);
-                if (verifyCodeCheckDtoList.size() < 1){
+                List<VerifyCodeCheckDto> verifyCodeCheckDtoList = this.baseMapper.findVerifyCodeByUser(userId, mobileNumber);
+                if (verifyCodeCheckDtoList.size() < 1) {
                     throw ExceptionResultEnum.ERROR.exception("请确认已经发送了验证码");
                     throw ExceptionResultEnum.ERROR.exception("请确认已经发送了验证码");
                 }
                 }
                 VerifyCodeCheckDto accessControl = verifyCodeCheckDtoList.get(0);
                 VerifyCodeCheckDto accessControl = verifyCodeCheckDtoList.get(0);
@@ -714,6 +756,19 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         }
         }
     }
     }
 
 
+    /**
+     * 获取教研室id底下的人数量
+     *
+     * @param orgId
+     * @return
+     */
+    @Override
+    public int countByTeachingRoomId(Long orgId) {
+        QueryWrapper<SysUser> sysUserQueryWrapper = new QueryWrapper<>();
+        sysUserQueryWrapper.lambda().eq(SysUser::getOrgId, orgId);
+        return sysUserService.count(sysUserQueryWrapper);
+    }
+
     /**
     /**
      * 批量处理用户信息帮助类
      * 批量处理用户信息帮助类
      *
      *
@@ -740,7 +795,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 }
                 }
             }
             }
             // 手机号检验
             // 手机号检验
-            if (SystemConstant.strNotNull(mobileNumber)){
+            if (SystemConstant.strNotNull(mobileNumber)) {
                 SysUser checkMobileNumber = this.getOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getSchoolId, schoolId).eq(SysUser::getEnable, true).eq(SysUser::getMobileNumber, mobileNumber));
                 SysUser checkMobileNumber = this.getOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getSchoolId, schoolId).eq(SysUser::getEnable, true).eq(SysUser::getMobileNumber, mobileNumber));
                 if (Objects.nonNull(checkMobileNumber)) {
                 if (Objects.nonNull(checkMobileNumber)) {
                     if (!checkMobileNumber.getId().equals(userSaveParams.getId())) {
                     if (!checkMobileNumber.getId().equals(userSaveParams.getId())) {
@@ -771,7 +826,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                     List<SysUserRole> sysUserRoleCell = commonService.disposeUserPrivilege(userCell, userSaveParams.getRoleIds());
                     List<SysUserRole> sysUserRoleCell = commonService.disposeUserPrivilege(userCell, userSaveParams.getRoleIds());
                     sysUserRoleList.addAll(sysUserRoleCell);
                     sysUserRoleList.addAll(sysUserRoleCell);
                     willRemoveUserPri.add(userCell.getId());
                     willRemoveUserPri.add(userCell.getId());
-                }else if (!dbUser.getOrgId().equals(userCell.getOrgId())){
+                } else if (!dbUser.getOrgId().equals(userCell.getOrgId())) {
                     commonService.removeUserInfo(userCell.getId(), true);
                     commonService.removeUserInfo(userCell.getId(), true);
                 }
                 }
                 //如果修改了机构或手机号,需更新用户缓存
                 //如果修改了机构或手机号,需更新用户缓存

+ 4 - 1
teachcloud-common/src/main/resources/mapper/SysOrgMapper.xml

@@ -26,7 +26,10 @@
         SELECT su.* FROM (SELECT @a AS _id, (SELECT @a := so.parent_id FROM sys_org so WHERE so.id = _id) AS parent_id FROM (SELECT @a := #{orgId}) vars, sys_org h WHERE @a <![CDATA[ <> ]]> 0) temp JOIN sys_org su ON temp._id = su.id
         SELECT su.* FROM (SELECT @a AS _id, (SELECT @a := so.parent_id FROM sys_org so WHERE so.id = _id) AS parent_id FROM (SELECT @a := #{orgId}) vars, sys_org h WHERE @a <![CDATA[ <> ]]> 0) temp JOIN sys_org su ON temp._id = su.id
         <where>
         <where>
             <if test="school != null and school != '' and school == 1">
             <if test="school != null and school != '' and school == 1">
-                and su.type <![CDATA[ <> ]]> 'SCHOOL';
+                and su.type <![CDATA[ <> ]]> 'SCHOOL'
+            </if>
+            <if test="college != null and college != '' and college == 1">
+                and su.type = 'COLLEGE'
             </if>
             </if>
         </where>
         </where>
     </select>
     </select>