浏览代码

线下做的答题卡,下载轨迹图片后,希望在评卷区的右上角显示每个分组的得分

wangliang 3 月之前
父节点
当前提交
e9b26f7030

+ 8 - 0
distributed-print/install/mysql/upgrade/3.4.4.sql

@@ -296,3 +296,11 @@ ALTER TABLE teach_course DROP KEY teach_course_unique;
 ALTER TABLE teach_course ADD CONSTRAINT teach_course_unique UNIQUE KEY (school_id,exam_id,course_id,user_id);
 ALTER TABLE teach_course ADD CONSTRAINT teach_course_unique UNIQUE KEY (school_id,exam_id,course_id,user_id);
 
 
 ALTER TABLE `mark_student` ADD COLUMN `teach_class_name` VARCHAR(100) NULL COMMENT '教学班' AFTER `exam_room`;
 ALTER TABLE `mark_student` ADD COLUMN `teach_class_name` VARCHAR(100) NULL COMMENT '教学班' AFTER `exam_room`;
+
+-- 2025-03-14
+INSERT INTO sys_privilege
+(id, name, url, parent_id, `type`, `sequence`, property, related, enable, default_auth, front_display)
+VALUES(1300, '获取评卷区', '/api/admin/mark/inspected/get_mark_area', 946, 'URL', 9, 'AUTH', NULL, 1, 1, 1);
+UPDATE sys_privilege
+SET name='成绩检查', url='ScoreCheck', `type`='MENU', parent_id=486, `sequence`=4, property='AUTH', related='1300', enable=1, default_auth=0, front_display=1
+WHERE id=946;

+ 118 - 108
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkInspectedController.java

@@ -1,108 +1,118 @@
-package com.qmth.distributed.print.api.mark;
-
-
-import com.qmth.boot.api.annotation.Aac;
-import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.teachcloud.common.annotation.OperationLogDetail;
-import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
-import com.qmth.teachcloud.common.util.Result;
-import com.qmth.teachcloud.common.util.ResultUtil;
-import com.qmth.teachcloud.mark.dto.mark.manage.Task;
-import com.qmth.teachcloud.mark.dto.mark.score.SettingDto;
-import com.qmth.teachcloud.mark.dto.mark.score.StudentObjectiveDetailDto;
-import com.qmth.teachcloud.mark.params.MarkHeaderResult;
-import com.qmth.teachcloud.mark.params.MarkResult;
-import com.qmth.teachcloud.mark.service.MarkPaperService;
-import com.qmth.teachcloud.mark.service.MarkStudentService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-
-/**
- * <p>
- * 评卷任务检查 前端控制器
- * </p>
- *
- * @author xf
- * @since 2023-09-22
- */
-@Api(tags = "评卷-评卷任务检查")
-@RestController
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/inspected")
-public class MarkInspectedController extends BaseController{
-
-    @Resource
-    private MarkStudentService markStudentService;
-    @Resource
-    private MarkPaperService markPaperService;
-
-    /**
-     * 配置获取
-     */
-    @ApiOperation(value = "配置获取")
-    @RequestMapping(value = "/getSetting", method = RequestMethod.POST)
-    public Result getSetting(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
-                             @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) {
-        SettingDto settingDto = markPaperService.getSetting(examId, paperNumber);
-        return ResultUtil.ok(settingDto);
-    }
-
-    /**
-     * 客观题检查任务获取
-     */
-    @ApiOperation(value = "客观题检查任务获取")
-    @RequestMapping(value = "/objective/getTask", method = RequestMethod.POST)
-    public Result getObjectiveInspectedTask(@ApiParam(value = "考生ID", required = true) @RequestParam Long studentId) {
-        StudentObjectiveDetailDto studentObjectiveDetailDto = markStudentService.getObjectiveInspectedTask(studentId);
-        return ResultUtil.ok(studentObjectiveDetailDto);
-    }
-
-    /**
-     * 客观题检查任务保存
-     */
-    @ApiOperation(value = "客观题检查任务保存")
-    @RequestMapping(value = "/objective/saveTask", method = RequestMethod.POST)
-    @OperationLogDetail(operationType = OperationTypeEnum.UPDATE, detail = "保存客观题检查任务操作,考生ID:{{studentId}}")
-    public Result saveObjectiveInspectedTask(@ApiParam(value = "考生ID", required = true) @RequestParam Long studentId,
-                                         @ApiParam(value = "客观题答案", required = true) @RequestParam String answers) {
-        return ResultUtil.ok(markStudentService.saveObjectiveInspectedTask(studentId, answers));
-    }
-
-    /**
-     * 主观题检查任务获取
-     */
-    @Aac(auth = false)
-    @ApiOperation(value = "主观题检查任务获取")
-    @RequestMapping(value = "/subjective/getTask", method = RequestMethod.POST)
-    public Result getSubjectiveInspectedTask(@ApiParam(value = "考生ID", required = true) @RequestParam Long studentId) {
-        Task task = markStudentService.getSubjectiveInspectedTask(studentId);
-        validMarkPaperForInspect(task.getExamId(), task.getPaperNumber());
-        return ResultUtil.ok(task);
-    }
-
-    /**
-     * 主观题检查任务保存
-     */
-    @ApiOperation(value = "主观题检查任务保存")
-    @RequestMapping(value = "/subjective/saveTask", method = RequestMethod.POST)
-    @OperationLogDetail(operationType = OperationTypeEnum.UPDATE, detail = "保存主观题检查任务操作,考生ID:{{markResult.studentId}}")
-    public Result saveSubjectiveInspectedTask(@RequestBody MarkHeaderResult markResult) {
-        markStudentService.saveSubjectiveInspectedTask(markResult);
-        return ResultUtil.ok(true);
-    }
-
-    /**
-     * 主观题检查任务确认
-     */
-    @ApiOperation(value = "主观题检查任务保存")
-    @RequestMapping(value = "/subjective/confirmTask", method = RequestMethod.POST)
-    @OperationLogDetail(operationType = OperationTypeEnum.UPDATE, detail = "确认主观题检查任务操作,考生ID:{{studentId}}")
-    public Result confirmSubjectiveInspectedTask(@ApiParam(value = "考生ID", required = true) @RequestParam Long studentId) {
-        markStudentService.confirmSubjectiveInspectedTask(studentId);
-        return ResultUtil.ok(true);
-    }
-}
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.annotation.OperationLogDetail;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.mark.bean.dto.MarkAreaDto;
+import com.qmth.teachcloud.mark.dto.mark.manage.Task;
+import com.qmth.teachcloud.mark.dto.mark.score.SettingDto;
+import com.qmth.teachcloud.mark.dto.mark.score.StudentObjectiveDetailDto;
+import com.qmth.teachcloud.mark.params.MarkHeaderResult;
+import com.qmth.teachcloud.mark.service.MarkPaperService;
+import com.qmth.teachcloud.mark.service.MarkStudentService;
+import com.qmth.teachcloud.mark.service.MarkSubjectiveScoreService;
+import io.swagger.annotations.*;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ * 评卷任务检查 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-评卷任务检查")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/inspected")
+public class MarkInspectedController extends BaseController {
+
+    @Resource
+    private MarkStudentService markStudentService;
+
+    @Resource
+    private MarkPaperService markPaperService;
+
+    @Resource
+    MarkSubjectiveScoreService markSubjectiveScoreService;
+
+    /**
+     * 配置获取
+     */
+    @ApiOperation(value = "配置获取")
+    @RequestMapping(value = "/getSetting", method = RequestMethod.POST)
+    public Result getSetting(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+                             @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) {
+        SettingDto settingDto = markPaperService.getSetting(examId, paperNumber);
+        return ResultUtil.ok(settingDto);
+    }
+
+    /**
+     * 客观题检查任务获取
+     */
+    @ApiOperation(value = "客观题检查任务获取")
+    @RequestMapping(value = "/objective/getTask", method = RequestMethod.POST)
+    public Result getObjectiveInspectedTask(@ApiParam(value = "考生ID", required = true) @RequestParam Long studentId) {
+        StudentObjectiveDetailDto studentObjectiveDetailDto = markStudentService.getObjectiveInspectedTask(studentId);
+        return ResultUtil.ok(studentObjectiveDetailDto);
+    }
+
+    /**
+     * 客观题检查任务保存
+     */
+    @ApiOperation(value = "客观题检查任务保存")
+    @RequestMapping(value = "/objective/saveTask", method = RequestMethod.POST)
+    @OperationLogDetail(operationType = OperationTypeEnum.UPDATE, detail = "保存客观题检查任务操作,考生ID:{{studentId}}")
+    public Result saveObjectiveInspectedTask(@ApiParam(value = "考生ID", required = true) @RequestParam Long studentId,
+                                             @ApiParam(value = "客观题答案", required = true) @RequestParam String answers) {
+        return ResultUtil.ok(markStudentService.saveObjectiveInspectedTask(studentId, answers));
+    }
+
+    /**
+     * 主观题检查任务获取
+     */
+    @Aac(auth = false)
+    @ApiOperation(value = "主观题检查任务获取")
+    @RequestMapping(value = "/subjective/getTask", method = RequestMethod.POST)
+    public Result getSubjectiveInspectedTask(@ApiParam(value = "考生ID", required = true) @RequestParam Long studentId) {
+        Task task = markStudentService.getSubjectiveInspectedTask(studentId);
+        validMarkPaperForInspect(task.getExamId(), task.getPaperNumber());
+        return ResultUtil.ok(task);
+    }
+
+    /**
+     * 主观题检查任务保存
+     */
+    @ApiOperation(value = "主观题检查任务保存")
+    @RequestMapping(value = "/subjective/saveTask", method = RequestMethod.POST)
+    @OperationLogDetail(operationType = OperationTypeEnum.UPDATE, detail = "保存主观题检查任务操作,考生ID:{{markResult.studentId}}")
+    public Result saveSubjectiveInspectedTask(@RequestBody MarkHeaderResult markResult) {
+        markStudentService.saveSubjectiveInspectedTask(markResult);
+        return ResultUtil.ok(true);
+    }
+
+    /**
+     * 主观题检查任务确认
+     */
+    @ApiOperation(value = "主观题检查任务保存")
+    @RequestMapping(value = "/subjective/confirmTask", method = RequestMethod.POST)
+    @OperationLogDetail(operationType = OperationTypeEnum.UPDATE, detail = "确认主观题检查任务操作,考生ID:{{studentId}}")
+    public Result confirmSubjectiveInspectedTask(@ApiParam(value = "考生ID", required = true) @RequestParam Long studentId) {
+        markStudentService.confirmSubjectiveInspectedTask(studentId);
+        return ResultUtil.ok(true);
+    }
+
+    @ApiOperation(value = "获取评卷区")
+    @RequestMapping(value = "/get_mark_area", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "评卷区查询", response = MarkAreaDto.class)})
+    public Result getMarkArea(@ApiParam(value = "考生ID", required = true) @RequestParam Long studentId) {
+        return ResultUtil.ok(markSubjectiveScoreService.findMarkArea(studentId));
+    }
+}

+ 4 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkTrackController.java

@@ -39,16 +39,19 @@ import java.util.List;
 @RestController
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/track")
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/track")
 public class MarkTrackController {
 public class MarkTrackController {
+
     @Resource
     @Resource
     private TaskService taskService;
     private TaskService taskService;
+
     @Resource
     @Resource
     private ExamCardService examCardService;
     private ExamCardService examCardService;
+
     @Resource
     @Resource
     private MarkStudentService markStudentService;
     private MarkStudentService markStudentService;
+
     @Resource
     @Resource
     private ScanAnswerCardService scanAnswerCardService;
     private ScanAnswerCardService scanAnswerCardService;
 
 
-
     /**
     /**
      * 轨迹图
      * 轨迹图
      */
      */
@@ -80,11 +83,9 @@ public class MarkTrackController {
                     } else {
                     } else {
                         return ResultUtil.ok(examCardService.getById(scanAnswerCard.getCardId()));
                         return ResultUtil.ok(examCardService.getById(scanAnswerCard.getCardId()));
                     }
                     }
-
                 }
                 }
             }
             }
         }
         }
         return ResultUtil.ok();
         return ResultUtil.ok();
     }
     }
-
 }
 }

+ 70 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/dto/MarkAreaDto.java

@@ -0,0 +1,70 @@
+package com.qmth.teachcloud.mark.bean.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 评卷区dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2025/3/13
+ */
+public class MarkAreaDto implements Serializable {
+
+    @ApiModelProperty(value = "题目标题")
+    private String title;
+
+    @ApiModelProperty(value = "大题号")
+    private Integer mainNumber;
+
+    @ApiModelProperty(value = "小题号")
+    private Integer subNumber;
+
+    @ApiModelProperty(value = "得分")
+    private Double score;
+
+    @ApiModelProperty(value = "评卷区")
+    private String picList;
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public Integer getMainNumber() {
+        return mainNumber;
+    }
+
+    public void setMainNumber(Integer mainNumber) {
+        this.mainNumber = mainNumber;
+    }
+
+    public Integer getSubNumber() {
+        return subNumber;
+    }
+
+    public void setSubNumber(Integer subNumber) {
+        this.subNumber = subNumber;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
+    public String getPicList() {
+        return picList;
+    }
+
+    public void setPicList(String picList) {
+        this.picList = picList;
+    }
+}

+ 30 - 22
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkSubjectiveScoreMapper.java

@@ -1,22 +1,30 @@
-package com.qmth.teachcloud.mark.mapper;
-
-import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
-import com.qmth.teachcloud.mark.bean.archivescore.QuestionVo;
-import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * <p>
- * 主观题得分明细表 Mapper 接口
- * </p>
- *
- * @author xf
- * @since 2023-09-22
- */
-public interface MarkSubjectiveScoreMapper extends MppBaseMapper<MarkSubjectiveScore> {
-
-	List<QuestionVo> getSubjectiveVo(@Param("studentIds")List<Long> studentIds);
-
-}
+package com.qmth.teachcloud.mark.mapper;
+
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.qmth.teachcloud.mark.bean.archivescore.QuestionVo;
+import com.qmth.teachcloud.mark.bean.dto.MarkAreaDto;
+import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 主观题得分明细表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkSubjectiveScoreMapper extends MppBaseMapper<MarkSubjectiveScore> {
+
+    List<QuestionVo> getSubjectiveVo(@Param("studentIds") List<Long> studentIds);
+
+    /**
+     * 根据学生id查找评卷区
+     *
+     * @param studentId
+     * @return
+     */
+    List<MarkAreaDto> findMarkArea(@Param("studentId") Long studentId);
+}

+ 9 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkSubjectiveScoreService.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.mark.service;
 
 
 import com.github.jeffreyning.mybatisplus.service.IMppService;
 import com.github.jeffreyning.mybatisplus.service.IMppService;
 import com.qmth.teachcloud.mark.bean.archivescore.QuestionVo;
 import com.qmth.teachcloud.mark.bean.archivescore.QuestionVo;
+import com.qmth.teachcloud.mark.bean.dto.MarkAreaDto;
 import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
 import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
 
 
 import java.util.List;
 import java.util.List;
@@ -44,4 +45,12 @@ public interface MarkSubjectiveScoreService extends IMppService<MarkSubjectiveSc
      * @return
      * @return
      */
      */
     List<MarkSubjectiveScore> listByStudentIdAndExamIdAndPn(Long studentId, Long examId, String paperNumber);
     List<MarkSubjectiveScore> listByStudentIdAndExamIdAndPn(Long studentId, Long examId, String paperNumber);
+
+    /**
+     * 根据学生id查找评卷区
+     *
+     * @param studentId
+     * @return
+     */
+    List<MarkAreaDto> findMarkArea(Long studentId);
 }
 }

+ 12 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkSubjectiveScoreServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
 import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
 import com.qmth.teachcloud.mark.bean.archivescore.QuestionVo;
 import com.qmth.teachcloud.mark.bean.archivescore.QuestionVo;
+import com.qmth.teachcloud.mark.bean.dto.MarkAreaDto;
 import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
 import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
 import com.qmth.teachcloud.mark.mapper.MarkSubjectiveScoreMapper;
 import com.qmth.teachcloud.mark.mapper.MarkSubjectiveScoreMapper;
 import com.qmth.teachcloud.mark.service.MarkSubjectiveScoreService;
 import com.qmth.teachcloud.mark.service.MarkSubjectiveScoreService;
@@ -119,4 +120,15 @@ public class MarkSubjectiveScoreServiceImpl extends MppServiceImpl<MarkSubjectiv
                 .orderByAsc(MarkSubjectiveScore::getSubNumber);
                 .orderByAsc(MarkSubjectiveScore::getSubNumber);
         return this.list(queryWrapper);
         return this.list(queryWrapper);
     }
     }
+
+    /**
+     * 根据学生id查找评卷区
+     *
+     * @param studentId
+     * @return
+     */
+    @Override
+    public List<MarkAreaDto> findMarkArea(Long studentId) {
+        return this.baseMapper.findMarkArea(studentId);
+    }
 }
 }

+ 13 - 0
teachcloud-mark/src/main/resources/mapper/MarkSubjectiveScoreMapper.xml

@@ -31,4 +31,17 @@
         group by t.main_title,t.main_number,t.sub_number,t.total_score
         group by t.main_title,t.main_number,t.sub_number,t.total_score
         order by t.main_number,t.sub_number
         order by t.main_number,t.sub_number
     </select>
     </select>
+
+    <select id="findMarkArea" resultType="com.qmth.teachcloud.mark.bean.dto.MarkAreaDto">
+        SELECT mq.main_title as title,
+               mq.main_number as mainNumber,
+               mq.sub_number as subNumber,
+               mss.score,
+               mq.pic_list as picList
+        FROM mark_subjective_score mss
+                 left join mark_question mq on mq.exam_id = mss.exam_id and mq.paper_number = mss.paper_number and mq.main_number = mss.main_number and mq.sub_number = mss.sub_number
+        WHERE mss.student_id = #{studentId}
+        group by mq.main_title,mq.main_number,mq.sub_number,mss.score,mq.pic_list
+        order by mq.main_number,mq.sub_number
+    </select>
 </mapper>
 </mapper>