Browse Source

3.4.4 update-20250411

xiaofei 2 tháng trước cách đây
mục cha
commit
199f3ac3d4

+ 43 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkController.java

@@ -3,21 +3,30 @@ 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.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.mark.MarkMode;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.mark.dto.mark.mark.SubmitResult;
+import com.qmth.teachcloud.mark.entity.MarkUserQuestion;
+import com.qmth.teachcloud.mark.enums.LockType;
 import com.qmth.teachcloud.mark.enums.QuestionModel;
+import com.qmth.teachcloud.mark.lock.LockService;
 import com.qmth.teachcloud.mark.params.MarkResult;
+import com.qmth.teachcloud.mark.params.MarkResultQuestion;
 import com.qmth.teachcloud.mark.service.MarkService;
 import com.qmth.teachcloud.mark.service.MarkUserPaperService;
+import com.qmth.teachcloud.mark.service.MarkUserQuestionService;
 import com.qmth.teachcloud.mark.utils.TaskLock;
 import com.qmth.teachcloud.mark.utils.TaskLockUtil;
 import io.lettuce.core.GeoArgs.Sort;
 import io.swagger.annotations.Api;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -38,6 +47,7 @@ import java.util.Map;
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/mark")
 public class MarkController extends BaseController {
+    private final static Logger log = LoggerFactory.getLogger(MarkController.class);
 
     @Autowired
     private MarkService markService;
@@ -45,6 +55,10 @@ public class MarkController extends BaseController {
     private MarkUserPaperService markUserPaperService;
     @Autowired
     private SysUserService userService;
+    @Resource
+    private MarkUserQuestionService markUserQuestionService;
+    @Resource
+    LockService lockService;
 
     /**
      * 查询内存数据
@@ -95,10 +109,37 @@ public class MarkController extends BaseController {
 
     @RequestMapping(value = "/saveTask", method = RequestMethod.POST)
     public Result saveTask(@RequestParam Long examId, @RequestParam String paperNumber,
-                           @RequestBody MarkResult markResult) {
+                           @RequestBody MarkResult result) {
         validMarkPaperForMark(examId, paperNumber);
         SysUser user = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(markService.saveTask(examId, paperNumber, user.getId(), markResult));
+        Long userId = user.getId();
+
+        for (MarkResultQuestion question : result.getQuestionList()) {
+            MarkUserQuestion markUserQuestion = markUserQuestionService.getByExamIdAndPaperNumberAndQuestionIdAndUserId(examId, paperNumber, question.getQuestionId(), userId);
+            if (markUserQuestion == null) {
+                throw ExceptionResultEnum.ERROR.exception("评卷员未绑定题目" + question.getMainNumber() + "-" + question.getSubNumber());
+            }
+        }
+
+        SubmitResult sr;
+        try {
+            lockService.watch(LockType.EXAM_SUBJECT, examId, paperNumber);
+            lockService.watch(LockType.MARK_USER_QUESTION, userId);
+            lockService.waitlock(LockType.STUDENT, result.getStudentId());
+            sr = markService.saveTask(examId, paperNumber, user.getId(), result);
+            for (MarkResultQuestion markResultQuestion : result.getQuestionList()) {
+                markService.updateMarkedCount(examId, paperNumber, markResultQuestion.getQuestionId());
+            }
+        } catch (Exception e) {
+            log.error("save task error", e);
+            throw ExceptionResultEnum.ERROR.exception(e.getMessage());
+        } finally {
+            lockService.unlock(LockType.STUDENT, result.getStudentId());
+            lockService.unwatch(LockType.MARK_USER_QUESTION, userId);
+            lockService.unwatch(LockType.EXAM_SUBJECT, examId, paperNumber);
+        }
+
+        return ResultUtil.ok(sr);
     }
 
     @RequestMapping(value = "/getHistory", method = RequestMethod.POST)

+ 12 - 20
distributed-print/src/main/java/com/qmth/distributed/print/upgrade/DataUpgrade_3_4_4.java

@@ -12,6 +12,8 @@ import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExamModelEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.ImportTemplateEnum;
+import com.qmth.teachcloud.common.util.FileUtil;
 import com.qmth.teachcloud.mark.dto.mark.MarkQuestionAnswerVo;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkerScoreDTO;
 import com.qmth.teachcloud.mark.dto.mark.manage.TaskQuestion;
@@ -34,6 +36,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.io.InputStream;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.Types;
@@ -55,13 +58,10 @@ public class DataUpgrade_3_4_4 implements DataUpgradeService {
 
     @Override
     public void process(JdbcTemplate jdbcTemplate) {
-        StringJoiner sj = new StringJoiner(File.separator);
-        sj.add(System.getProperty("user.dir")).add("distributed-print").add("install").add("mysql").add("upgrade");
-        String upgradePath = sj.toString();
-        log.info("数据库脚本根目录:" + upgradePath);
         // 执行升级脚本
         log.info("开始处理3.4.3历史数据,更新脚本1;时间:" + DateFormatUtils.format(new Date(), DATE_PATTERN));
-        String upgrade_sql1 = upgradePath + File.separator + "3.4.4-upgrade-1.sql";
+        String upgrade_sql1 = "upgrade/3.4.4-upgrade-1.sql";
+        log.info("开始处理3.4.3历史数据,更新脚本1;地址:" + upgrade_sql1);
         this.execUpgradeSql(jdbcTemplate, upgrade_sql1);
         log.info("结束处理3.4.3历史数据,更新脚本1;时间:" + DateFormatUtils.format(new Date(), DATE_PATTERN));
 
@@ -72,7 +72,8 @@ public class DataUpgrade_3_4_4 implements DataUpgradeService {
 
         // 归档后中间数据重命名,创建新表
         log.info("开始处理3.4.4升级脚本2;时间:" + DateFormatUtils.format(new Date(), DATE_PATTERN));
-        String upgrade_sql2 = upgradePath + File.separator + "3.4.4-upgrade-2.sql";
+        String upgrade_sql2 = "upgrade/3.4.4-upgrade-2.sql";
+        log.info("开始处理3.4.3历史数据,更新脚本2;地址:" + upgrade_sql2);
         this.execUpgradeSql(jdbcTemplate, upgrade_sql2);
         log.info("结束处理3.4.4升级脚本2;时间:" + DateFormatUtils.format(new Date(), DATE_PATTERN));
 
@@ -349,20 +350,11 @@ public class DataUpgrade_3_4_4 implements DataUpgradeService {
         if (StringUtils.isBlank(upgradeSql)) {
             throw new RuntimeException("没有配置升级sql脚本文件地址");
         }
-        File file = new File(upgradeSql);
-        if (!file.exists()) {
-            throw new RuntimeException("升级sql脚本文件不存在");
-        }
-        try {
-            FileInputStream inputStream = new FileInputStream(upgradeSql);
-            String[] sqlList = StringUtils.split(ResourceFileHelper.readContent(inputStream), ";");
-            Arrays.stream(sqlList).filter(StringUtils::isNotBlank).forEach(sql -> {
-                log.info(sql);
-                jdbcTemplate.execute(sql);
-            });
-        } catch (FileNotFoundException e) {
-            throw new RuntimeException(e);
-        }
+        String[] sqlList = StringUtils.split(ResourceFileHelper.readContent(upgradeSql), ";");
+        Arrays.stream(sqlList).filter(StringUtils::isNotBlank).forEach(sql -> {
+            log.info(sql);
+            jdbcTemplate.execute(sql);
+        });
     }
 
     private <T> T getOne(JdbcTemplate jdbcTemplate, String sql, Class<T> tClass) {

+ 0 - 0
distributed-print/install/mysql/upgrade/3.4.4-upgrade-1.sql → distributed-print/src/main/resources/upgrade/3.4.4-upgrade-1.sql


+ 1 - 1
distributed-print/install/mysql/upgrade/3.4.4-upgrade-2.sql → distributed-print/src/main/resources/upgrade/3.4.4-upgrade-2.sql

@@ -307,7 +307,7 @@ CREATE TABLE IF NOT EXISTS `exam_card_model_four` (
         `page_size` varchar(10) DEFAULT NULL COMMENT '题卡纸张大小(A3,8K)',
         `remark` mediumtext COMMENT '备注',
         PRIMARY KEY (`id`) USING BTREE
-    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='模式4题卡';
+    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='模式4题卡';
 
 INSERT INTO sys_privilege(id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display) VALUES(1199, '答题卡管理', 'CardModel4Manage', 'MENU', 3, 4, 'AUTH', NULL, 1, 0, 1);
 INSERT INTO sys_privilege(id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display) VALUES(1200, '查询', 'Select', 'BUTTON', 1199, 1, 'AUTH', '1209', 1, 0, 1);

+ 4 - 18
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -1200,18 +1200,8 @@ public class MarkServiceImpl implements MarkService {
     @Transactional
     @Override
     public SubmitResult saveTask(Long examId, String paperNumber, Long userId, MarkResult result) {
-        for (MarkResultQuestion question : result.getQuestionList()) {
-            MarkUserQuestion markUserQuestion = markUserQuestionService.getByExamIdAndPaperNumberAndQuestionIdAndUserId(examId, paperNumber, question.getQuestionId(), userId);
-            if (markUserQuestion == null) {
-                throw ExceptionResultEnum.ERROR.exception("评卷员未绑定题目" + question.getMainNumber() + "-" + question.getSubNumber());
-            }
-        }
-
         SubmitResult sr;
         try {
-            lockService.watch(LockType.EXAM_SUBJECT, examId, paperNumber);
-            lockService.watch(LockType.MARK_USER_QUESTION, userId);
-            lockService.waitlock(LockType.STUDENT, result.getStudentId());
             sr = submitResult(examId, paperNumber, userId, result);
             if (sr.isSuccess()) {
                 releaseStudent(examId, paperNumber, sr.getStudentId(), userId);
@@ -1219,10 +1209,6 @@ public class MarkServiceImpl implements MarkService {
         } catch (Exception e) {
             log.error("save task error", e);
             throw ExceptionResultEnum.ERROR.exception(e.getMessage());
-        } finally {
-            lockService.unlock(LockType.STUDENT, result.getStudentId());
-            lockService.unwatch(LockType.MARK_USER_QUESTION, userId);
-            lockService.unwatch(LockType.EXAM_SUBJECT, examId, paperNumber);
         }
 
         if (sr == null || !sr.isSuccess()) {
@@ -1236,7 +1222,7 @@ public class MarkServiceImpl implements MarkService {
         int count = 0;
         for (MarkResultQuestion markResultQuestion : result.getQuestionList()) {
             try {
-                lockService.watch(LockType.QUESTION, markResultQuestion.getQuestionId());
+//                lockService.watch(LockType.QUESTION, markResultQuestion.getQuestionId());
                 markResultQuestion.setSpent(spentAvg);
                 MarkUserQuestion markUserQuestion = markUserQuestionService.getByExamIdAndPaperNumberAndQuestionIdAndUserId(examId, paperNumber, markResultQuestion.getQuestionId(), userId);
                 MarkQuestion markQuestion = markQuestionService.getById(markResultQuestion.getQuestionId());
@@ -1250,7 +1236,7 @@ public class MarkServiceImpl implements MarkService {
                         // 状态更新
                         if (markTaskService.updateProblemResult(task.getId(), userId, now, markResultQuestion.getSpent())) {
                             saveProblemHistory(markResultQuestion, task, userId);
-                            updateMarkedCount(markUserQuestion.getExamId(), markUserQuestion.getPaperNumber(), markUserQuestion.getQuestionId());
+//                            updateMarkedCount(markUserQuestion.getExamId(), markUserQuestion.getPaperNumber(), markUserQuestion.getQuestionId());
                             // 未评完
                             resetStudentStatus(task.getStudentId());
                             count++;
@@ -1260,7 +1246,7 @@ public class MarkServiceImpl implements MarkService {
                         count++;
                     } else if (markResultQuestion.getMarkerScore() <= markQuestion.getTotalScore()) {//阅卷分是否小于等于该组总分
                         if (submitTask(task, userId, markQuestion, markResultQuestion)) {
-                            updateMarkedCount(markUserQuestion.getExamId(), markUserQuestion.getPaperNumber(), markUserQuestion.getQuestionId());
+//                            updateMarkedCount(markUserQuestion.getExamId(), markUserQuestion.getPaperNumber(), markUserQuestion.getQuestionId());
                             count++;
                         }
                     }
@@ -1268,7 +1254,7 @@ public class MarkServiceImpl implements MarkService {
             } catch (Exception e) {
                 throw ExceptionResultEnum.ERROR.exception(e.getMessage());
             } finally {
-                lockService.unwatch(LockType.QUESTION, markResultQuestion.getQuestionId());
+//                lockService.unwatch(LockType.QUESTION, markResultQuestion.getQuestionId());
             }
         }
         if (CollectionUtils.size(result.getQuestionList()) == count) {