Pārlūkot izejas kodu

数据驾驶舱

xiaof 4 gadi atpakaļ
vecāks
revīzija
1637faa8b5

+ 1 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/mapper/TAExamCourseMapper.java

@@ -46,4 +46,5 @@ public interface TAExamCourseMapper extends BaseMapper<TAExamCourse> {
                                                  @Param("courseCode") String courseCode,
                                                  @Param("publishStatus") String publishStatus);
 
+    Map<String, String> getScoreAndRate(@Param("schoolId") Long schoolId, @Param("semester") String semester, @Param("examId") Long examId, @Param("courseCode") String courseCode);
 }

+ 1 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/TAExamCourseService.java

@@ -46,4 +46,5 @@ public interface TAExamCourseService extends IService<TAExamCourse> {
      */
     IPage<TAExamCourseResult> surveyAspointsList(IPage<Map> iPage, Long schoolId, Long examId, String courseCode, PublishStatusEnum publishStatus);
 
+    Map<String, Object> getGradeDistribute(String semester, Long examId, String courseCode);
 }

+ 4 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/TAExamTotalService.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.report.business.entity.TAExamCourse;
 import com.qmth.teachcloud.report.business.entity.TAExamTotal;
 
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * <p>
  * 考试维度总计 服务类
@@ -18,4 +20,6 @@ public interface TAExamTotalService extends IService<TAExamTotal> {
     TAExamTotal getOverview(String semester, Long examId);
 
     IPage<TAExamCourse> getCourseSummary(String semester, Long examId, Integer pageNumber, Integer pageSize);
+
+    void exportCourseSummary(String semester, Long examId, HttpServletResponse response);
 }

+ 13 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TAExamCourseServiceImpl.java

@@ -12,6 +12,7 @@ import com.qmth.teachcloud.report.business.service.TAExamCourseService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -63,4 +64,16 @@ public class TAExamCourseServiceImpl extends ServiceImpl<TAExamCourseMapper, TAE
     public IPage<TAExamCourseResult> surveyAspointsList(IPage<Map> iPage, Long schoolId, Long examId, String courseCode, PublishStatusEnum publishStatus) {
         return taExamCourseMapper.surveyAspointsList(iPage, schoolId, examId, courseCode, publishStatus.name());
     }
+
+    @Override
+    public Map<String, Object> getGradeDistribute(String semester, Long examId, String courseCode) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        Map<String, Object> map = new HashMap<>();
+        // 不及格率
+        Map<String, String > scoreAndRate = taExamCourseMapper.getScoreAndRate(schoolId, semester, examId, courseCode);
+        map.put("scoreAndRate", scoreAndRate);
+        // 成绩正态分布 todo
+
+        return map;
+    }
 }

+ 23 - 0
teachcloud-report-business/src/main/resources/mapper/TAExamCourseMapper.xml

@@ -103,4 +103,27 @@
             </if>
         </where>
     </select>
+    <select id="getScoreAndRate" resultType="java.util.Map">
+        SELECT
+            a.avg_score avgScore,
+            a.current_avg_score currentAvgScore,
+            1 - IFNULL(a.pass_rate, 0) notPassRate,
+            1 - IFNULL(a.current_pass_rate, 0) currentNotPassRate
+        FROM
+            t_a_exam_course a
+                LEFT JOIN
+            t_b_exam b ON a.exam_id = b.id
+        <where>
+            and b.school_id = #{schoolId}
+            <if test="semester != null and semester != ''">
+                and b.semester = #{semester}
+            </if>
+            <if test="examId != null">
+                and a.exam_id = #{examId}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                and a.course_code = #{courseCode}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 77 - 5
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/DataDriveController.java

@@ -4,23 +4,95 @@ import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.report.business.bean.result.TBExamStudentResult;
+import com.qmth.teachcloud.report.business.entity.TAExamCourse;
+import com.qmth.teachcloud.report.business.entity.TAExamCourseTeacher;
+import com.qmth.teachcloud.report.business.entity.TAExamTotal;
 import com.qmth.teachcloud.report.business.enums.SemesterEnum;
+import com.qmth.teachcloud.report.business.service.TAExamCourseService;
+import com.qmth.teachcloud.report.business.service.TAExamCourseTeacherService;
+import com.qmth.teachcloud.report.business.service.TAExamTotalService;
 import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
 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.servlet.http.HttpServletResponse;
+
 @Api(tags = "数据驾驶舱Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.reportSchool}")
 public class DataDriveController {
 
-    @ApiOperation(value = "全校考试概况接口")
+    @Autowired
+    private TAExamTotalService taExamTotalService;
+
+    @Autowired
+    private TAExamCourseService taExamCourseService;
+
+    @Autowired
+    private TAExamCourseTeacherService taExamCourseTeacherService;
+
+    @ApiOperation(value = "全校考试总览-全校考试概况")
     @RequestMapping(value = "/exam/get_overview", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "考生信息", response = TBExamStudentResult.class)})
-    public Result examGetOverview(@ApiParam(value = "考试id", required = true) @RequestParam String examId,
-                                  @ApiParam(value = "学期", required = true) @RequestParam SemesterEnum semester) {
-        return ResultUtil.ok();
+    @ApiResponses({@ApiResponse(code = 200, message = "全校考试总览-全校考试概况", response = TAExamTotal.class)})
+    public Result getOverview(
+            @ApiParam(value = "学期", required = true) @RequestParam String semester,
+            @ApiParam(value = "考试ID", required = true) @RequestParam Long examId) {
+        return ResultUtil.ok(taExamTotalService.getOverview(semester, examId));
+    }
+
+    @ApiOperation(value = "全校考试总览-全校课程考试分析汇总")
+    @RequestMapping(value = "/exam/get_course_summary", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "全校考试总览-全校考试概况", response = TAExamCourse.class)})
+    public Result getCourseSummary(
+            @ApiParam(value = "学期", required = true) @RequestParam String semester,
+            @ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+            @ApiParam(value = "分页页码", required = true) @RequestParam Integer pageNumber,
+            @ApiParam(value = "分页数量", required = true) @RequestParam Integer pageSize) {
+        return ResultUtil.ok(taExamTotalService.getCourseSummary(semester, examId, pageNumber, pageSize));
+    }
+
+    @ApiOperation(value = "全校考试总览-全校课程考试分析汇总-导出课程分析Excel报表")
+    @RequestMapping(value = "/exam/export_course_summary", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "全校考试总览-全校考试概况", response = TAExamCourse.class)})
+    public void exportCourseSummary(
+            @ApiParam(value = "学期", required = true) @RequestParam String semester,
+            @ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+            HttpServletResponse response) {
+        taExamTotalService.exportCourseSummary(semester, examId, response);
+    }
+
+    @ApiOperation(value = "全校考试总览-全校考试概况")
+    @RequestMapping(value = "/course/get_overview", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "全校考试总览-全校考试概况", response = TAExamCourse.class)})
+    public Result getOverview(
+            @ApiParam(value = "学期", required = true) @RequestParam String semester,
+            @ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+            @ApiParam(value = "课程代码", required = true) @RequestParam String courseCode) {
+        return ResultUtil.ok(taExamCourseService.getOverview(semester, examId, courseCode));
+    }
+
+    @ApiOperation(value = "全校课程考试分析-分数段分布情况")
+    @RequestMapping(value = "/course/get_grade_distribute", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "全校考试总览-全校考试概况", response = TAExamCourse.class)})
+    public Result getGradeDistribute(
+            @ApiParam(value = "学期", required = true) @RequestParam String semester,
+            @ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+            @ApiParam(value = "课程代码", required = true) @RequestParam String courseCode) {
+        return ResultUtil.ok(taExamCourseService.getGradeDistribute(semester, examId, courseCode));
+    }
+
+    @ApiOperation(value = "全校课程考试分析-教师各课堂成绩排名")
+    @RequestMapping(value = "/course/list_teacher_class_rank", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "全校课程考试分析-教师各课堂成绩排名", response = TAExamCourseTeacher.class)})
+    public Result listTeacherClassRank(
+            @ApiParam(value = "学期", required = true) @RequestParam String semester,
+            @ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+            @ApiParam(value = "课程代码", required = true) @RequestParam String courseCode,
+            @ApiParam(value = "分页页码", required = true) @RequestParam Integer pageNumber,
+            @ApiParam(value = "分页数量", required = true) @RequestParam Integer pageSize) {
+        return ResultUtil.ok(taExamCourseTeacherService.listTeacherClassRank(semester, examId, courseCode, pageNumber, pageSize));
     }
 }

+ 1 - 1
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/SysOrgController.java

@@ -84,7 +84,7 @@ public class SysOrgController {
     @ApiOperation(value = "删除")
     @RequestMapping(value = "/remove", method = RequestMethod.POST)
     public Result remove(@RequestBody SysOrg org) {
-        return ResultUtil.ok(basicCourseService.removeById(org.getId()));
+        return ResultUtil.ok(sysOrgService.removeById(org.getId()));
     }
 
 }

+ 2 - 43
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/TAExamCourseController.java

@@ -1,20 +1,8 @@
 package com.qmth.teachcloud.report.api;
 
 
-import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.teachcloud.common.util.Result;
-import com.qmth.teachcloud.common.util.ResultUtil;
-import com.qmth.teachcloud.report.business.entity.TAExamCourse;
-import com.qmth.teachcloud.report.business.entity.TAExamCourseTeacher;
-import com.qmth.teachcloud.report.business.entity.TAExamTotal;
-import com.qmth.teachcloud.report.business.service.TAExamCourseService;
-import com.qmth.teachcloud.report.business.service.TAExamCourseTeacherService;
-import io.swagger.annotations.*;
-import org.springframework.beans.factory.annotation.Autowired;
+import io.swagger.annotations.Api;
 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;
 
 /**
@@ -25,37 +13,8 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @since 2021-06-01
  */
-@Api(tags = "教研分析数据驾驶舱模块Controller")
 @RestController
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.reportSchool}/course")
+@RequestMapping("/t_a_exam_course")
 public class TAExamCourseController {
 
-    @Autowired
-    private TAExamCourseService taExamCourseService;
-
-    @Autowired
-    private TAExamCourseTeacherService taExamCourseTeacherService;
-
-    @ApiOperation(value = "全校考试总览-全校考试概况")
-    @RequestMapping(value = "/get_overview", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "全校考试总览-全校考试概况", response = TAExamCourse.class)})
-    public Result getOverview(
-            @ApiParam(value = "学期", required = true) @RequestParam String semester,
-            @ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
-            @ApiParam(value = "课程代码", required = true) @RequestParam String courseCode) {
-        return ResultUtil.ok(taExamCourseService.getOverview(semester, examId, courseCode));
-    }
-
-    @ApiOperation(value = "全校课程考试分析-教师各课堂成绩排名")
-    @RequestMapping(value = "/list_teacher_class_rank", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "全校课程考试分析-教师各课堂成绩排名", response = TAExamCourseTeacher.class)})
-    public Result listTeacherClassRank(
-            @ApiParam(value = "学期", required = true) @RequestParam String semester,
-            @ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
-            @ApiParam(value = "课程代码", required = true) @RequestParam String courseCode,
-            @ApiParam(value = "分页页码", required = true) @RequestParam Integer pageNumber,
-            @ApiParam(value = "分页数量", required = true) @RequestParam Integer pageSize) {
-        return ResultUtil.ok(taExamCourseTeacherService.listTeacherClassRank(semester, examId, courseCode, pageNumber, pageSize));
-    }
-
 }

+ 1 - 35
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/TAExamTotalController.java

@@ -1,17 +1,7 @@
 package com.qmth.teachcloud.report.api;
 
 
-import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.teachcloud.common.util.Result;
-import com.qmth.teachcloud.common.util.ResultUtil;
-import com.qmth.teachcloud.report.business.entity.TAExamCourse;
-import com.qmth.teachcloud.report.business.entity.TAExamTotal;
-import com.qmth.teachcloud.report.business.service.TAExamTotalService;
-import io.swagger.annotations.*;
-import org.springframework.beans.factory.annotation.Autowired;
 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;
 
 /**
@@ -22,32 +12,8 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @since 2021-06-01
  */
-@Api(tags = "教研分析数据驾驶舱模块Controller")
 @RestController
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.reportSchool}/exam")
+@RequestMapping("/t_a_exam_total")
 public class TAExamTotalController {
 
-    @Autowired
-    private TAExamTotalService taExamTotalService;
-
-    @ApiOperation(value = "全校考试总览-全校考试概况")
-    @RequestMapping(value = "/get_overview", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "全校考试总览-全校考试概况", response = TAExamTotal.class)})
-    public Result getOverview(
-            @ApiParam(value = "学期", required = true) @RequestParam String semester,
-            @ApiParam(value = "考试ID", required = true) @RequestParam Long examId) {
-        return ResultUtil.ok(taExamTotalService.getOverview(semester, examId));
-    }
-
-    @ApiOperation(value = "全校考试总览-全校课程考试分析汇总")
-    @RequestMapping(value = "/get_course_summary", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "全校考试总览-全校考试概况", response = TAExamCourse.class)})
-    public Result getCourseSummary(
-            @ApiParam(value = "学期", required = true) @RequestParam String semester,
-            @ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
-            @ApiParam(value = "分页页码", required = true) @RequestParam Integer pageNumber,
-            @ApiParam(value = "分页数量", required = true) @RequestParam Integer pageSize) {
-        return ResultUtil.ok(taExamTotalService.getCourseSummary(semester, examId, pageNumber, pageSize));
-    }
-
 }