浏览代码

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

xiaof 3 年之前
父节点
当前提交
a706ff718f
共有 17 个文件被更改,包括 544 次插入72 次删除
  1. 65 9
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/WorkResult.java
  2. 13 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TFFlowApprove.java
  3. 37 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TFFlowLog.java
  4. 13 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskMapper.java
  5. 21 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ActivitiService.java
  6. 12 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java
  7. 95 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java
  8. 20 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  9. 56 0
      distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml
  10. 2 4
      distributed-print/src/main/java/com/qmth/distributed/print/api/TFFlowController.java
  11. 63 45
      distributed-print/src/main/java/com/qmth/distributed/print/api/WorkController.java
  12. 12 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  13. 44 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowApproveLevelEnum.java
  14. 46 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowApproveOperationEnum.java
  15. 42 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowApprovePassEnum.java
  16. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowStatusEnum.java
  17. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

+ 65 - 9
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/WorkResult.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.enums.FlowStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
@@ -53,7 +54,7 @@ public class WorkResult implements Serializable {
     Long endTime;
 
     @ApiModelProperty(value = "状态")
-    String status;
+    FlowStatusEnum status;
 
     @ApiModelProperty(value = "剩余天数")
     Integer remainCount;
@@ -70,6 +71,69 @@ public class WorkResult implements Serializable {
     @ApiModelProperty(value = "当前服务器时间")
     Long systemCurrentTime;
 
+    @ApiModelProperty(value = "执行id")
+    String executionId;
+
+    @ApiModelProperty(value = "流程实例id")
+    String flowId;
+
+    @ApiModelProperty(value = "任务节点名称")
+    String taskName;
+
+    @ApiModelProperty(value = "任务节点key")
+    String taskDefKey;
+
+    @ApiModelProperty(value = "任务节点id")
+    String taskId;
+
+    public FlowStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(FlowStatusEnum status) {
+        this.status = status;
+    }
+
+    public String getFlowId() {
+        return flowId;
+    }
+
+    public void setFlowId(String flowId) {
+        this.flowId = flowId;
+    }
+
+    public String getExecutionId() {
+        return executionId;
+    }
+
+    public void setExecutionId(String executionId) {
+        this.executionId = executionId;
+    }
+
+    public String getTaskName() {
+        return taskName;
+    }
+
+    public void setTaskName(String taskName) {
+        this.taskName = taskName;
+    }
+
+    public String getTaskDefKey() {
+        return taskDefKey;
+    }
+
+    public void setTaskDefKey(String taskDefKey) {
+        this.taskDefKey = taskDefKey;
+    }
+
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
     public Long getId() {
         return id;
     }
@@ -158,14 +222,6 @@ public class WorkResult implements Serializable {
         this.endTime = endTime;
     }
 
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
     public Integer getRemainCount() {
         return remainCount;
     }

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

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.common.base.BaseEntity;
+import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.FlowStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -33,9 +34,20 @@ public class TFFlowApprove extends BaseEntity implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     private Long approveId;
 
-    @ApiModelProperty(value = "状态,DRAFT:草稿,SUBMIT:已提交,AUDITING:审核中,REJECT:已驳回,END:已终止,FINISH:已结束")
+    @ApiModelProperty(value = "状态,DRAFT:草稿,TO_BE_SUBMIT:待提交,SUBMIT:已提交,AUDITING:审核中,REJECT:已驳回,END:已终止,FINISH:已结束")
     private FlowStatusEnum status;
 
+    public TFFlowApprove() {
+
+    }
+
+    public TFFlowApprove(Long flowId, Long approveId, FlowStatusEnum status, Long userId) {
+        this.flowId = flowId;
+        this.approveId = approveId;
+        this.status = status;
+        insertInfo(userId);
+    }
+
     public FlowStatusEnum getStatus() {
         return status;
     }

+ 37 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TFFlowLog.java

@@ -3,6 +3,10 @@ package com.qmth.distributed.print.business.entity;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.common.base.BaseEntity;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.enums.FlowApproveLevelEnum;
+import com.qmth.teachcloud.common.enums.FlowApproveOperationEnum;
+import com.qmth.teachcloud.common.enums.FlowApprovePassEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -21,7 +25,6 @@ public class TFFlowLog extends BaseEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-
     @ApiModelProperty(value = "流程id")
     @JsonSerialize(using = ToStringSerializer.class)
     private Long flowId;
@@ -43,6 +46,39 @@ public class TFFlowLog extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "是否启用,0:停用,1:启用")
     private Boolean enable;
 
+    @ApiModelProperty(value = "审批操作,SUBMIT:提交,APPROVE:审批,REJECT:驳回,END:终止")
+    private FlowApproveOperationEnum approveOperation;
+
+    @ApiModelProperty(value = "审批是否通过,PASS:通过,NO_PASS:不通过")
+    private FlowApprovePassEnum approvePass;
+
+    public TFFlowLog() {
+
+    }
+
+    public TFFlowLog(Long flowId, Long taskId, Long approveId, Long userId) {
+        this.flowId = flowId;
+        this.approveId = approveId;
+        this.taskId = taskId;
+        insertInfo(userId);
+    }
+
+    public FlowApproveOperationEnum getApproveOperation() {
+        return approveOperation;
+    }
+
+    public void setApproveOperation(FlowApproveOperationEnum approveOperation) {
+        this.approveOperation = approveOperation;
+    }
+
+    public FlowApprovePassEnum getApprovePass() {
+        return approvePass;
+    }
+
+    public void setApprovePass(FlowApprovePassEnum approvePass) {
+        this.approvePass = approvePass;
+    }
+
     public static long getSerialVersionUID() {
         return serialVersionUID;
     }

+ 13 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskMapper.java

@@ -51,12 +51,12 @@ public interface ExamTaskMapper extends BaseMapper<ExamTask> {
     IPage<WorkResult> queryByMyWork(IPage<Map> iPage,
                                     @Param("userId") Long userId,
                                     @Param("schoolId") Long schoolId,
-                                    @Param("status") String...status);
+                                    @Param("status") String... status);
 
     IPage<WorkResult> queryUserByMyWork(IPage<Map> iPage,
-                                    @Param("userId") Long userId,
-                                    @Param("schoolId") Long schoolId,
-                                    @Param("status") String...status);
+                                        @Param("userId") Long userId,
+                                        @Param("schoolId") Long schoolId,
+                                        @Param("status") String... status);
 
     /**
      * 查询我的工作台
@@ -70,7 +70,7 @@ public interface ExamTaskMapper extends BaseMapper<ExamTask> {
     IPage<WorkResult> queryByMyWorkSubmit(IPage<Map> iPage,
                                           @Param("userId") Long userId,
                                           @Param("schoolId") Long schoolId,
-                                          @Param("status") String...status);
+                                          @Param("status") String... status);
 
     IPage<ClientExamTaskDto> listClientExamTaskPage(Page<ClientExamTaskDto> page, @Param("schoolId") Long schoolId, @Param("machineCode") String machineCode, @Param("printPlanId") Long printPlanId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("isTry") Boolean isTry, @Param("isPass") Boolean isPass, @Param("orgIds") Set<Long> orgIds, @Param("printPlanStatus") String printPlanStatus, @Param("examDetailStatus") String[] examDetailStatus);
 
@@ -80,6 +80,7 @@ public interface ExamTaskMapper extends BaseMapper<ExamTask> {
 
     /**
      * 查询审核样品
+     *
      * @param examTaskId 命题任务id
      * @return 结果
      */
@@ -90,4 +91,11 @@ public interface ExamTaskMapper extends BaseMapper<ExamTask> {
     List<ExamTask> listExamTaskAuditExpire(@Param("startTime") Long startTime, @Param("endTime") Long endTime);
 
     List<ExamTaskDetailDto> listTaskPaper(@Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("orgIds") Set<Long> orgIds, @Param("containsQuestionTeacher") boolean containsQuestionTeacher, @Param("userId") Long userId);
+
+    /**
+     * 获取待办任务
+     *
+     * @return
+     */
+    public IPage<WorkResult> getFlowTaskReadyList(IPage<Map> iPage, @Param("schoolId") Long schoolId, @Param("orgId") Long orgId, @Param("userId") String userId);
 }

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

@@ -55,4 +55,25 @@ public interface ActivitiService {
      * @param flowId
      */
     void deleteProcessInstance(String flowId);
+
+    /**
+     * 记录流程日志
+     *
+     * @param map
+     */
+    public void flowLog(Map<String, Object> map);
+
+    /**
+     * 根据taskId获取任务
+     *
+     * @param taskId
+     */
+    public void approveByTaskId(Long taskId);
+
+    /**
+     * 根据id获取任务列表
+     *
+     * @param userId
+     */
+    public void getTaskList(Long userId);
 }

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

@@ -7,6 +7,7 @@ import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.ExamTaskDetail;
 import com.qmth.distributed.print.business.entity.ExamTaskReviewLog;
+import com.qmth.distributed.print.business.entity.TFFlow;
 import com.qmth.distributed.print.business.enums.ExamStatusEnum;
 import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
 import com.qmth.teachcloud.common.entity.SysUser;
@@ -147,4 +148,15 @@ public interface ExamTaskService extends IService<ExamTask> {
     List<ExamTaskDetailDto> listTaskPaper(String courseCode, String paperNumber, Long startTime, Long endTime);
 
     TBTask taskDownloadPdf(String courseCode, String paperNumber, Long startTime, Long endTime);
+
+    /**
+     * 获取待办任务
+     *
+     * @param iPage
+     * @param schoolId
+     * @param orgId
+     * @param userId
+     * @return
+     */
+    public IPage<WorkResult> getFlowTaskReadyList(IPage<Map> iPage, Long schoolId, Long orgId, Long userId);
 }

+ 95 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -1,16 +1,31 @@
 package com.qmth.distributed.print.business.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.distributed.print.business.entity.TFFlowApprove;
+import com.qmth.distributed.print.business.entity.TFFlowLog;
 import com.qmth.distributed.print.business.service.ActivitiService;
+import com.qmth.distributed.print.business.service.TFFlowApproveService;
+import com.qmth.distributed.print.business.service.TFFlowLogService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.FlowStatusEnum;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import org.activiti.engine.HistoryService;
 import org.activiti.engine.RepositoryService;
 import org.activiti.engine.RuntimeService;
 import org.activiti.engine.TaskService;
+import org.activiti.engine.impl.RepositoryServiceImpl;
+import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
+import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
+import org.activiti.engine.impl.persistence.entity.TaskEntity;
 import org.activiti.engine.repository.DeploymentBuilder;
 import org.activiti.engine.runtime.ProcessInstance;
 import org.activiti.engine.task.Task;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
@@ -41,6 +56,15 @@ public class ActivitiServiceImpl implements ActivitiService {
     @Resource
     private RepositoryService repositoryService;
 
+    @Resource
+    TFFlowApproveService tfFlowApproveService;
+
+    @Resource
+    TFFlowLogService tfFlowLogService;
+
+    @Resource
+    HistoryService historyService;
+
     /**
      * 注册流程
      *
@@ -137,4 +161,75 @@ public class ActivitiServiceImpl implements ActivitiService {
     public void deleteProcessInstance(String flowId) {
         runtimeService.deleteProcessInstance(flowId, "结束");
     }
+
+    /**
+     * 记录流程日志
+     *
+     * @param map
+     */
+    @Override
+    @Transactional
+    public void flowLog(Map<String, Object> map) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        if (Objects.isNull(map.get(SystemConstant.FLOW_ID))) {
+            throw ExceptionResultEnum.ERROR.exception("流程id不能为空");
+        }
+        Long flowId = (Long) map.get(SystemConstant.FLOW_ID);
+        if (Objects.isNull(map.get(SystemConstant.TASK_ID))) {
+            throw ExceptionResultEnum.ERROR.exception("命题任务id不能为空");
+        }
+        Long taskId = (Long) map.get(SystemConstant.TASK_ID);
+        if (Objects.isNull(map.get(SystemConstant.FLOW_STATUS))) {
+            throw ExceptionResultEnum.ERROR.exception("流程状态不能为空");
+        }
+        FlowStatusEnum flowStatusEnum = (FlowStatusEnum) map.get(SystemConstant.FLOW_STATUS);
+        Long teachId = Objects.nonNull(map.get(SystemConstant.TEACH_ID)) ? Long.parseLong(String.valueOf(map.get(SystemConstant.TEACH_ID))) : null;
+        QueryWrapper<TFFlowApprove> tfFlowApproveQueryWrapper = new QueryWrapper<>();
+        tfFlowApproveQueryWrapper.lambda().eq(TFFlowApprove::getFlowId, flowId);
+        TFFlowApprove tfFlowApprove = tfFlowApproveService.getOne(tfFlowApproveQueryWrapper);
+        if (Objects.isNull(tfFlowApprove)) {//新建流程
+            tfFlowApprove = new TFFlowApprove(flowId, teachId, flowStatusEnum, sysUser.getId());
+        } else {//更新流程
+            tfFlowApprove.updateInfo(sysUser.getId());
+            tfFlowApprove.setApproveId(teachId);
+            tfFlowApprove.setStatus(flowStatusEnum);
+        }
+        tfFlowApproveService.saveOrUpdate(tfFlowApprove);
+
+        //增加流水
+        if (flowStatusEnum != FlowStatusEnum.DRAFT && flowStatusEnum != FlowStatusEnum.TO_BE_SUBMIT) {
+            Task task = taskService.createTaskQuery().taskId(String.valueOf(taskId)).singleResult();
+            String processInstanceId = task.getProcessInstanceId();
+
+            // 流程标示
+            String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().getProcessDefinitionId();
+            ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinitionId);
+            ExecutionEntity execution = (ExecutionEntity) runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+            // 当前实例的执行到哪个节点
+            String activitiId = execution.getActivityId();
+            String currentActivityId = execution.getCurrentActivityId();
+            List<TaskEntity> taskEntityList = execution.getTasks();
+            // 获得当前任务的所有节点
+//        List<ActivityImpl> activitiList = def.getIdentityLinks();
+            TFFlowLog tfFlowLog = new TFFlowLog(flowId, taskId, teachId, sysUser.getId());
+        }
+    }
+
+    /**
+     * 根据任务id获取task
+     *
+     * @param taskId
+     */
+    @Override
+    @Transactional
+    public void approveByTaskId(Long taskId) {
+        Task task1 = taskService.createTaskQuery().taskId(String.valueOf(taskId)).singleResult();
+        taskService.complete(String.valueOf(taskId));
+        Task task2 = taskService.createTaskQuery().taskId(String.valueOf(taskId)).singleResult();
+    }
+
+    @Override
+    public void getTaskList(Long userId) {
+
+    }
 }

+ 20 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -22,6 +22,7 @@ import com.qmth.teachcloud.common.bean.dto.CourseInfoDto;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.FlowStatusEnum;
 import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import com.qmth.teachcloud.common.enums.TaskTypeEnum;
 import com.qmth.teachcloud.common.service.*;
@@ -319,6 +320,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             if (basicExamRule == null) {
                 throw ExceptionResultEnum.ERROR.exception("通用规则未设置");
             }
+            examTask.setId(SystemConstant.getDbUuid());
             examTask.setCreateId(sysUser.getId());
             examTask.setReview(basicExamRule.getReview());
             examTask.setOrgId(sysUser.getOrgId());
@@ -329,11 +331,10 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             examTask.setFlowId(Long.parseLong(processInstance.getId()));
             this.save(examTask);
 
-//        if (examTask.getUserId() == null) {
-//            examTask.setStatus(ExamStatusEnum.NEW);
-//        } else {
-//            examTask.setStatus(ExamStatusEnum.READY);
-//        }
+            map.computeIfAbsent(SystemConstant.FLOW_ID, v -> examTask.getFlowId());
+            map.computeIfAbsent(SystemConstant.TASK_ID, v -> examTask.getId());
+            map.computeIfAbsent(SystemConstant.FLOW_STATUS, v -> Objects.isNull(examTask.getUserId()) ? FlowStatusEnum.DRAFT : FlowStatusEnum.TO_BE_SUBMIT);
+            activitiService.flowLog(map);
         } catch (Exception e) {
             log.error("请求出错", e);
             if (e instanceof ActivitiObjectNotFoundException) {
@@ -1291,4 +1292,18 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
         return tbTask;
     }
+
+    /**
+     * 获取待办任务
+     *
+     * @param iPage
+     * @param schoolId
+     * @param orgId
+     * @param userId
+     * @return
+     */
+    @Override
+    public IPage<WorkResult> getFlowTaskReadyList(IPage<Map> iPage, Long schoolId, Long orgId, Long userId) {
+        return examTaskMapper.getFlowTaskReadyList(iPage, schoolId, orgId, String.valueOf(userId));
+    }
 }

+ 56 - 0
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -662,4 +662,60 @@
         </if>
         and et.enable = 1
     </sql>
+
+    <select id="getFlowTaskReadyList" resultType="com.qmth.distributed.print.business.bean.result.WorkResult">
+            SELECT
+                et.id,
+                et.school_id schoolId,
+                et.course_code courseCode,
+                et.course_name courseName,
+                et.specialty,
+                et.paper_number paperNumber,
+                et.card_rule_id cardRuleId,
+                case
+                    et.card_rule_id when -1 then '全部通卡'
+                    else b.name
+                end cardRuleName,
+                art.ASSIGNEE_ userId,
+                c.real_name userName,
+                et.start_time startTime,
+                et.end_time endTime,
+                tffa.status,
+                et.enable,
+                et.create_id createId,
+                et.create_time createTime,
+                art.EXECUTION_ID_ as executionId,
+                et.flow_id as flowId,
+                art.NAME_ as taskName,
+                art.TASK_DEF_KEY_ as taskDefKey,
+                art.ID_ as taskId
+            FROM
+                exam_task et
+            LEFT JOIN
+                        basic_card_rule b ON
+                et.card_rule_id = b.id
+            LEFT JOIN
+                        exam_task_paper_log d ON
+                et.id = d.exam_task_id
+                and d.review = false
+            LEFT JOIN
+                        sys_user c ON
+                et.user_id = c.id
+            left join ACT_RU_TASK art on
+                art.PROC_INST_ID_ = et.flow_id
+            left join t_f_flow_approve tffa
+                on tffa.flow_id = et.flow_id
+        <where>
+                <if test="userId != null and userId != ''">
+                    and art.ASSIGNEE_ = #{userId}
+                </if>
+                <if test="schoolId != null and schoolId != ''">
+                    and et.school_id = #{schoolId}
+                </if>
+                <if test="orgId != null and orgId != ''">
+                    and et.org_id = #{orgId}
+                </if>
+            </where>
+    </select>
+
 </mapper>

+ 2 - 4
distributed-print/src/main/java/com/qmth/distributed/print/api/TFFlowController.java

@@ -99,8 +99,7 @@ public class TFFlowController {
             }
             activitiService.uploadDeployment(file);
             SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-            Long schoolId = Objects.nonNull(ServletUtil.getRequestHeaderSchoolIdByNotVaild()) && !Objects.equals("", ServletUtil.getRequestHeaderSchoolIdByNotVaild()) ? Long.parseLong(ServletUtil.getRequestHeaderSchoolIdByNotVaild().toString()) : sysUser.getSchoolId();
-            TFFlow tfFlow = new TFFlow(schoolId, sysUser.getOrgId(), Objects.isNull(name) ? fileName : name, publish, sysUser.getId());
+            TFFlow tfFlow = new TFFlow(SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId(), Objects.isNull(name) ? fileName : name, publish, sysUser.getId());
             tfFlowService.save(tfFlow);
         } catch (Exception e) {
             log.error("请求出错", e);
@@ -140,8 +139,7 @@ public class TFFlowController {
                        @ApiParam(value = "页码", required = true) @RequestParam Integer pageNumber,
                        @ApiParam(value = "数量", required = true) @RequestParam Integer pageSize) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        Long schoolId = Objects.nonNull(ServletUtil.getRequestHeaderSchoolIdByNotVaild()) && !Objects.equals("", ServletUtil.getRequestHeaderSchoolIdByNotVaild()) ? Long.parseLong(ServletUtil.getRequestHeaderSchoolIdByNotVaild().toString()) : sysUser.getSchoolId();
-        return ResultUtil.ok(tfFlowService.list(new Page<>(pageNumber, pageSize), name, schoolId, sysUser.getOrgId()));
+        return ResultUtil.ok(tfFlowService.list(new Page<>(pageNumber, pageSize), name, SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId()));
     }
 
     @ApiOperation(value = "启动流程")

+ 63 - 45
distributed-print/src/main/java/com/qmth/distributed/print/api/WorkController.java

@@ -1,6 +1,8 @@
 package com.qmth.distributed.print.api;
 
 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.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.enums.ExamStatusEnum;
@@ -10,16 +12,14 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.*;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.Objects;
 
 /**
  * @Description: 工作台 前端控制器
@@ -31,60 +31,78 @@ import javax.annotation.Resource;
 @Api(tags = "工作台Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.work}")
+@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
 public class WorkController {
 
     @Resource
     ExamTaskService examTaskService;
 
-    @ApiOperation(value = "命题待办接口")
+    //    @ApiOperation(value = "命题待办接口")
+//    @RequestMapping(value = "/exam/task/ready", method = RequestMethod.POST)
+//    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = WorkResult.class)})
+//    public Result examTaskReady(@RequestParam(value = "pageNumber", required = true) Integer pageNumber,
+//                                @RequestParam(value = "pageSize", required = true) Integer pageSize) {
+//        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+//        return ResultUtil.ok(examTaskService.queryUserByMyWork(new Page<>(pageNumber, pageSize), sysUser.getId(), sysUser.getSchoolId(), ExamStatusEnum.READY.name(), ExamStatusEnum.STAGE.name()));
+//    }
+//
+//    @ApiOperation(value = "命题待办计数接口")
+//    @RequestMapping(value = "/exam/task/ready_count", method = RequestMethod.POST)
+//    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = WorkResult.class)})
+//    public Result examTaskReadyCount() {
+//        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+//        return ResultUtil.ok(examTaskService.queryUserByMyWork(new Page<>(SystemConstant.PAGE_NUMBER, SystemConstant.PAGE_SIZE), sysUser.getId(), sysUser.getSchoolId(), ExamStatusEnum.READY.name(), ExamStatusEnum.STAGE.name()).getRecords().size());
+//    }
+//
+//    @ApiOperation(value = "命题分配待办接口")
+//    @RequestMapping(value = "/exam/task/new", method = RequestMethod.POST)
+//    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = WorkResult.class)})
+//    public Result examTaskNew(@RequestParam(value = "pageNumber", required = true) Integer pageNumber,
+//                              @RequestParam(value = "pageSize", required = true) Integer pageSize) {
+//        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+//        return ResultUtil.ok(examTaskService.queryByMyWork(new Page<>(pageNumber, pageSize), sysUser.getId(), sysUser.getSchoolId(), ExamStatusEnum.NEW.name()));
+//    }
+//
+//    @ApiOperation(value = "命题分配待办计数接口")
+//    @RequestMapping(value = "/exam/task/new_count", method = RequestMethod.POST)
+//    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = WorkResult.class)})
+//    public Result examTaskNewCount() {
+//        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+//        return ResultUtil.ok(examTaskService.queryByMyWork(new Page<>(SystemConstant.PAGE_NUMBER, SystemConstant.PAGE_SIZE), sysUser.getId(), sysUser.getSchoolId(), ExamStatusEnum.NEW.name()).getRecords().size());
+//    }
+//
+//    @ApiOperation(value = "审核待办接口")
+//    @RequestMapping(value = "/exam/task/submit", method = RequestMethod.POST)
+//    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = WorkResult.class)})
+//    public Result examTaskSubmit(@RequestParam(value = "pageNumber", required = true) Integer pageNumber,
+//                                 @RequestParam(value = "pageSize", required = true) Integer pageSize) {
+//        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+//        return ResultUtil.ok(examTaskService.queryByMyWorkSubmit(new Page<>(pageNumber, pageSize), sysUser.getId(), sysUser.getSchoolId(), ExamStatusEnum.SUBMIT));
+//    }
+//
+//    @ApiOperation(value = "审核待办计数接口")
+//    @RequestMapping(value = "/exam/task/submit_count", method = RequestMethod.POST)
+//    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = WorkResult.class)})
+//    public Result examTaskSubmitCount() {
+//        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+//        return ResultUtil.ok(examTaskService.queryByMyWorkSubmit(new Page<>(SystemConstant.PAGE_NUMBER, SystemConstant.PAGE_SIZE), sysUser.getId(), sysUser.getSchoolId(), ExamStatusEnum.SUBMIT).getRecords().size());
+//    }
+
+    @ApiOperation(value = "获取待办接口")
     @RequestMapping(value = "/exam/task/ready", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = WorkResult.class)})
-    public Result examTaskReady(@RequestParam(value = "pageNumber", required = true) Integer pageNumber,
-                                @RequestParam(value = "pageSize", required = true) Integer pageSize) {
+    public Result getFlowTaskReady(@ApiParam(value = "页码", required = true) @RequestParam Integer pageNumber,
+                                   @ApiParam(value = "数量", required = true) @RequestParam Integer pageSize) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(examTaskService.queryUserByMyWork(new Page<>(pageNumber, pageSize), sysUser.getId(), sysUser.getSchoolId(), ExamStatusEnum.READY.name(), ExamStatusEnum.STAGE.name()));
+        return ResultUtil.ok(examTaskService.getFlowTaskReadyList(new Page<>(pageNumber, pageSize), SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId(), sysUser.getId()));
     }
 
-    @ApiOperation(value = "命题待办计数接口")
+    @ApiOperation(value = "获取待办计数接口")
     @RequestMapping(value = "/exam/task/ready_count", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = WorkResult.class)})
-    public Result examTaskReadyCount() {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(examTaskService.queryUserByMyWork(new Page<>(SystemConstant.PAGE_NUMBER, SystemConstant.PAGE_SIZE), sysUser.getId(), sysUser.getSchoolId(), ExamStatusEnum.READY.name(), ExamStatusEnum.STAGE.name()).getRecords().size());
-    }
-
-    @ApiOperation(value = "命题分配待办接口")
-    @RequestMapping(value = "/exam/task/new", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = WorkResult.class)})
-    public Result examTaskNew(@RequestParam(value = "pageNumber", required = true) Integer pageNumber,
-                              @RequestParam(value = "pageSize", required = true) Integer pageSize) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(examTaskService.queryByMyWork(new Page<>(pageNumber, pageSize), sysUser.getId(), sysUser.getSchoolId(), ExamStatusEnum.NEW.name()));
-    }
-
-    @ApiOperation(value = "命题分配待办计数接口")
-    @RequestMapping(value = "/exam/task/new_count", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = WorkResult.class)})
-    public Result examTaskNewCount() {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(examTaskService.queryByMyWork(new Page<>(SystemConstant.PAGE_NUMBER, SystemConstant.PAGE_SIZE), sysUser.getId(), sysUser.getSchoolId(), ExamStatusEnum.NEW.name()).getRecords().size());
-    }
-
-    @ApiOperation(value = "审核待办接口")
-    @RequestMapping(value = "/exam/task/submit", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = WorkResult.class)})
-    public Result examTaskSubmit(@RequestParam(value = "pageNumber", required = true) Integer pageNumber,
-                                 @RequestParam(value = "pageSize", required = true) Integer pageSize) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(examTaskService.queryByMyWorkSubmit(new Page<>(pageNumber, pageSize), sysUser.getId(), sysUser.getSchoolId(), ExamStatusEnum.SUBMIT));
-    }
-
-    @ApiOperation(value = "审核待办计数接口")
-    @RequestMapping(value = "/exam/task/submit_count", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = WorkResult.class)})
-    public Result examTaskSubmitCount() {
+    public Result getFlowTaskReadyCount() {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(examTaskService.queryByMyWorkSubmit(new Page<>(SystemConstant.PAGE_NUMBER, SystemConstant.PAGE_SIZE), sysUser.getId(), sysUser.getSchoolId(), ExamStatusEnum.SUBMIT).getRecords().size());
+        return ResultUtil.ok(examTaskService.getFlowTaskReadyList(new Page<>(SystemConstant.PAGE_NUMBER, SystemConstant.PAGE_SIZE), SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId(), sysUser.getId()).getRecords().size());
     }
 }
 

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

@@ -1,7 +1,9 @@
 package com.qmth.teachcloud.common.contant;
 
 import com.qmth.boot.core.uid.service.UidService;
+import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.util.ServletUtil;
 
 import java.io.File;
 import java.nio.charset.Charset;
@@ -182,6 +184,9 @@ public class SystemConstant {
     public static final String PROCESSES = "processes";
     public static final String GDYKDX_FLOW_KEY = "GdykdxPaperApprove";//流程key
     public static final String TEACH_ID = "teachId";//命题老师id
+    public static final String FLOW_ID = "flowId";//流程id
+    public static final String TASK_ID = "taskId";//命题任务id
+    public static final String FLOW_STATUS = "flowStatus";//流程状态
 
     /**
      * 初始化附件文件路径
@@ -284,10 +289,16 @@ public class SystemConstant {
 
     /**
      * Long 类型的参数不为空
+     *
      * @param x 参数
      * @return true:不为空、false:为空
      */
-    public static boolean longNotNull(Long x){
+    public static boolean longNotNull(Long x) {
         return x != null && x > 0;
     }
+
+    public static Long getHeadOrUserSchoolId() {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        return Objects.nonNull(ServletUtil.getRequestHeaderSchoolIdByNotVaild()) ? Long.parseLong(ServletUtil.getRequestHeaderSchoolIdByNotVaild().toString()) : sysUser.getSchoolId();
+    }
 }

+ 44 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowApproveLevelEnum.java

@@ -0,0 +1,44 @@
+package com.qmth.teachcloud.common.enums;
+
+import java.util.Objects;
+
+/**
+ * @Description: 流程审批等级 enum
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/8/2
+ */
+public enum FlowApproveLevelEnum {
+
+    START("发起人"),
+
+    PRIMARY("一级审核人"),
+
+    SECOND("二级审核人");
+
+    private String title;
+
+    private FlowApproveLevelEnum(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param title
+     * @return
+     */
+    public static String convertToName(String title) {
+        for (FlowApproveLevelEnum e : FlowApproveLevelEnum.values()) {
+            if (Objects.equals(title, e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 46 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowApproveOperationEnum.java

@@ -0,0 +1,46 @@
+package com.qmth.teachcloud.common.enums;
+
+import java.util.Objects;
+
+/**
+ * @Description: 流程审批操作 enum
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/8/2
+ */
+public enum FlowApproveOperationEnum {
+
+    SUBMIT("提交"),
+
+    APPROVE("审批"),
+
+    REJECT("驳回"),
+
+    END("终止");
+
+    private String title;
+
+    private FlowApproveOperationEnum(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param title
+     * @return
+     */
+    public static String convertToName(String title) {
+        for (FlowApproveOperationEnum e : FlowApproveOperationEnum.values()) {
+            if (Objects.equals(title, e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 42 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowApprovePassEnum.java

@@ -0,0 +1,42 @@
+package com.qmth.teachcloud.common.enums;
+
+import java.util.Objects;
+
+/**
+ * @Description: 流程是否通过操作 enum
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/8/2
+ */
+public enum FlowApprovePassEnum {
+
+    PASS("通过"),
+
+    NO_PASS("不通过");
+
+    private String title;
+
+    private FlowApprovePassEnum(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param title
+     * @return
+     */
+    public static String convertToName(String title) {
+        for (FlowApprovePassEnum e : FlowApprovePassEnum.values()) {
+            if (Objects.equals(title, e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowStatusEnum.java

@@ -13,6 +13,8 @@ public enum FlowStatusEnum {
 
     DRAFT("草稿"),
 
+    TO_BE_SUBMIT("待提交"),
+
     SUBMIT("已提交"),
 
     AUDITING("审核中"),

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -247,7 +247,7 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
                 int count = Objects.nonNull(sysRoleList) && sysRoleList.size() > 0 ? (int) sysRoleList.stream().filter(s -> Objects.equals(s.getName(), RoleTypeEnum.ADMIN.getDesc())).count() : 0;
                 QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
                 if (count > 0) {//超级系统管理员
-                    Long schoolId = (Long) ServletUtil.getRequestHeaderSchoolIdByNotVaild();
+                    Long schoolId = Long.parseLong(ServletUtil.getRequestHeaderSchoolIdByNotVaild().toString());
                     sysPrivilegeQueryWrapper.lambda().eq(SysPrivilege::getSchoolId, schoolId)
                             .eq(SysPrivilege::getType, PrivilegeEnum.URL)
                             .eq(SysPrivilege::getProperty, PrivilegePropertyEnum.AUTH);