Jelajahi Sumber

Merge branch 'dev_v2.2.1' of http://git.qmth.com.cn/wangliang/distributed-print-service into dev_v2.2.1

xiaof 3 tahun lalu
induk
melakukan
9e5be7f7f0

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TSyncExamStudentScoreResult.java

@@ -109,6 +109,17 @@ public class TSyncExamStudentScoreResult implements Serializable {
     @ApiModelProperty(value = "主观题分数")
     private Double subjectiveScore;
 
+    @ApiModelProperty(value = "阅卷数据")
+    private String syncData;
+
+    public String getSyncData() {
+        return syncData;
+    }
+
+    public void setSyncData(String syncData) {
+        this.syncData = syncData;
+    }
+
     public String getExamNumber() {
         return examNumber;
     }

+ 9 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TSyncExamStudentScoreService.java

@@ -6,6 +6,7 @@ import com.qmth.distributed.print.business.bean.result.TSyncExamStudentScoreResu
 import com.qmth.distributed.print.business.entity.TSyncExamStudentScore;
 import com.qmth.distributed.print.business.enums.ImageTrajectoryEnum;
 
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
@@ -63,4 +64,12 @@ public interface TSyncExamStudentScoreService extends IService<TSyncExamStudentS
      * @return
      */
     public TSyncExamStudentScore createImageTrajectory(TSyncExamStudentScore tSyncExamStudentScore, ImageTrajectoryEnum imageTrajectoryEnum);
+
+    /**
+     * 生成zip文件
+     *
+     * @param tSyncExamStudentScore
+     * @throws IOException
+     */
+    public void createZipFile(TSyncExamStudentScore tSyncExamStudentScore) throws IOException;
 }

+ 3 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBSyncTaskServiceImpl.java

@@ -11,10 +11,12 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.PushTypeEnum;
 import com.qmth.teachcloud.common.enums.TaskStatusEnum;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * @Date: 2021/5/20.
@@ -48,10 +50,7 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
     @Transactional
     @Override
     public TBSyncTask savePushCommon(PushTypeEnum pushTypeEnum, Map map, SysUser sysUser) {
-//        SysUser requestUser = Objects.nonNull(sysUser) ? sysUser : (SysUser) ServletUtil.getRequestUser();
-        SysUser requestUser = new SysUser();
-        requestUser.setId(187219022012481536L);
-        requestUser.setSchoolId(2L);
+        SysUser requestUser = Objects.nonNull(sysUser) ? sysUser : (SysUser) ServletUtil.getRequestUser();
         TBSyncTask tbSyncTask = new TBSyncTask(pushTypeEnum,
                 TaskStatusEnum.INIT,
                 requestUser.getId(),

+ 65 - 11
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSyncExamStudentScoreServiceImpl.java

@@ -14,17 +14,14 @@ 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.UploadFileEnum;
-import com.qmth.teachcloud.common.service.TeachcloudCommonService;
-import com.qmth.teachcloud.common.util.FileStoreUtil;
-import com.qmth.teachcloud.common.util.HttpUtil;
-import com.qmth.teachcloud.common.util.ImageTrajectoryUtil;
-import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.common.util.*;
 import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.io.IOUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.io.File;
-import java.io.FileInputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
 import java.time.LocalDateTime;
 import java.util.*;
 
@@ -48,9 +45,6 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
     @Resource
     FileStoreUtil fileStoreUtil;
 
-    @Resource
-    TeachcloudCommonService teachcloudCommonService;
-
     /**
      * 同步成绩查询列表
      *
@@ -96,10 +90,14 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
         List<File> fileSourceList = new ArrayList<>(), fileTargetList = new ArrayList<>();
         try {
             Optional.ofNullable(tSyncExamStudentScore.getSheetUrls()).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未获取到考生原卷地址"));
+            Optional.ofNullable(tSyncExamStudentScore.getSyncData()).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未获取到考生作答数据"));
             StringJoiner stringJoiner = new StringJoiner("");
             stringJoiner.add(SystemConstant.TEMP_FILES_DIR).add(File.separator);
             if (Objects.isNull(tSyncExamStudentScore.getTrajectoryUrls())) {
                 JSONArray jsonArray = JSONArray.parseArray(tSyncExamStudentScore.getSheetUrls());
+                JSONObject syncDataJson = JSONObject.parseObject(tSyncExamStudentScore.getSyncData());
+                Optional.ofNullable(syncDataJson.get("markTags")).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未获取到考生轨迹坐标数据"));
+                JSONObject markTagsJson = JSONObject.parseObject(syncDataJson.get("markTags").toString());
                 boolean oss = dictionaryConfig.sysDomain().isOss();
                 JSONObject jsonObject = new JSONObject();
                 jsonObject.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.FILE);
@@ -110,6 +108,10 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
                 }
                 JSONArray jsonImageTrajectoryPathArray = new JSONArray();
                 for (int i = 0; i < jsonArray.size(); i++) {
+                    JSONArray markTagJsonArray = (JSONArray) markTagsJson.get(i + 1);
+                    if (Objects.isNull(markTagJsonArray) || markTagJsonArray.size() == 0) {
+                        continue;
+                    }
                     String url = (String) jsonArray.get(i);
                     String format = url.substring(url.lastIndexOf("."), url.length());
                     LocalDateTime nowTime = LocalDateTime.now();
@@ -142,7 +144,8 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
                         fileTarget.getParentFile().mkdirs();
                         fileTarget.createNewFile();
                     }
-                    ImageTrajectoryUtil.createImage(fileSource, fileTarget, 10, 10);
+
+                    ImageTrajectoryUtil.createImage(fileSource, fileTarget, markTagJsonArray);
                     fileTargetList.add(fileTarget);
                     if (oss) {
                         fileStoreUtil.ossUpload(dirTargetJpgName.toString(), fileTarget, DigestUtils.md5Hex(new FileInputStream(fileTarget)), UploadFileEnum.FILE.getFssType());
@@ -185,4 +188,55 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
         }
         return tSyncExamStudentScore;
     }
+
+    /**
+     * 生成zip文件
+     *
+     * @param tSyncExamStudentScore
+     * @throws IOException
+     */
+    @Override
+    public void createZipFile(TSyncExamStudentScore tSyncExamStudentScore) throws IOException {
+        File zipFile = null;
+        OutputStream outputStream = null;
+        try {
+            if (Objects.nonNull(tSyncExamStudentScore.getTrajectoryFileList())) {
+                StringJoiner stringJoiner = new StringJoiner("");
+                stringJoiner.add(SystemConstant.TEMP_FILES_DIR).add(File.separator);
+                LocalDateTime nowTime = LocalDateTime.now();
+                StringJoiner dirZipName = new StringJoiner("");
+                dirZipName.add(UploadFileEnum.FILE.getTitle()).add(File.separator)
+                        .add(String.valueOf(nowTime.getYear())).add(File.separator)
+                        .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
+                        .add(String.format("%02d", nowTime.getDayOfMonth()))
+                        .add(File.separator).add(SystemConstant.getUuid()).add(SystemConstant.ZIP_PREFIX);
+                zipFile = new File(stringJoiner.toString() + dirZipName.toString());
+                if (!zipFile.exists()) {
+                    zipFile.getParentFile().mkdirs();
+                    zipFile.createNewFile();
+                }
+                FileUtil.doZip(zipFile, Arrays.asList(tSyncExamStudentScore.getTrajectoryFileList().get(0).getParentFile()));
+                HttpServletResponse response = ServletUtil.getResponse();
+//                response.setContentType("image/jpeg");
+//                outputStream = new BufferedOutputStream(response.getOutputStream());
+//                IOUtils.copy(new FileInputStream(zipFile), outputStream);
+                response.reset();
+                response.setHeader("Content-Disposition", "attachment;fileName=" + zipFile.getName());
+                response.addHeader("Content-Length", "" + zipFile.length());
+                response.setContentType("application/octet-stream;charset=UTF-8");
+                outputStream = new BufferedOutputStream(response.getOutputStream());
+                IOUtils.copy(new FileInputStream(zipFile), outputStream);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (Objects.nonNull(outputStream)) {
+                outputStream.flush();
+                outputStream.close();
+            }
+            if (Objects.nonNull(zipFile)) {
+                zipFile.delete();
+            }
+        }
+    }
 }

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

@@ -98,20 +98,15 @@ public class PushLogicServiceImpl implements PushLogicService {
     @Override
     @Transactional
     public Map<String, Object> executeScorePushLogic(Map<String, Object> map) throws Exception {
-//        SysUser sysUser = (SysUser) map.get(SystemConstant.SYS_USER);
-        Long schoolId = 2L;
+        SysUser sysUser = (SysUser) map.get(SystemConstant.SYS_USER);
+        Long schoolId = sysUser.getSchoolId();
         Integer examId = (Integer) map.get("examId");
         String examCode = (String) map.get("examCode");
-
-        //测试
-        String examNumber = "1503495";
-        String studentCode = "106561095131004";
-
         Long examIdLong = Long.parseLong(String.valueOf(examId));
         List<TSyncExamStudentScore> tSyncExamStudentScoreList = null;
         List<String> errorTSyncExamStudentScoreList = null;
         try {
-            int totalCount = stmmsUtils.getStudentCount(schoolId, examId, examCode, examNumber, studentCode, null, null, null, null, true);
+            int totalCount = stmmsUtils.getStudentCount(schoolId, examId, examCode, null, null, null, null, null, null, true);
             log.info("云阅卷:考试成绩考生数量查询接口调用,返回数量:{}", totalCount);
             if (totalCount > 0) {
                 int pageSize = stmmsUtils.getDefaultPageSize();
@@ -123,7 +118,7 @@ public class PushLogicServiceImpl implements PushLogicService {
                 tSyncExamStudentScoreList = new ArrayList<>();
                 errorTSyncExamStudentScoreList = new ArrayList<>();
                 for (int i = 1; i <= pageNos; i++) {
-                    List<Map> students = stmmsUtils.getStudentScore(schoolId, examId, examCode, examNumber, studentCode, null, null, null, null, true, i, pageSize);
+                    List<Map> students = stmmsUtils.getStudentScore(schoolId, examId, examCode, null, null, null, null, null, null, true, i, pageSize);
                     for (Map student : students) {
                         try {
                             //查学院id
@@ -156,7 +151,7 @@ public class PushLogicServiceImpl implements PushLogicService {
                             student.put("orgId", orgId);
                             student.put("clazzId", clazzId);
                             student.put("majorId", majorId);
-                            student.put("userId", 2L);
+                            student.put("userId", sysUser.getId());
                             tSyncExamStudentScoreList.add(new TSyncExamStudentScore(student));
                         } catch (Exception e) {
                             log.info("同步学生成绩信息失败:{}", e.getMessage());

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

@@ -77,7 +77,8 @@
     <select id="export" resultType="com.qmth.distributed.print.business.bean.result.TSyncExamStudentScoreResult">
         <include refid="headCommonSql"/>
         ,tsess.trajectory_urls as trajectoryUrls,
-        tsess.sync_data as trajectoryCoordinate
+        tsess.sync_data as trajectoryCoordinate,
+        tsess.sync_data as syncData
         from
         t_sync_exam_student_score tsess
         <include refid="middleCommonSql"/>

+ 28 - 60
distributed-print/src/main/java/com/qmth/distributed/print/api/TSyncExamStudentScoreController.java

@@ -3,14 +3,14 @@ package com.qmth.distributed.print.api;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-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.bean.result.TSyncExamStudentScoreResult;
+import com.qmth.distributed.print.business.entity.ExamPrintPlan;
 import com.qmth.distributed.print.business.entity.TBSyncTask;
 import com.qmth.distributed.print.business.entity.TSyncExamStudentScore;
 import com.qmth.distributed.print.business.enums.ImageTrajectoryEnum;
+import com.qmth.distributed.print.business.service.ExamPrintPlanService;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.service.TSyncExamStudentScoreService;
 import com.qmth.distributed.print.business.templete.execute.AsyncScoreBatchDownloadService;
@@ -18,31 +18,26 @@ import com.qmth.distributed.print.business.templete.execute.AsyncScoreExportServ
 import com.qmth.distributed.print.business.templete.execute.AsyncScorePushService;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.TBTask;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.PushTypeEnum;
 import com.qmth.teachcloud.common.enums.TaskTypeEnum;
-import com.qmth.teachcloud.common.enums.UploadFileEnum;
-import com.qmth.teachcloud.common.util.FileUtil;
 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.apache.commons.io.IOUtils;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.OutputStream;
-import java.time.LocalDateTime;
-import java.util.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
 
 /**
  * <p>
@@ -55,7 +50,7 @@ import java.util.*;
 @Api(tags = "成绩归档Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.sync}")
-@Aac(auth = BOOL.FALSE, strict = BOOL.FALSE)
+//@Aac(auth = BOOL.FALSE, strict = BOOL.FALSE)
 @Validated
 public class TSyncExamStudentScoreController {
 
@@ -77,6 +72,9 @@ public class TSyncExamStudentScoreController {
     @Resource
     AsyncScoreBatchDownloadService asyncScoreBatchDownloadService;
 
+    @Resource
+    ExamPrintPlanService examPrintPlanService;
+
     @ApiOperation(value = "成绩归档查询列表")
     @ApiResponses({@ApiResponse(code = 200, message = "成绩查询信息", response = TSyncExamStudentScoreResult.class)})
     @RequestMapping(value = "/score/list", method = RequestMethod.POST)
@@ -118,11 +116,21 @@ public class TSyncExamStudentScoreController {
     @ApiOperation(value = "成绩查询同步")
     @ApiResponses({@ApiResponse(code = 200, message = "同步异步任务信息", response = TBSyncTask.class)})
     @RequestMapping(value = "/score/sync", method = RequestMethod.POST)
-    public Result sync(@ApiParam(value = "考试id", required = true) @RequestParam String examId,
-                       @ApiParam(value = "考试编码", required = false) @RequestParam(required = false) String examCode) {
+    public Result sync(@ApiParam(value = "学期id", required = true) @RequestParam String semesterId,
+                       @ApiParam(value = "学院id", required = true) @RequestParam String orgId) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        QueryWrapper<ExamPrintPlan> examPrintPlanQueryWrapper = new QueryWrapper<ExamPrintPlan>();
+        examPrintPlanQueryWrapper.select(" DISTINCT third_relate_id ").eq("school_id", sysUser.getSchoolId())
+                .eq("semester_id", SystemConstant.convertIdToInteger(semesterId))
+                .eq("org_id", SystemConstant.convertIdToInteger(orgId));
+        List<ExamPrintPlan> examPrintPlanList = examPrintPlanService.list(examPrintPlanQueryWrapper);
+        if (Objects.isNull(examPrintPlanList) || examPrintPlanList.size() == 0) {
+            throw ExceptionResultEnum.ERROR.exception("此学期学院下未找到需要同步的考试记录");
+        } else if (examPrintPlanList.size() > 1) {
+            throw ExceptionResultEnum.ERROR.exception("此学期学院下找到了多条考试记录");
+        }
         Map<String, Object> map = printCommonService.savePush(PushTypeEnum.SCORE_PUSH);
-        map.computeIfAbsent("examId", v -> SystemConstant.convertIdToInteger(examId));
-        map.computeIfAbsent("examCode", v -> examCode);
+        map.computeIfAbsent("examId", v -> examPrintPlanList.get(0).getThirdRelateId());
         asyncScorePushService.pushTask(map);
         TBSyncTask tbSyncTask = Objects.nonNull(map.get(SystemConstant.TB_SYNC_TASK)) ? (TBSyncTask) map.get(SystemConstant.TB_SYNC_TASK) : null;
         return Objects.nonNull(tbSyncTask) ? ResultUtil.ok(tbSyncTask.getId()) : ResultUtil.error("创建同步推送任务失败");
@@ -134,9 +142,9 @@ public class TSyncExamStudentScoreController {
     @RequestMapping(value = "/score/download", method = RequestMethod.POST)
     @Transactional
     public void download(@ApiParam(value = "学号", required = true) @RequestParam String studentCode) throws Exception {
-//        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         QueryWrapper<TSyncExamStudentScore> tSyncExamStudentScoreQueryWrapper = new QueryWrapper<>();
-        tSyncExamStudentScoreQueryWrapper.lambda().eq(TSyncExamStudentScore::getSchoolId, 2L).eq(TSyncExamStudentScore::getStudentCode, studentCode);
+        tSyncExamStudentScoreQueryWrapper.lambda().eq(TSyncExamStudentScore::getSchoolId, sysUser.getSchoolId()).eq(TSyncExamStudentScore::getStudentCode, studentCode);
         TSyncExamStudentScore tSyncExamStudentScore = tSyncExamStudentScoreService.getOne(tSyncExamStudentScoreQueryWrapper);
         Optional.ofNullable(tSyncExamStudentScore).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未找到此考生信息"));
         boolean update = Objects.isNull(tSyncExamStudentScore.getTrajectoryUrls()) ? true : false;
@@ -145,47 +153,7 @@ public class TSyncExamStudentScoreController {
         if (update || Objects.isNull(tSyncExamStudentScore.getTrajectoryUrls())) {
             tSyncExamStudentScoreService.updateById(tSyncExamStudentScore);
         }
-        File zipFile = null;
-        OutputStream outputStream = null;
-        try {
-            if (Objects.nonNull(tSyncExamStudentScore.getTrajectoryFileList())) {
-                StringJoiner stringJoiner = new StringJoiner("");
-                stringJoiner.add(SystemConstant.TEMP_FILES_DIR).add(File.separator);
-                LocalDateTime nowTime = LocalDateTime.now();
-                StringJoiner dirZipName = new StringJoiner("");
-                dirZipName.add(UploadFileEnum.FILE.getTitle()).add(File.separator)
-                        .add(String.valueOf(nowTime.getYear())).add(File.separator)
-                        .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
-                        .add(String.format("%02d", nowTime.getDayOfMonth()))
-                        .add(File.separator).add(SystemConstant.getUuid()).add(SystemConstant.ZIP_PREFIX);
-                zipFile = new File(stringJoiner.toString() + dirZipName.toString());
-                if (!zipFile.exists()) {
-                    zipFile.getParentFile().mkdirs();
-                    zipFile.createNewFile();
-                }
-                FileUtil.doZip(zipFile, Arrays.asList(tSyncExamStudentScore.getTrajectoryFileList().get(0).getParentFile()));
-                HttpServletResponse response = ServletUtil.getResponse();
-//                response.setContentType("image/jpeg");
-//                outputStream = new BufferedOutputStream(response.getOutputStream());
-//                IOUtils.copy(new FileInputStream(zipFile), outputStream);
-                response.reset();
-                response.setHeader("Content-Disposition", "attachment;fileName=" + zipFile.getName());
-                response.addHeader("Content-Length", "" + zipFile.length());
-                response.setContentType("application/octet-stream;charset=UTF-8");
-                outputStream = new BufferedOutputStream(response.getOutputStream());
-                IOUtils.copy(new FileInputStream(zipFile), outputStream);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            if (Objects.nonNull(outputStream)) {
-                outputStream.flush();
-                outputStream.close();
-            }
-            if (Objects.nonNull(zipFile)) {
-                zipFile.delete();
-            }
-        }
+        tSyncExamStudentScoreService.createZipFile(tSyncExamStudentScore);
     }
 
     @ApiOperation(value = "成绩动态轨迹图一键下载")

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

@@ -244,10 +244,7 @@ public class TBTaskServiceImpl extends ServiceImpl<TBTaskMapper, TBTask> impleme
      */
     @Override
     public TBTask saveTaskCommon(BasicAttachment basicAttachment, TaskTypeEnum taskTypeEnum, Map map, SysUser sysUser) {
-//        SysUser requestUser = Objects.nonNull(sysUser) ? sysUser : (SysUser) ServletUtil.getRequestUser();
-        SysUser requestUser = new SysUser();
-        requestUser.setId(187219022012481536L);
-        requestUser.setSchoolId(2L);
+        SysUser requestUser = Objects.nonNull(sysUser) ? sysUser : (SysUser) ServletUtil.getRequestUser();
         TBTask tbTask = new TBTask(taskTypeEnum,
                 TaskStatusEnum.INIT,
                 Objects.nonNull(basicAttachment) ? basicAttachment.getName() : null,

+ 4 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/StmmsUtils.java

@@ -462,8 +462,8 @@ public class StmmsUtils {
         Map<String, Object> map = new HashMap<>();
         map.put("examId", validParam(String.valueOf(examId), null, true, "考试ID"));
 //        map.put("examCode", validParam(examCode, null, false, "考试编码"));
-        map.put("examNumber", validParam(examNumber, null, false, "准考证号"));
-        map.put("studentCode", validParam(studentCode, null, false, "学号"));
+//        map.put("examNumber", validParam(examNumber, null, false, "准考证号"));
+//        map.put("studentCode", validParam(studentCode, null, false, "学号"));
 //        map.put("subjectCode", validParam(subjectCode, null, false, "课程编码"));
 //        map.put("college", validParam(college, null, false, "学院"));
 //        map.put("className", validParam(className, null, false, "班级"));
@@ -512,8 +512,8 @@ public class StmmsUtils {
         Map<String, Object> map = new HashMap<>();
         map.put("examId", validParam(String.valueOf(examId), null, true, "考试ID"));
 //        map.put("examCode", validParam(examCode, null, false, "考试编码"));
-        map.put("examNumber", validParam(examNumber, null, false, "准考证号"));
-        map.put("studentCode", validParam(studentCode, null, false, "学号"));
+//        map.put("examNumber", validParam(examNumber, null, false, "准考证号"));
+//        map.put("studentCode", validParam(studentCode, null, false, "学号"));
 //        map.put("subjectCode", validParam(subjectCode, null, false, "课程编码"));
 //        map.put("college", validParam(college, null, false, "学院"));
 //        map.put("className", validParam(className, null, false, "班级"));

+ 17 - 17
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/ImageTrajectoryUtil.java

@@ -1,5 +1,7 @@
 package com.qmth.teachcloud.common.util;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.sun.image.codec.jpeg.JPEGCodec;
 import com.sun.image.codec.jpeg.JPEGImageEncoder;
 import org.slf4j.Logger;
@@ -13,6 +15,7 @@ import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.Objects;
+import java.util.StringJoiner;
 
 /**
  * @Description: 图片轨迹坐标生成
@@ -29,11 +32,10 @@ public class ImageTrajectoryUtil {
      *
      * @param imgFile
      * @param targetFile
-     * @param x
-     * @param y
+     * @param jsonArray
      * @throws IOException
      */
-    public static void createImage(File imgFile, File targetFile, int x, int y) throws IOException {
+    public static void createImage(File imgFile, File targetFile, JSONArray jsonArray) throws IOException {
         FileOutputStream output = null;
         try {
             BufferedImage image = ImageIO.read(new FileInputStream(imgFile));
@@ -42,9 +44,18 @@ public class ImageTrajectoryUtil {
             // 设置字体
             g.setFont(new Font("微软雅黑", Font.LAYOUT_LEFT_TO_RIGHT, 20));// 写入签名
             // 下面这一句中的43,image.getHeight()-10可以改成你要的坐标。
-            g.drawString("22.00", 23, image.getHeight() - 20);
-            g.drawString("×", 33, image.getHeight() - 40);
-            g.drawString("√", 43, image.getHeight() - 60);
+            for (int i = 0; i < jsonArray.size(); i++) {
+                JSONObject jsonObject = jsonArray.getJSONObject(i);
+                JSONArray contentJsonArray = (JSONArray) jsonObject.get("content");
+                StringJoiner stringJoiner = new StringJoiner(",");
+                for (int k = 0; k < contentJsonArray.size(); k++) {
+                    stringJoiner.add(contentJsonArray.get(k).toString());
+                }
+                g.drawString(stringJoiner.toString(), (Integer) jsonObject.get("left"), (Integer) jsonObject.get("top"));
+            }
+//            g.drawString("22.00", 23, image.getHeight() - 20);
+//            g.drawString("×", 33, image.getHeight() - 40);
+//            g.drawString("√", 43, image.getHeight() - 60);
             g.dispose();
 
             output = new FileOutputStream(targetFile);
@@ -60,15 +71,4 @@ public class ImageTrajectoryUtil {
             }
         }
     }
-
-    /**
-     * @param args
-     */
-    public static void main(String[] args) {
-        try {
-            ImageTrajectoryUtil.createImage(new File("/Users/king/Downloads/spring.jpg"), new File("/Users/king/Downloads/1.jpg"), 10, 10);
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
 }