Ver Fonte

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

xiaof há 3 anos atrás
pai
commit
153af1e65b

+ 12 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTask.java

@@ -101,6 +101,18 @@ public class ExamTask extends BaseEntity implements Serializable {
     @TableField(exist = false)
     private List<Map<String, String>> users;
 
+    @ApiModelProperty(value = "流程id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long flowId;
+
+    public Long getFlowId() {
+        return flowId;
+    }
+
+    public void setFlowId(Long flowId) {
+        this.flowId = flowId;
+    }
+
     public static long getSerialVersionUID() {
         return serialVersionUID;
     }

+ 2 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ActivitiService.java

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.business.service;
 
+import org.activiti.engine.runtime.ProcessInstance;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
@@ -34,7 +35,7 @@ public interface ActivitiService {
      * @param processKey
      * @param map
      */
-    void startActivity(String processKey, Map<String, Object> map);
+    public ProcessInstance startActivity(String processKey, Map<String, Object> map);
 
     /**
      * 获取任务列表

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

@@ -40,8 +40,17 @@ public interface ExamTaskService extends IService<ExamTask> {
 
     boolean enable(ExamTask examTask);
 
+    @Deprecated
     ExamTask saveExamTask(ExamTask examTask);
 
+    /**
+     * 保存命题任务新
+     *
+     * @param examTask
+     * @return
+     */
+    ExamTask saveExamTaskNew(ExamTask examTask);
+
     ExamTaskImportDto importFile(MultipartFile file) throws IOException, NoSuchFieldException;
 
     List<ExamTask> saveBatch(ExamTask task);
@@ -119,6 +128,7 @@ public interface ExamTaskService extends IService<ExamTask> {
 
     /**
      * 根据命题任务id从('exam_task_detail'表和'exam_task_paper_log'表查找审核样品信息)
+     *
      * @param examTaskId 命题任务主键
      * @return 命题任务信息
      */

+ 2 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -103,7 +103,7 @@ public class ActivitiServiceImpl implements ActivitiService {
      * @param map
      */
     @Override
-    public void startActivity(String processKey, Map<String, Object> map) {
+    public ProcessInstance startActivity(String processKey, Map<String, Object> map) {
         ProcessInstance processInstance = null;
         if (Objects.nonNull(map) && map.size() > 0) {
             processInstance = runtimeService.startProcessInstanceByKey(processKey, map);
@@ -111,6 +111,7 @@ public class ActivitiServiceImpl implements ActivitiService {
             processInstance = runtimeService.startProcessInstanceByKey(processKey);
         }
         log.info("流程id:{},processInstanceId:{},processDefinitionId:{},processDefinitionKey:{}", processInstance.getId(), processInstance.getProcessInstanceId(), processInstance.getProcessDefinitionId(), processInstance.getProcessDefinitionKey());
+        return processInstance;
     }
 
     /**

+ 68 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.google.gson.Gson;
+import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.entity.*;
@@ -25,8 +26,11 @@ import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import com.qmth.teachcloud.common.enums.TaskTypeEnum;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.ExcelUtil;
+import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.common.util.excel.ExcelError;
+import org.activiti.engine.ActivitiObjectNotFoundException;
+import org.activiti.engine.runtime.ProcessInstance;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -121,6 +125,9 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Resource
     TeachcloudCommonService teachcloudCommonService;
 
+    @Resource
+    ActivitiService activitiService;
+
     @Override
     public List<ExamTask> listByCourseCode(Long schoolId, String code) {
         QueryWrapper<ExamTask> queryWrapper = new QueryWrapper<>();
@@ -240,6 +247,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         return this.update(updateWrapper);
     }
 
+    @Deprecated
     @Override
     public ExamTask saveExamTask(ExamTask examTask) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
@@ -278,6 +286,66 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         return examTask;
     }
 
+    /**
+     * 保存命题任务新
+     *
+     * @param examTask
+     * @return
+     */
+    @Override
+    @Transactional
+    public ExamTask saveExamTaskNew(ExamTask examTask) {
+        try {
+            Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+            examTask.setSchoolId(schoolId);
+            SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+
+            if (StringUtils.isNotBlank(examTask.getPaperNumber())) {
+                QueryWrapper<ExamTask> taskQueryWrapper = new QueryWrapper<>();
+                taskQueryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getPaperNumber, examTask.getPaperNumber());
+                ExamTask task = this.getOne(taskQueryWrapper);
+                if (task != null) {
+                    throw ExceptionResultEnum.ERROR.exception("试卷编号已存在");
+                }
+            } else {
+                // 试卷编号生成规则:年月日(例如:20100419)+0000(例如:0001)顺序编号
+                String paperNumber = printCommonService.createPaperNumber(schoolId);
+                examTask.setPaperNumber(paperNumber);
+            }
+
+            QueryWrapper<BasicExamRule> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(BasicExamRule::getSchoolId, examTask.getSchoolId());
+            BasicExamRule basicExamRule = basicExamRuleService.getOne(queryWrapper);
+            if (basicExamRule == null) {
+                throw ExceptionResultEnum.ERROR.exception("通用规则未设置");
+            }
+            examTask.setCreateId(sysUser.getId());
+            examTask.setReview(basicExamRule.getReview());
+            examTask.setOrgId(sysUser.getOrgId());
+
+            Map<String, Object> map = new HashMap<>();
+            map.computeIfAbsent(SystemConstant.TEACH_ID, v -> String.valueOf(sysUser.getId()));
+            ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
+            examTask.setFlowId(Long.parseLong(processInstance.getId()));
+            this.save(examTask);
+
+//        if (examTask.getUserId() == null) {
+//            examTask.setStatus(ExamStatusEnum.NEW);
+//        } else {
+//            examTask.setStatus(ExamStatusEnum.READY);
+//        }
+        } catch (Exception e) {
+            log.error("请求出错", e);
+            if (e instanceof ActivitiObjectNotFoundException) {
+                ResultUtil.error("流程不存在");
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+            e.printStackTrace();
+        }
+        return examTask;
+    }
+
     @Override
     public ExamTaskImportDto importFile(MultipartFile file) throws IOException, NoSuchFieldException {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());

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

@@ -53,10 +53,10 @@ public class ActivitiController {
     @ApiOperation(value = "启动流程")
     @RequestMapping(value = "/startActivity", method = RequestMethod.POST)
     public Result startActivity(@RequestParam(value = "processKey") String processKey) {
-//        Map<String, Object> map = new HashMap<>();
-//        map.put("userId", 1L);
-//        map.put("approveId", 2L);
-//        map.put("assigneeId", 3L);
+        Map<String, Object> map = new HashMap<>();
+        map.put("userId", 1L);
+        map.put("approveId", 2L);
+        map.put("assigneeId", 3L);
         activitiService.startActivity(processKey, null);
         return ResultUtil.ok();
     }

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

@@ -1,6 +1,8 @@
 package com.qmth.distributed.print.api;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+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.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.*;
@@ -50,6 +52,7 @@ import java.util.*;
 @Api(tags = "命题任务Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.exam}/task")
+@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
 public class ExamTaskController {
 
     @Autowired
@@ -176,7 +179,7 @@ public class ExamTaskController {
     @ApiOperation(value = "新建")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     public Result save(@RequestBody ExamTask examTask) {
-        ExamTask task = examTaskService.saveExamTask(examTask);
+        ExamTask task = examTaskService.saveExamTaskNew(examTask);
         //发送短信
         if (task.getId() != null) {
             basicMessageService.sendNoticeTaskCreate(task);

+ 40 - 6
distributed-print/src/main/java/com/qmth/distributed/print/api/TFFlowController.java

@@ -1,8 +1,7 @@
 package com.qmth.distributed.print.api;
 
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.annotation.BOOL;
@@ -13,7 +12,9 @@ import com.qmth.distributed.print.business.entity.TFFlow;
 import com.qmth.distributed.print.business.service.ActivitiService;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.service.TFFlowService;
-import com.qmth.teachcloud.common.bean.result.LoginResult;
+import com.qmth.teachcloud.common.base.BaseListPage;
+import com.qmth.teachcloud.common.base.BasePage;
+import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
@@ -24,6 +25,9 @@ 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.*;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.task.Task;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.dao.DuplicateKeyException;
@@ -35,7 +39,9 @@ import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
-import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 
 /**
@@ -65,6 +71,12 @@ public class TFFlowController {
     @Resource
     TFFlowService tfFlowService;
 
+    @Resource
+    RuntimeService runtimeService;
+
+    @Resource
+    TaskService taskService;
+
     @ApiOperation(value = "注册流程")
     @Transactional
     @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = ResultUtil.class)})
@@ -125,10 +137,32 @@ public class TFFlowController {
     @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = TFFlow.class)})
     @RequestMapping(value = "/list", method = RequestMethod.POST)
     public Result list(@ApiParam(value = "流程名称", required = false) @RequestParam(required = false) String name,
-                       @ApiParam(value = "页码", required = false) @RequestParam(value = "pageNumber", required = true) Integer pageNumber,
-                       @ApiParam(value = "数量", required = false) @RequestParam(value = "pageSize", required = true) Integer pageSize) {
+                       @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()));
     }
+
+    @ApiOperation(value = "启动流程")
+    @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = ResultUtil.class)})
+    @RequestMapping(value = "/start", method = RequestMethod.POST)
+    public Result start() {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Map<String, Object> map = new HashMap<>();
+        map.computeIfAbsent(SystemConstant.TEACH_ID, v -> String.valueOf(sysUser.getId()));
+        activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "命题老师获取待办流程")
+    @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = ResultUtil.class)})
+    @RequestMapping(value = "teach/task/list", method = RequestMethod.POST)
+    public Result teachTaskList(@ApiParam(value = "页码", required = true) @RequestParam Integer pageNumber,
+                                @ApiParam(value = "数量", required = true) @RequestParam Integer pageSize) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        List<Task> taskList = taskService.createTaskQuery().taskAssignee(String.valueOf(sysUser.getId())).orderByTaskCreateTime().desc().list();
+//        BaseListPage<Task> taskIPage = new BaseListPage<>(tasks.subList(pageNumber, pageSize), pageNumber, pageSize, tasks.size());
+        return ResultUtil.ok(true);
+    }
 }

+ 1 - 1
distributed-print/src/main/resources/processes/GdykdxPaperApprove.bpmn

@@ -2,7 +2,7 @@
 <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
   <process id="GdykdxPaperApprove" name="GdykdxPaperApprove" isExecutable="true">
     <startEvent id="startevent1" name="Start"></startEvent>
-    <userTask id="usertask1" name="提交试卷(命题老师)"></userTask>
+    <userTask id="usertask1" name="提交试卷(命题老师)" activiti:assignee="${teachId}"></userTask>
     <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
     <userTask id="usertask2" name="审核试卷(教研室主任)">
       <extensionElements>

+ 64 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/base/BaseListPage.java

@@ -0,0 +1,64 @@
+package com.qmth.teachcloud.common.base;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 分页封装
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2020/8/7
+ */
+public class BaseListPage<T> implements Serializable {
+    @ApiModelProperty(value = "当前第几页(从1开始)")
+    private int current;
+
+    @ApiModelProperty(value = "每页条数")
+    private int size;
+
+    @ApiModelProperty(value = "总条数")
+    private int total;
+
+    @ApiModelProperty(value = "内容列表")
+    private List<T> records;
+
+    public BaseListPage(List<T> records, long current, long size, long total) {
+        this.current = (int) current;
+        this.size = (int) size;
+        this.total = (int) total;
+        this.records = records;
+    }
+
+    public int getCurrent() {
+        return current;
+    }
+
+    public int getSize() {
+        return size;
+    }
+
+    public int getTotal() {
+        return total;
+    }
+
+    public List<T> getRecords() {
+        return records;
+    }
+
+    /**
+     * 总页数
+     */
+    public int getPages() {
+        if (getSize() == 0) {
+            return 0;
+        }
+        int pages = getTotal() / getSize();
+        if (getTotal() % getSize() != 0) {
+            pages++;
+        }
+        return pages;
+    }
+}

+ 3 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -71,6 +71,7 @@ public class SystemConstant {
     public static final String PARENT_ORG = "武汉大学教务处";
     public static final String SCHOOL_CODE = "wdfx";
     public static final String ADMIN_CODE = "admin";
+    public static final String AUTH = "auth";//命题老师id
 //    public static final int MAX_RETRY_CREATE_PDF_COUNT = 5;
 
     /**
@@ -179,8 +180,8 @@ public class SystemConstant {
      * activiti
      */
     public static final String PROCESSES = "processes";
-    public static final String GDYKDX_FLOW_KEY = "GdykdxPaperApprove";
-
+    public static final String GDYKDX_FLOW_KEY = "GdykdxPaperApprove";//流程key
+    public static final String TEACH_ID = "teachId";//命题老师id
 
     /**
      * 初始化附件文件路径

+ 3 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FieldUniqueEnum.java

@@ -13,13 +13,13 @@ public enum FieldUniqueEnum {
 
     user_schoolId_orgId_loginName_idx("登录名"),
 
-    schoolId_name_idx("角色名"),
-
     org_schoolId_code_idx("机构编码"),
 
     org_schoolId_name_idx("机构名称"),
 
-    flow_schoolId_name_idx("流程名称");
+    flow_schoolId_name_idx("流程名称"),
+
+    role_schoolId_name_idx("角色名");
 
     private String title;
 

+ 3 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/AuthUtil.java

@@ -170,10 +170,10 @@ public class AuthUtil {
         Map<String, Boolean> map = new HashMap<>();
         Aac beanTypeAac = handlerMethod.getBeanType().getAnnotation(Aac.class);
         Aac classAac = handlerMethod.getMethodAnnotation(Aac.class);
-        map.computeIfAbsent("auth", v -> beanTypeAac.auth() == BOOL.TRUE ? true : false);
-        map.computeIfAbsent("auth", v -> classAac.auth() == BOOL.TRUE ? true : false);
+        map.computeIfAbsent(SystemConstant.AUTH, v -> beanTypeAac.auth() == BOOL.TRUE ? true : false);
+        map.computeIfAbsent(SystemConstant.AUTH, v -> classAac.auth() == BOOL.TRUE ? true : false);
 
-        if (Objects.nonNull(map.get("auth")) && !map.get("auth")) {
+        if (Objects.nonNull(map.get(SystemConstant.AUTH)) && !map.get(SystemConstant.AUTH)) {
             return true;
         }
         Set<String> urls = authBean.getUrls();