Browse Source

3.2.3 查询条件优化

xiaofei 2 years ago
parent
commit
164dd391ae
18 changed files with 462 additions and 20 deletions
  1. 12 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TSyncExamStudentScore.java
  2. 32 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ConditionMapper.java
  3. 8 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ConditionService.java
  4. 80 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ConditionServiceImpl.java
  5. 3 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/PushLogicServiceImpl.java
  6. 8 1
      distributed-print-business/src/main/resources/db/3.2.3更新脚本-增量.sql
  7. 238 0
      distributed-print-business/src/main/resources/mapper/ConditionMapper.xml
  8. 1 1
      distributed-print-business/src/main/resources/mapper/TSyncExamStudentScoreMapper.xml
  9. 18 4
      distributed-print/src/main/java/com/qmth/distributed/print/api/ConditionController.java
  10. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPaperStructureController.java
  11. 1 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  12. 1 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/ExceptionResultEnum.java
  13. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/RoleSourceEnum.java
  14. 10 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicRoleDataPermissionService.java
  15. 30 9
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicRoleDataPermissionServiceImpl.java
  16. 2 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java
  17. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java
  18. 15 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/ServletUtil.java

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

@@ -61,6 +61,9 @@ public class TSyncExamStudentScore implements Serializable {
     @ApiModelProperty(value = "姓名")
     private String name;
 
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
     @ApiModelProperty(value = "科目代码")
     private String subjectCode;
 
@@ -147,6 +150,7 @@ public class TSyncExamStudentScore implements Serializable {
         this.examNumber = (String) map.get("examNumber");
         this.studentCode = (String) map.get("studentCode");
         this.name = (String) map.get("name");
+        this.paperNumber = (String) map.get("paperNumber");
         this.subjectCode = (String) map.get("subjectCode");
         this.subjectName = (String) map.get("subjectName");
         this.paperType = (String) map.get("paperType");
@@ -294,6 +298,14 @@ public class TSyncExamStudentScore implements Serializable {
         this.name = name;
     }
 
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
     public String getSubjectCode() {
         return subjectCode;
     }

+ 32 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ConditionMapper.java

@@ -0,0 +1,32 @@
+package com.qmth.distributed.print.business.mapper;
+
+import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
+import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
+import com.qmth.teachcloud.common.entity.BasicCourse;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 查询条件 Mapper 接口
+ * </p>
+ */
+public interface ConditionMapper {
+
+    List<BasicCourse> listCourse(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("enable") Boolean enable, @Param("printPlanIds") List<String> printPlanIds, @Param("dpr") DataPermissionRule dpr);
+
+    List<String> listPaperNumber(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("printPlanIds") List<String> printPlanIds, @Param("dpr") DataPermissionRule dpr);
+
+    List<BasicCourse> listCourseForApply(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("enable") Boolean enable, @Param("userId") Long userId);
+
+    List<BasicCourse> listCourseForAudit(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("enable") Boolean enable, @Param("userId") Long userId);
+
+    List<String> listPaperNumberForApply(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("userId") Long userId);
+
+    List<String> listPaperNumberAudit(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("userId") Long userId);
+
+    List<PrintPlanBrief> listPrintPlan(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("dpr") DataPermissionRule dpr);
+
+    List<BasicCourse> listCourseForScore(@Param("semesterId") Long semesterId, @Param("examId") Long examId,@Param("dpr") DataPermissionRule dpr);
+}

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

@@ -1,5 +1,7 @@
 package com.qmth.distributed.print.business.service;
 
+import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
+import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.BasicExam;
 import com.qmth.teachcloud.common.entity.BasicSemester;
 
@@ -15,4 +17,10 @@ public interface ConditionService {
     List<BasicSemester> listSemester(Boolean enable);
 
     List<BasicExam> listExam(Long semesterId, Boolean enable);
+
+    List<BasicCourse> listCourse(Long semesterId, Long examId, Boolean enable, List<String> printPlanId);
+
+    List<String> listPaperNumber(Long semesterId, Long examId, String courseCode, List<String> printPlanId);
+
+    List<PrintPlanBrief> listPrintPlan(Long semesterId, Long examId);
 }

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

@@ -1,10 +1,16 @@
 package com.qmth.distributed.print.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
+import com.qmth.distributed.print.business.mapper.ConditionMapper;
 import com.qmth.distributed.print.business.service.BasicExamService;
 import com.qmth.distributed.print.business.service.ConditionService;
+import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
+import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.BasicExam;
 import com.qmth.teachcloud.common.entity.BasicSemester;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.service.BasicSemesterService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
@@ -26,6 +32,12 @@ public class ConditionServiceImpl implements ConditionService {
     @Resource
     BasicExamService basicExamService;
 
+    @Resource
+    BasicRoleDataPermissionService basicRoleDataPermissionService;
+
+    @Resource
+    ConditionMapper conditionMapper;
+
     @Override
     public List<BasicSemester> listSemester(Boolean enable) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
@@ -49,4 +61,72 @@ public class ConditionServiceImpl implements ConditionService {
         }
         return basicExamService.list(queryWrapper);
     }
+
+    @Override
+    public List<BasicCourse> listCourse(Long semesterId, Long examId, Boolean enable, List<String> printPlanIds) {
+        Long privilegeId = ServletUtil.getCurrentPrivilegeId();
+
+        DataPermissionRule dpr = new DataPermissionRule();
+        // 未找到权限菜单,默认为本人权限
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+
+        // 入库申请菜单
+        if ("40".equals(privilegeId)) {
+            return conditionMapper.listCourseForApply(semesterId, examId, enable, sysUser.getId());
+        }
+        // 入库审核菜单
+        else if ("41".equals(privilegeId)) {
+            return conditionMapper.listCourseForAudit(semesterId, examId, enable, sysUser.getId());
+        }
+        // 成绩查询
+        else if ("487".equals(privilegeId)) {
+            return conditionMapper.listCourseForScore(semesterId, examId, dpr);
+        } else {
+            return conditionMapper.listCourse(semesterId, examId, enable, printPlanIds, dpr);
+        }
+    }
+
+    @Override
+    public List<String> listPaperNumber(Long semesterId, Long examId, String courseCode, List<String> printPlanIds) {
+        Long privilegeId = ServletUtil.getCurrentPrivilegeId();
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(privilegeId);
+        // 未找到权限菜单,默认为本人权限
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+
+        // 如果byAssignUser为true时,不能通过层级关系查询
+        if (privilegeId == null) {
+            dpr.setRequestUserId(sysUser.getId());
+            dpr.setOrgIdSet(null);
+        } else {
+            dpr = basicRoleDataPermissionService.findDataPermission(privilegeId);
+        }
+
+        // 入库申请菜单
+        if ("40".equals(privilegeId)) {
+            return conditionMapper.listPaperNumberForApply(semesterId, examId, courseCode, sysUser.getId());
+        }
+        // 入库审核菜单
+        else if ("41".equals(privilegeId)) {
+            return conditionMapper.listPaperNumberAudit(semesterId, examId, courseCode, sysUser.getId());
+        } else {
+            return conditionMapper.listPaperNumber(semesterId, examId, courseCode, printPlanIds, dpr);
+        }
+    }
+
+    @Override
+    public List<PrintPlanBrief> listPrintPlan(Long semesterId, Long examId) {
+        Long privilegeId = ServletUtil.getCurrentPrivilegeId();
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(privilegeId);
+        // 未找到权限菜单,默认为本人权限
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+
+        // 如果byAssignUser为true时,不能通过层级关系查询
+        if (privilegeId == null) {
+            dpr.setRequestUserId(sysUser.getId());
+            dpr.setOrgIdSet(null);
+        } else {
+            dpr = basicRoleDataPermissionService.findDataPermission(privilegeId);
+        }
+        return conditionMapper.listPrintPlan(semesterId, examId, dpr);
+    }
 }

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/PushLogicServiceImpl.java

@@ -65,6 +65,7 @@ public class PushLogicServiceImpl implements PushLogicService {
                             Long orgId = null, clazzId = null;
                             String clazzName = "";
                             String majorName = "";
+                            String paperNumber = "";
                             if (Objects.nonNull(student.get("studentCode")) && !Objects.equals("无", student.get("studentCode"))) {
                                 String studentCode = String.valueOf(student.get("studentCode"));
                                 String subjectCode = String.valueOf(student.get("subjectCode"));
@@ -83,9 +84,11 @@ public class PushLogicServiceImpl implements PushLogicService {
                                 clazzId = dpsPrintStuMap.get("clazzId") == null || "".equals(dpsPrintStuMap.get("clazzId")) ? null : Long.parseLong(String.valueOf(dpsPrintStuMap.get("clazzId")));
                                 clazzName = String.valueOf(dpsPrintStuMap.get("clazzName"));
                                 majorName = String.valueOf(dpsPrintStuMap.get("majorName"));
+                                paperNumber = String.valueOf(dpsPrintStuMap.get("paperNumber"));
                                 student.put("clazzId", clazzId);
                                 student.put("clazzName", clazzName);
                                 student.put("majorName", majorName);
+                                student.put("paperNumber", paperNumber);
                             }
 
                             student.put(SystemConstant.SCHOOL_ID, schoolId);

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

@@ -41,13 +41,20 @@ 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`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('857', '转办/打回', 'Transfer', 'LINK', '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_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('860', '共用接口-查询学期', '/api/admin/basic/condition/list_semester', 'URL', '149', '8', 'SYS', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('861', '共用接口-查询考试', '/api/admin/basic/condition/list_exam', 'URL', '149', '9', 'SYS', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('862', '共用接口-查询计划', '/api/admin/basic/condition/list_print_plan', 'URL', '149', '10', 'SYS', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('863', '共用接口-查询课程', '/api/admin/basic/condition/list_course', 'URL', '149', '11', 'SYS', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('864', '共用接口-查询试卷编号', '/api/admin/basic/condition/list_paper_number', 'URL', '149', '12', 'SYS', '1', '1', '1');
+
+ALTER TABLE `t_sync_exam_student_score` ADD COLUMN `paper_number` VARCHAR(45) NULL COMMENT '试卷编号' AFTER `name`;
 
 
 /*王亮新增*/

+ 238 - 0
distributed-print-business/src/main/resources/mapper/ConditionMapper.xml

@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.qmth.distributed.print.business.mapper.ConditionMapper">
+    <select id="listCourse" resultType="com.qmth.teachcloud.common.entity.BasicCourse">
+        SELECT
+            bc.code code,
+            bc.name name
+        FROM
+            basic_course bc
+        <where>
+            EXISTS( SELECT
+                        1
+                    FROM
+                        exam_task et
+                            LEFT JOIN
+                        basic_exam be ON et.exam_id = be.id
+                    <where>
+                        bc.school_id = et.school_id
+                      AND bc.code = et.course_code
+                      <if test="semesterId != null">
+                          AND be.semester_id = #{semesterId}
+                      </if>
+                        <if test="examId != null">
+                            AND et.exam_id = #{examId}
+                        </if>
+                        <if test="dpr != null">
+                            <if test="dpr.requestUserId != null">
+                                AND et.create_id = #{dpr.requestUserId}
+                            </if>
+                            <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                                AND et.org_id IN
+                                <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                                    #{item}
+                                </foreach>
+                            </if>
+                        </if>
+                    </where>)
+            <if test="enable != null">
+                and bc.enable = #{enable}
+            </if>
+        </where>
+        order by bc.code
+    </select>
+    <select id="listPaperNumber" resultType="java.lang.String">
+        SELECT
+            et.paper_number
+        FROM
+            exam_task et
+                LEFT JOIN
+            basic_exam be ON et.exam_id = be.id
+        <where>
+            <if test="semesterId != null">
+                AND be.semester_id = #{semesterId}
+            </if>
+            <if test="examId != null">
+                AND et.exam_id = #{examId}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                AND et.course_code = #{courseCode}
+            </if>
+            <if test="dpr != null">
+                <if test="dpr.requestUserId != null">
+                    AND et.create_id = #{dpr.requestUserId}
+                </if>
+                <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                    AND et.org_id IN
+                    <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                </if>
+            </if>
+        </where>
+        order by et.paper_number
+    </select>
+    <select id="listCourseForApply" resultType="com.qmth.teachcloud.common.entity.BasicCourse">
+        SELECT
+            bc.code code,
+            bc.name name
+        FROM
+            basic_course bc
+        <where>
+            EXISTS ( SELECT
+                1
+            FROM
+            exam_task et
+                LEFT JOIN
+            basic_exam be ON et.exam_id = be.id
+            <where>
+                bc.school_id = et.school_id
+                AND bc.code = et.course_code
+                <if test="semesterId != null">
+                    AND be.semester_id = #{semesterId}
+                </if>
+                <if test="examId != null">
+                    AND et.exam_id = #{examId}
+                </if>
+                <if test="userId == null">
+                    AND et.user_id = #{userId}
+                </if>
+            </where>)
+            <if test="enable != null">
+                and bc.enable = #{enable}
+            </if>
+        </where>
+        order by bc.code
+    </select>
+    <select id="listCourseForAudit" resultType="com.qmth.teachcloud.common.entity.BasicCourse">
+        SELECT
+        bc.code code,
+        bc.name name
+        FROM
+        basic_course bc
+        <where>
+            EXISTS( SELECT
+            1
+            FROM
+            exam_task et
+            <where>
+                bc.school_id = et.school_id
+                AND bc.code = et.course_code
+                et.enable = true and et.review = true
+                <if test="examId != null">
+                    AND et.exam_id = #{examId}
+                </if>
+                <if test="dpr != null">
+                    <if test="dpr.requestUserId != null">
+                        <if test="byCreateUser == true">
+                            AND et.create_id = #{dpr.requestUserId}
+                        </if>
+                        <if test="byAssignUser == true">
+                            AND et.user_id = #{dpr.requestUserId}
+                        </if>
+                    </if>
+                    <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                        AND et.org_id IN
+                        <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                            #{item}
+                        </foreach>
+                    </if>
+                </if>
+            </where>)
+            <if test="enable != null">
+                and bc.enable = #{enable}
+            </if>
+        </where>
+        order by bc.code
+    </select>
+    <select id="listPaperNumberForApply" resultType="java.lang.String">
+        SELECT
+            et.paper_number
+        FROM
+            exam_task et
+                LEFT JOIN
+            basic_exam be ON et.exam_id = be.id
+        <where>
+            <if test="semesterId != null">
+                AND be.semester_id = #{semesterId}
+            </if>
+            <if test="examId != null">
+                AND et.exam_id = #{examId}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                AND et.course_code = #{courseCode}
+            </if>
+            <if test="userId != null">
+                et.user_id = #{userId}
+            </if>
+        </where>
+        order by et.paper_number
+    </select>
+    <select id="listPaperNumberAudit" resultType="java.lang.String">
+
+    </select>
+    <select id="listPrintPlan" resultType="com.qmth.distributed.print.business.bean.result.PrintPlanBrief">
+        select a.id, a.name, a.status from exam_print_plan a
+            left join basic_exam be on a.exam_id = be.id
+            left join sys_user b on a.create_id = b.id
+        <where>
+            <if test="semesterId != null">
+                and be.semester_id = #{semesterId}
+            </if>
+            <if test="examId != null">
+                and a.exam_id = #{examId}
+            </if>
+            <if test="dpr != null">
+                <if test="dpr.requestUserId != null">
+                    AND b.id = #{dpr.requestUserId}
+                </if>
+                <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                    AND b.org_id IN
+                    <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                </if>
+            </if>
+        </where>
+    </select>
+    <select id="listCourseForScore" resultType="com.qmth.teachcloud.common.entity.BasicCourse">
+        SELECT DISTINCT
+            et.course_code code, et.course_name name
+        FROM
+            (SELECT DISTINCT
+                 school_id, semester_id, exam_id, paper_number
+             FROM
+                 t_sync_exam_student_score) tsess
+                JOIN
+            exam_task et ON tsess.school_id = et.school_id
+                AND tsess.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
+        <where>
+            <if test="semesterId != null">
+                AND tsess.semester_id = #{semesterId}
+            </if>
+            <if test="examId != null">
+                AND et.exam_id = #{examId}
+            </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>
+        </where>
+        order by et.course_code
+    </select>
+</mapper>

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

@@ -16,7 +16,7 @@
             tsess.major_name as majorName,
             tsess.college as orgName,
             tsess.clazz_name as clazzName,
-            concat(edc.paper_number,edc.paper_type) as courseCode,
+            tsess.subject_code as courseCode,
             edc.course_name as courseName,
             tsess.total_score as totalScore,
             tsess.objective_score as objectiveScore,

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

@@ -56,15 +56,29 @@ public class ConditionController {
     @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));
+    public Result listCourse(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
+                             @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
+                             @ApiParam(value = "启用/禁用") @RequestParam(required = false) Boolean enable,
+                             @RequestParam(value = "printPlanId", required = false) List<String> printPlanId) {
+        return ResultUtil.ok(conditionService.listCourse(semesterId, examId, enable, printPlanId));
     }
 
     @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));
+    public Result listPaperNumber(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
+                                  @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
+                                  @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
+                                  @RequestParam(value = "printPlanId", required = false) List<String> printPlanId) {
+        return ResultUtil.ok(conditionService.listPaperNumber(semesterId, examId, courseCode, printPlanId));
+    }
+
+    @ApiOperation(value = "印刷计划")
+    @RequestMapping(value = "/list_print_plan", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicCollegeResult.class)})
+    public Result listPrintPlan(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
+                                @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId) {
+        return ResultUtil.ok(conditionService.listPrintPlan(semesterId, examId));
     }
 
 }

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

@@ -209,7 +209,7 @@ public class ExamPaperStructureController {
     @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) {
+                           @ApiParam(value = "用户ID", required = false) @RequestParam(required = false) Long transferId) {
         return ResultUtil.ok(examPaperStructureService.transfer(courseCode, paperNumber, transferId));
     }
 }

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

@@ -342,6 +342,7 @@ public class SystemConstant {
     public static final String HEADER_TIME = "time";
     public static final String HEADER_PLATFORM = "platform";
     public static final String HEADER_DEVICE_ID = "deviceId";
+    public static final String CURRENT_PRIVILEGE_ID = "privilegeId";
     public static final String TOKEN = "token";
     public static final String SIGN = "sign";
 

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/ExceptionResultEnum.java

@@ -97,6 +97,7 @@ public enum ExceptionResultEnum {
     PLATFORM_INVALID(HttpStatus.UNAUTHORIZED, 4010001, "platform无效"),
 
     DEVICE_ID_INVALID(HttpStatus.UNAUTHORIZED, 4010002, "deviceId无效"),
+    PRIVILEGE_ID_INVALID(HttpStatus.UNAUTHORIZED, 4010002, "privilegeId无效"),
 
     TOKEN_INVALID(HttpStatus.UNAUTHORIZED, 4010003, "token无效"),
 

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/RoleSourceEnum.java

@@ -9,7 +9,7 @@ import java.util.List;
  */
 public enum RoleSourceEnum {
 
-    SYS("系统自带"),
+    SYS("系统角色"),
     ANALYSIS("教研分析"),
     CLOUD_MARK("云阅卷"),
     QUESTION_LIBRARY("题库");

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

@@ -24,6 +24,7 @@ public interface BasicRoleDataPermissionService extends IService<BasicRoleDataPe
 
     /**
      * 查询角色数据权限
+     *
      * @param roleId 角色id
      * @return 该角色数据权限信息集合
      */
@@ -41,7 +42,16 @@ public interface BasicRoleDataPermissionService extends IService<BasicRoleDataPe
 
     /**
      * 查询数据权限
+     *
      * @return 数据权限查询集合
      */
     DataPermissionRule findDataPermission();
+
+    /**
+     * 根据菜单ID,查询数据最大数据权限集合
+     *
+     * @param privilegeId
+     * @return
+     */
+    DataPermissionRule findDataPermission(Long privilegeId);
 }

+ 30 - 9
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicRoleDataPermissionServiceImpl.java

@@ -98,9 +98,6 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
 
     @Override
     public DataPermissionRule findDataPermission(Long schoolId, Long requestUserId, String url) {
-        DataPermissionRule result = new DataPermissionRule();
-        // 角色集合
-        List<Long> roleIdList = sysRoleService.getUserRoles(requestUserId);
 
         // 方法的权限
         SysPrivilege sysPrivilege = new SysPrivilege();
@@ -113,7 +110,36 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
             sysPrivilege = sysPrivilegeList.get(0);
         }
 
+        return analysisDataPermission(sysPrivilege, requestUserId);
+
+    }
+
+    @Override
+    public DataPermissionRule findDataPermission() {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        return this.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
+    }
+
+    @Override
+    public DataPermissionRule findDataPermission(Long privilegeId) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        SysPrivilege sysPrivilege = sysPrivilegeService.getById(privilegeId);
+        return this.analysisDataPermission(sysPrivilege, requestUser.getId());
+    }
+
+    /**
+     * 计算多角色中的最大权限并解析
+     *
+     * @param sysPrivilege  权限菜单对象
+     * @param requestUserId 用户ID
+     * @return
+     */
+    private DataPermissionRule analysisDataPermission(SysPrivilege sysPrivilege, Long requestUserId) {
+        DataPermissionRule result = new DataPermissionRule();
         if (Objects.nonNull(sysPrivilege)) {
+            // 角色集合
+            List<Long> roleIdList = sysRoleService.getUserRoles(requestUserId);
             // 数据库中存在该方法的url
             int maxWeight = 0;
             for (Long roleId : roleIdList) {
@@ -154,12 +180,7 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
         return result;
     }
 
-    @Override
-    public DataPermissionRule findDataPermission() {
-        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        return this.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
-    }
+    ;
 
     /**
      * 递归搜索角色的数据权限

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

@@ -596,7 +596,8 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         if (sysOrgList.isEmpty()) {
             return null;
         }
-        return sysOrgList.stream().filter(m -> m.getParentId().equals(rootOrg.getId())).findFirst().orElseGet(null);
+        Optional<SysOrg> orgOptional = sysOrgList.stream().filter(m -> rootOrg.getId().equals(m.getParentId())).findFirst();
+        return orgOptional.isPresent() ? orgOptional.get() : null;
     }
 
     @Override

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

@@ -1120,7 +1120,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         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 this.baseMapper.findByRoleTypeAndOrgId(RoleTypeEnum.ASSISTANT.name(), sysOrg.getId());
         }
         return null;
     }

+ 15 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/ServletUtil.java

@@ -252,6 +252,20 @@ public class ServletUtil {
         return Objects.nonNull(getRequest().getAttribute(SystemConstant.ID)) ? (List<Long>) getRequest().getAttribute(SystemConstant.ID) : null;
     }
 
+    /**
+     * 获取当前请求的菜单ID
+     */
+    public static Long getCurrentPrivilegeId() {
+        try {
+            HttpServletRequest request = getRequest();
+            String currentPrivilegeId = request.getHeader(SystemConstant.CURRENT_PRIVILEGE_ID);
+            return StringUtils.isBlank(currentPrivilegeId) ? null : Long.valueOf(currentPrivilegeId);
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            throw ExceptionResultEnum.PRIVILEGE_ID_INVALID.exception();
+        }
+    }
+
     /**
      * 获取HttpServletRequest
      *
@@ -303,7 +317,7 @@ public class ServletUtil {
     /**
      * excludeProxyIp
      *
-     * @param request request
+     * @param request        request
      * @param excludeProxyIp 是否排除代理ip
      * @return ip
      */