Răsfoiți Sursa

3.2.3 成绩归档查询

xiaofei 2 ani în urmă
părinte
comite
79cf2bd794
19 a modificat fișierele cu 320 adăugiri și 17 ștergeri
  1. 12 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamPaperStructure.java
  2. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTask.java
  3. 8 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TSyncExamStudentScoreMapper.java
  4. 18 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ConditionService.java
  5. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPaperStructureService.java
  6. 52 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ConditionServiceImpl.java
  7. 22 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPaperStructureServiceImpl.java
  8. 14 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSyncExamStudentScoreServiceImpl.java
  9. 9 0
      distributed-print-business/src/main/resources/db/3.2.3更新脚本-增量.sql
  10. 3 2
      distributed-print-business/src/main/resources/mapper/ExamPaperStructureMapper.xml
  11. 15 0
      distributed-print-business/src/main/resources/mapper/TSyncExamStudentScoreMapper.xml
  12. 70 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/ConditionController.java
  13. 21 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPaperStructureController.java
  14. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysUserMapper.java
  15. 11 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysOrgService.java
  16. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java
  17. 12 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java
  18. 10 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java
  19. 17 0
      teachcloud-common/src/main/resources/mapper/SysUserMapper.xml

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

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.business.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@@ -135,6 +136,9 @@ public class ExamPaperStructure extends BaseEntity implements Serializable {
     @TableField(exist = false)
     private String taskStatus;
 
+    @TableField(exist = false)
+    private String transferId;
+
     public Long getSchoolId() {
         return schoolId;
     }
@@ -326,4 +330,12 @@ public class ExamPaperStructure extends BaseEntity implements Serializable {
     public void setStructureChange(Boolean structureChange) {
         this.structureChange = structureChange;
     }
+
+    public String getTransferId() {
+        return transferId;
+    }
+
+    public void setTransferId(String transferId) {
+        this.transferId = transferId;
+    }
 }

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

@@ -95,6 +95,9 @@ public class ExamTask extends BaseEntity implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     @TableField("user_id")
     private Long userId;
+    @ApiModelProperty(value = "转办对象ID,目前为学院秘书")
+    @TableField(value = "transfer_id", updateStrategy = FieldStrategy.IGNORED)
+    private Long transferId;
     /**
      * NEW-新建任务,STAGE-暂存(命题中),SUBMIT-确认提交,CANCEL-撤回
      */
@@ -264,6 +267,14 @@ public class ExamTask extends BaseEntity implements Serializable {
         this.userId = userId;
     }
 
+    public Long getTransferId() {
+        return transferId;
+    }
+
+    public void setTransferId(Long transferId) {
+        this.transferId = transferId;
+    }
+
     public ExamStatusEnum getStatus() {
         return status;
     }

+ 8 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TSyncExamStudentScoreMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.distributed.print.business.bean.result.TSyncExamStudentScoreResult;
 import com.qmth.distributed.print.business.entity.TSyncExamStudentScore;
+import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -27,6 +28,7 @@ public interface TSyncExamStudentScoreMapper extends BaseMapper<TSyncExamStudent
      * @param semesterId
      * @param clazzId
      * @param courseCode
+     * @param dpr
      * @return
      */
     public IPage<TSyncExamStudentScoreResult> list(IPage<Map> iPage,
@@ -34,7 +36,8 @@ public interface TSyncExamStudentScoreMapper extends BaseMapper<TSyncExamStudent
                                                    @Param("semesterId") Long semesterId,
                                                    @Param("examId") Long examId,
                                                    @Param("clazzId") Long clazzId,
-                                                   @Param("courseCode") String courseCode);
+                                                   @Param("courseCode") String courseCode,
+                                                   @Param("dpr") DataPermissionRule dpr);
 
     /**
      * 成绩导出
@@ -49,7 +52,8 @@ public interface TSyncExamStudentScoreMapper extends BaseMapper<TSyncExamStudent
                                                     @Param("semesterId") Long semesterId,
                                                     @Param("examId") Long examId,
                                                     @Param("clazzId") Long clazzId,
-                                                    @Param("courseCode") String courseCode);
+                                                    @Param("courseCode") String courseCode,
+                                                    @Param("dpr") DataPermissionRule dpr);
 
     /**
      * 成绩导出计数
@@ -64,5 +68,6 @@ public interface TSyncExamStudentScoreMapper extends BaseMapper<TSyncExamStudent
                            @Param("semesterId") Long semesterId,
                            @Param("examId") Long examId,
                            @Param("clazzId") Long clazzId,
-                           @Param("courseCode") String courseCode);
+                           @Param("courseCode") String courseCode,
+                           @Param("dpr") DataPermissionRule dpr);
 }

+ 18 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ConditionService.java

@@ -0,0 +1,18 @@
+package com.qmth.distributed.print.business.service;
+
+import com.qmth.teachcloud.common.entity.BasicExam;
+import com.qmth.teachcloud.common.entity.BasicSemester;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 查询条件 服务类
+ * </p>
+ */
+public interface ConditionService {
+
+    List<BasicSemester> listSemester(Boolean enable);
+
+    List<BasicExam> listExam(Long semesterId, Boolean enable);
+}

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPaperStructureService.java

@@ -77,4 +77,15 @@ public interface ExamPaperStructureService extends IService<ExamPaperStructure>
     ExamPaperStructure bindMarkLeader(String data);
 
     ExamPaperStructure saveMarker(Long examPaperStructureId, GroupInfo groupInfo);
+
+    List<SysUser> listSecretary();
+
+    /**
+     * 转办/打回
+     *
+     * @param courseCode  课程代码
+     * @param paperNumber 试卷编号
+     * @param transferId  转办对象ID
+     */
+    boolean transfer(String courseCode, String paperNumber, Long transferId);
 }

+ 52 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ConditionServiceImpl.java

@@ -0,0 +1,52 @@
+package com.qmth.distributed.print.business.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.distributed.print.business.service.BasicExamService;
+import com.qmth.distributed.print.business.service.ConditionService;
+import com.qmth.teachcloud.common.entity.BasicExam;
+import com.qmth.teachcloud.common.entity.BasicSemester;
+import com.qmth.teachcloud.common.service.BasicSemesterService;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ * 查询条件 服务实现类
+ * </p>
+ */
+@Service
+public class ConditionServiceImpl implements ConditionService {
+
+    @Resource
+    BasicSemesterService basicSemesterService;
+
+    @Resource
+    BasicExamService basicExamService;
+
+    @Override
+    public List<BasicSemester> listSemester(Boolean enable) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        QueryWrapper<BasicSemester> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(BasicSemester::getSchoolId, schoolId);
+        if (enable != null) {
+            queryWrapper.lambda().eq(BasicSemester::getEnable, enable);
+        }
+        queryWrapper.lambda().orderByDesc(BasicSemester::getCreateTime);
+        return basicSemesterService.list(queryWrapper);
+    }
+
+    @Override
+    public List<BasicExam> listExam(Long semesterId, Boolean enable) {
+        QueryWrapper<BasicExam> queryWrapper = new QueryWrapper<>();
+        if (semesterId != null) {
+            queryWrapper.lambda().eq(BasicExam::getSemesterId, semesterId);
+        }
+        if (enable != null) {
+            queryWrapper.lambda().eq(BasicExam::getEnable, enable);
+        }
+        return basicExamService.list(queryWrapper);
+    }
+}

+ 22 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPaperStructureServiceImpl.java

@@ -29,10 +29,7 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.PushTypeEnum;
 import com.qmth.teachcloud.common.enums.QuestionType;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
-import com.qmth.teachcloud.common.service.BasicAttachmentService;
-import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
-import com.qmth.teachcloud.common.service.BasicSemesterService;
-import com.qmth.teachcloud.common.service.TeachcloudCommonService;
+import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.sync.CloudMarkingTaskUtils;
 import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
@@ -75,7 +72,7 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
     BasicAttachmentService basicAttachmentService;
 
     @Resource
-    CloudMarkingTaskUtils stmmsUtils;
+    CloudMarkingTaskUtils cloudMarkingTaskUtils;
 
     @Resource
     BasicSemesterService basicSemesterService;
@@ -83,6 +80,9 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
     @Resource
     BasicExamService basicExamService;
 
+    @Resource
+    SysUserService sysUserService;
+
     @Resource
     ExamPaperGroupService examPaperGroupService;
 
@@ -280,7 +280,7 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
         for (String str : paperType.split(",")) {
             Map<String, Object> map = new HashMap<>();
             map.put("paperType", str);
-            String result = stmmsUtils.queryPaperStructure(examPaperStructure.getSchoolId(), String.valueOf(examPaperStructure.getThirdRelateId()), examTask.getPaperNumberId() + str, str);
+            String result = cloudMarkingTaskUtils.queryPaperStructure(examPaperStructure.getSchoolId(), String.valueOf(examPaperStructure.getThirdRelateId()), examTask.getPaperNumberId() + str, str);
             List<Map> paperStructure = JSONObject.parseArray(JSONObject.toJSON(result).toString(), Map.class);
             map.put("content", paperStructure);
             list.add(map);
@@ -445,6 +445,22 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
         return examPaperStructure;
     }
 
+    @Override
+    public List<SysUser> listSecretary() {
+        return sysUserService.listSecretary();
+    }
+
+    @Override
+    public boolean transfer(String courseCode, String paperNumber, Long transferId) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
+        // transferId为空时,则为打回给命题老师
+        UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(ExamTask::getTransferId, transferId)
+                .eq(ExamTask::getId, examTask.getId());
+        return examTaskService.update(updateWrapper);
+    }
+
     /**
      * 保存试卷结构
      *

+ 14 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSyncExamStudentScoreServiceImpl.java

@@ -10,12 +10,15 @@ import com.qmth.distributed.print.business.entity.TSyncExamStudentScore;
 import com.qmth.distributed.print.business.enums.ImageTrajectoryEnum;
 import com.qmth.distributed.print.business.mapper.TSyncExamStudentScoreMapper;
 import com.qmth.distributed.print.business.service.TSyncExamStudentScoreService;
+import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicRoleDataPermission;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.LocalCatalogEnum;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
+import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.util.*;
 import org.apache.commons.codec.digest.DigestUtils;
@@ -53,6 +56,9 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
     @Resource
     TeachcloudCommonService teachcloudCommonService;
 
+    @Resource
+    BasicRoleDataPermissionService basicRoleDataPermissionService;
+
     /**
      * 同步成绩查询列表
      *
@@ -74,7 +80,8 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
             throw ExceptionResultEnum.ERROR.exception("请选择课程");
         }
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        IPage<TSyncExamStudentScoreResult> list = tSyncExamStudentScoreMapper.list(iPage, sysUser.getSchoolId(), semesterId, examId, clazzId, courseCode);
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), ServletUtil.getRequest().getServletPath());
+        IPage<TSyncExamStudentScoreResult> list = tSyncExamStudentScoreMapper.list(iPage, sysUser.getSchoolId(), semesterId, examId, clazzId, courseCode, dpr);
         list.getRecords().stream().map(m -> {
             String localSheetUrls = m.getLocalSheetUrls();
             if (StringUtils.isNotBlank(localSheetUrls)) {
@@ -102,7 +109,9 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
      */
     @Override
     public List<TSyncExamStudentScoreResult> export(Long schoolId, Long semesterId, Long examId, Long clazzId, String courseCode) {
-        return tSyncExamStudentScoreMapper.export(schoolId, semesterId, examId, clazzId, courseCode);
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, sysUser.getId(), ServletUtil.getRequest().getServletPath());
+        return tSyncExamStudentScoreMapper.export(schoolId, semesterId, examId, clazzId, courseCode, dpr);
     }
 
     /**
@@ -116,7 +125,9 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
      */
     @Override
     public int exportCount(Long schoolId, Long semesterId, Long examId, Long clazzId, String courseCode) {
-        return tSyncExamStudentScoreMapper.exportCount(schoolId, semesterId, examId, clazzId, courseCode);
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, sysUser.getId(), ServletUtil.getRequest().getServletPath());
+        return tSyncExamStudentScoreMapper.exportCount(schoolId, semesterId, examId, clazzId, courseCode, dpr);
     }
 
     /**

+ 9 - 0
distributed-print-business/src/main/resources/db/3.2.3更新脚本-增量.sql

@@ -41,6 +41,15 @@ DROP COLUMN `third_relate_id`;
 
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('856', '查看', 'Preview', 'LINK', '624', '8', 'AUTH', '1', '0', '1');
 
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('857', '转办/打回', 'Transfer', 'LINL', '488', '10', 'AUTH', '858,859', '1', '0', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('858', '查询教学秘书', '/api/admin/exam/structure/list_secretary', 'URL', '488', '11', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('859', '转办/打回', '/api/admin/exam/structure/transfer', 'URL', '488', '12', 'AUTH', '1', '1', '1');
+
+
+ALTER TABLE `exam_task` ADD COLUMN `transfer_id` BIGINT(10) NULL COMMENT '转办人ID' AFTER `user_id`;
+
+
+
 /*王亮新增*/
 INSERT INTO sys_role
 (id, school_id, org_id, name, enable, `type`, create_id, create_time, update_id, update_time, default_role, source, interpret)

+ 3 - 2
distributed-print-business/src/main/resources/mapper/ExamPaperStructureMapper.xml

@@ -22,7 +22,8 @@
             IFNULL(eps.status, 'INIT') status,
             eps.paper_answer paperAnswer,
             et.user_id propositionTeacherId,
-            eps.mark_leader markLeader
+            eps.mark_leader markLeader,
+            et.transfer_id transferId
         FROM
             exam_print_plan epp
                 LEFT JOIN
@@ -61,7 +62,7 @@
                 AND es.paper_type = eps.paper_type
         WHERE
             epp.school_id = #{schoolId}
-            and et.user_id = #{propositionTeacherId}
+            and ifnull(et.transfer_id ,et.user_id) = #{propositionTeacherId}
         <if test="semesterId != null and semesterId != ''">
             and bs.id = #{semesterId}
         </if>

+ 15 - 0
distributed-print-business/src/main/resources/mapper/TSyncExamStudentScoreMapper.xml

@@ -40,6 +40,10 @@
             bs.school_id = et.school_id and edc.course_code = et.course_code and edc.paper_number = et.paper_number
         join basic_exam be on
             et.exam_id = be.id
+        join basic_course bc on
+            et.school_id = bc.school_id and et.course_code = bc.code
+        left join teach_course tc on
+            bc.school_id = tc.school_id and bc.id = tc.basic_course_id
     </sql>
 
     <sql id="footCommonSql">
@@ -59,6 +63,17 @@
             <if test="courseCode != null and courseCode != ''">
                 and edc.course_code = #{courseCode}
             </if>
+            <if test="dpr != null">
+                <if test="dpr.requestUserId != null">
+                    AND tc.user_id = #{dpr.requestUserId}
+                </if>
+                <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                    AND bc.org_id IN
+                    <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                </if>
+            </if>
             order by tsess.exam_id
         </where>
     </sql>

+ 70 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/ConditionController.java

@@ -0,0 +1,70 @@
+package com.qmth.distributed.print.api;
+
+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.EditResult;
+import com.qmth.distributed.print.business.service.ConditionService;
+import com.qmth.teachcloud.common.annotation.OperationLogDetail;
+import com.qmth.teachcloud.common.bean.params.BasicCollegeParams;
+import com.qmth.teachcloud.common.bean.result.BasicCollegeResult;
+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.log.CustomizedOperationTypeEnum;
+import com.qmth.teachcloud.common.service.BasicCollegeService;
+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.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 查询条件
+ */
+@Api(tags = "查询条件Controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_BASIC + "/condition")
+@Aac(auth = BOOL.FALSE)
+public class ConditionController {
+    @Resource
+    private ConditionService conditionService;
+
+    @ApiOperation(value = "学期")
+    @RequestMapping(value = "/list_semester", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicCollegeResult.class)})
+    public Result listSemester(@ApiParam(value = "启用/禁用") @RequestParam(required = false) Boolean enable) {
+        return ResultUtil.ok(conditionService.listSemester(enable));
+    }
+
+    @ApiOperation(value = "考试")
+    @RequestMapping(value = "/list_exam", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicCollegeResult.class)})
+    public Result listExam(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
+                           @ApiParam(value = "启用/禁用") @RequestParam(required = false) Boolean enable) {
+        return ResultUtil.ok(conditionService.listExam(semesterId, enable));
+    }
+
+    @ApiOperation(value = "课程")
+    @RequestMapping(value = "/list_course", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicCollegeResult.class)})
+    public Result listCourse(@ApiParam(value = "启用/禁用") @RequestParam(required = false) Boolean enable) {
+        return ResultUtil.ok(conditionService.listSemester(enable));
+    }
+
+    @ApiOperation(value = "试卷编号")
+    @RequestMapping(value = "/list_paper_number", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicCollegeResult.class)})
+    public Result listPaperNumber(@ApiParam(value = "启用/禁用") @RequestParam(required = false) Boolean enable) {
+        return ResultUtil.ok(conditionService.listSemester(enable));
+    }
+
+}

+ 21 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPaperStructureController.java

@@ -44,9 +44,6 @@ public class ExamPaperStructureController {
     @Resource
     private ExamPaperStructureService examPaperStructureService;
 
-    @Resource
-    private ExamPaperGroupService examPaperGroupService;
-
     @Resource
     private AsyncCloudMarkingTaskService asyncCloudMarkingTaskService;
 
@@ -194,5 +191,26 @@ public class ExamPaperStructureController {
                                                @ApiParam(value = "试卷类型", required = true) @RequestParam String paperType) {
         return ResultUtil.ok(examPaperStructureService.findCardJpgFileByPaperNumber(SystemConstant.convertIdToLong(examId), courseCode, paperNumber, paperType));
     }
+
+    /**
+     * 查询教学秘书
+     */
+    @ApiOperation(value = "查询")
+    @RequestMapping(value = "/list_secretary", method = RequestMethod.POST)
+    public Result listSecretary() {
+        return ResultUtil.ok(examPaperStructureService.listSecretary());
+    }
+
+    /**
+     * 查询教学秘书
+     */
+    @ApiOperation(value = "转办/打回")
+    @RequestMapping(value = "/transfer", method = RequestMethod.POST)
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.UPDATE)
+    public Result transfer(@ApiParam(value = "课程代码", required = true) @RequestParam String courseCode,
+                           @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
+                           @ApiParam(value = "用户ID", required = false) @RequestParam Long transferId) {
+        return ResultUtil.ok(examPaperStructureService.transfer(courseCode, paperNumber, transferId));
+    }
 }
 

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysUserMapper.java

@@ -133,4 +133,6 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      * @return
      */
     List<SysUserResult> findCourseSysUserResultList(@Param("schoolId") Long schoolId, @Param("courseCode") String courseCode);
+
+    List<SysUser> findByRoleTypeAndOrgId(@Param("roleType") String roleType, @Param("orgId") Long orgId);
 }

+ 11 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysOrgService.java

@@ -172,6 +172,7 @@ public interface SysOrgService extends IService<SysOrg> {
 
     /**
      * 查找顶级机构
+     *
      * @param schoolId
      * @return
      */
@@ -179,13 +180,23 @@ public interface SysOrgService extends IService<SysOrg> {
 
     /**
      * 根据课程代码,查询所属学院
+     *
      * @param courseCode
      * @return
      */
     SysOrg findCollegeByCourseCode(Long schoolId, String courseCode);
 
+    /**
+     * 根据机构Id,查询所属学院
+     *
+     * @param orgId 机构ID
+     * @return
+     */
+    SysOrg findCollegeByOrgId(Long schoolId, Long orgId);
+
     /**
      * 根据机构代码查询
+     *
      * @param orgCode
      * @return
      */

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java

@@ -283,4 +283,6 @@ public interface SysUserService extends IService<SysUser> {
      * @return
      */
     List<SysUserResult> findCourseSysUserResultList(Long schoolId, String courseCode);
+
+    List<SysUser> listSecretary();
 }

+ 12 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -587,6 +587,18 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         return collegeOrg;
     }
 
+    @Override
+    public SysOrg findCollegeByOrgId(Long schoolId, Long orgId) {
+        // 顶级机构
+        SysOrg rootOrg = this.findRootOrg(schoolId);
+
+        List<SysOrg> sysOrgList = this.findByConnectByParentId(Long.valueOf(orgId), false, false);
+        if (sysOrgList.isEmpty()) {
+            return null;
+        }
+        return sysOrgList.stream().filter(m -> m.getParentId().equals(rootOrg.getId())).findFirst().orElseGet(null);
+    }
+
     @Override
     public SysOrg findByCode(String orgCode) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());

+ 10 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -1115,6 +1115,16 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return sysUserMapper.findCourseSysUserResultList(schoolId, courseCode);
     }
 
+    @Override
+    public List<SysUser> listSecretary() {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        SysOrg sysOrg = sysOrgService.findCollegeByOrgId(sysUser.getSchoolId(), sysUser.getOrgId());
+        if(sysOrg != null){
+            this.baseMapper.findByRoleTypeAndOrgId(RoleTypeEnum.ASSISTANT.name(), sysOrg.getId());
+        }
+        return null;
+    }
+
     /**
      * 批量处理用户信息帮助类
      *

+ 17 - 0
teachcloud-common/src/main/resources/mapper/SysUserMapper.xml

@@ -491,4 +491,21 @@
         order by
             su.login_name
     </select>
+    <select id="findByRoleTypeAndOrgId" resultType="com.qmth.teachcloud.common.entity.SysUser">
+        SELECT
+            *
+        FROM
+            sys_user su
+        WHERE
+            su.org_id = #{orgId}
+          AND EXISTS( SELECT
+                          1
+                      FROM
+                          sys_user_role sur
+                              JOIN
+                          sys_role sr ON sur.role_id = sr.id
+                      WHERE
+                          su.id = sur.user_id
+                        AND sr.type = #{roleType})
+    </select>
 </mapper>