瀏覽代碼

3.1.0-发布功能

xiaof 3 年之前
父節點
當前提交
d975812000
共有 14 個文件被更改,包括 178 次插入19 次删除
  1. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/GradeBatchPaper.java
  2. 3 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/DataSyncReportService.java
  3. 3 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/GradeBatchPaperService.java
  4. 37 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncReportServiceImpl.java
  5. 21 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchPaperServiceImpl.java
  6. 6 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncTeachCloudReportService.java
  7. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/GradeBatchController.java
  8. 33 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/GradeBatchPaperController.java
  9. 1 0
      distributed-print/src/main/resources/application-dev.properties
  10. 1 0
      distributed-print/src/main/resources/application-release.properties
  11. 1 0
      distributed-print/src/main/resources/application-test.properties
  12. 10 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/domain/ReportOpenDomain.java
  13. 4 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PushTypeEnum.java
  14. 46 8
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/TeachCloudReportTaskUtils.java

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/GradeBatchPaper.java

@@ -62,6 +62,9 @@ public class GradeBatchPaper extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "是否可用")
     private Boolean enable;
 
+    @ApiModelProperty(value = "是否发布")
+    private Boolean publishStatus;
+
     public Long getSchoolId() {
         return schoolId;
     }
@@ -149,4 +152,12 @@ public class GradeBatchPaper extends BaseEntity implements Serializable {
     public void setEnable(Boolean enable) {
         this.enable = enable;
     }
+
+    public Boolean getPublishStatus() {
+        return publishStatus;
+    }
+
+    public void setPublishStatus(Boolean publishStatus) {
+        this.publishStatus = publishStatus;
+    }
 }

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/DataSyncReportService.java

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print.business.service;
 
 import com.qmth.distributed.print.business.entity.GradeBatch;
+import com.qmth.distributed.print.business.entity.GradeBatchPaper;
 import com.qmth.distributed.print.business.entity.TBSyncTask;
 
 /**
@@ -11,4 +12,6 @@ public interface DataSyncReportService {
     void syncGradeBatch(GradeBatch gradeBatch, TBSyncTask tbSyncTask);
 
     void startCalc(GradeBatch gradeBatch, TBSyncTask tbSyncTask);
+
+    void publish(GradeBatch gradeBatch, GradeBatchPaper gradeBatchPaper, TBSyncTask tbSyncTask);
 }

+ 3 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/GradeBatchPaperService.java

@@ -55,10 +55,12 @@ public interface GradeBatchPaperService extends IService<GradeBatchPaper> {
     /**
      * 删除分析批次试卷
      *
+     *
+     * @param batchId
      * @param idList 要删除的分析批次试卷id集合
      * @return 结果
      */
-    boolean deleteGradeBatchPaper(List<Long> idList);
+    boolean deleteGradeBatchPaper(Long batchId, List<Long> idList);
 
     /**
      * 根据试卷编号和试卷类型判断分析课程是否有操作权限(批次分析试卷没有在计算中的才能操作)

+ 37 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncReportServiceImpl.java

@@ -95,7 +95,11 @@ public class DataSyncReportServiceImpl implements DataSyncReportService {
                 String courseCode = gradeBatchPaper.getPaperNumber() + gradeBatchPaper.getPaperType();
                 boolean syncCourse = teachCloudReportTaskUtils.syncCourse(schoolId, String.valueOf(thirdExamId), courseCode, gradeBatchPaper.getPaperName(), gradeBatchPaper.getPaperType(), gradeBatchPaper.getTeachCollegeName(), gradeBatchPaper.getEnable());
                 if (syncCourse) {
-                    //
+                    // 删除enable=false的课程
+                    if(!gradeBatchPaper.getEnable()) {
+                        gradeBatchPaperService.removeById(gradeBatchPaper.getId());
+                    }
+
                     QueryWrapper<GradeBatchPaper> gradeBatchPaperQueryWrapper = new QueryWrapper<>();
                     gradeBatchPaperQueryWrapper.lambda().eq(GradeBatchPaper::getSchoolId, schoolId).eq(GradeBatchPaper::getPaperNumber, gradeBatchPaper.getPaperNumber()).eq(GradeBatchPaper::getPaperType, gradeBatchPaper.getPaperType());
                     List<GradeBatchPaper> gradeBatchPapers = gradeBatchPaperService.list(gradeBatchPaperQueryWrapper);
@@ -169,11 +173,42 @@ public class DataSyncReportServiceImpl implements DataSyncReportService {
             status = TaskStatusEnum.FINISH;
             tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, result, errorMessage);
 
-            if(source != null){
+            if (source != null) {
                 UpdateWrapper<GradeBatch> updateWrapper = new UpdateWrapper<>();
                 updateWrapper.lambda().set(GradeBatch::getSource, source).eq(GradeBatch::getId, gradeBatch.getId());
                 gradeBatchService.update(updateWrapper);
             }
         }
     }
+
+    @Async
+    @Override
+    public void publish(GradeBatch gradeBatch, GradeBatchPaper gradeBatchPaper, TBSyncTask tbSyncTask) {
+        // 同步初始参数
+        TaskResultEnum result = null;
+        TaskStatusEnum status;
+        String errorMessage = null;
+        boolean publish = false;
+        Long schoolId = tbSyncTask.getSchoolId();
+        try {
+            // 同步中
+            status = TaskStatusEnum.RUNNING;
+            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, null, null);
+
+            publish = teachCloudReportTaskUtils.publish(schoolId, gradeBatch.getThirdExamId(), gradeBatchPaper.getGradeCourseCode(), true);
+            // 任务结果
+            result = TaskResultEnum.SUCCESS;
+        } catch (Exception e) {
+            result = TaskResultEnum.ERROR;
+            errorMessage = e.getMessage();
+        } finally {
+            // 同步结束
+            status = TaskStatusEnum.FINISH;
+            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, result, errorMessage);
+
+            UpdateWrapper<GradeBatchPaper> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.lambda().set(GradeBatchPaper::getPublishStatus, publish).eq(GradeBatchPaper::getId, gradeBatchPaper.getId());
+            gradeBatchPaperService.update(updateWrapper);
+        }
+    }
 }

+ 21 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchPaperServiceImpl.java

@@ -135,7 +135,13 @@ public class GradeBatchPaperServiceImpl extends ServiceImpl<GradeBatchPaperMappe
                 gradeBatchPaper.insertInfo(requestUser.getId());
                 gradeBatchPaper.setStatus(GradeAnalyzePaperStatusEnum.PUSH_GRADE_BATCH);
                 gradeBatchPaper.setEnable(true);
+                gradeBatchPaper.setPublishStatus(false);
                 updateBatchStatus.set(true);
+
+                // 更新批次状态为PUSH_GRADE_BATCH
+                UpdateWrapper<GradeBatch> updateWrapper = new UpdateWrapper<>();
+                updateWrapper.lambda().set(GradeBatch::getStatus, GradeAnalyzePaperStatusEnum.PUSH_GRADE_BATCH).eq(GradeBatch::getId, batchId);
+                gradeBatchService.update(updateWrapper);
             } else {
                 // 编辑(计算中的不允许被编辑,其他状态下的只要开课学院和试卷名称有变化,状态就更新为需要重新推送)
                 GradeAnalyzePaperStatusEnum dbStatus = dbBatchPaper.getStatus();
@@ -148,6 +154,7 @@ public class GradeBatchPaperServiceImpl extends ServiceImpl<GradeBatchPaperMappe
                 }
                 gradeBatchPaper.setId(dbBatchPaper.getId());
                 gradeBatchPaper.setStatus(dbBatchPaper.getStatus());
+                gradeBatchPaper.setPublishStatus(dbBatchPaper.getPublishStatus());
                 gradeBatchPaper.updateInfo(requestUser.getId());
             }
             return Stream.of(gradeBatchPaper);
@@ -165,15 +172,27 @@ public class GradeBatchPaperServiceImpl extends ServiceImpl<GradeBatchPaperMappe
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public boolean deleteGradeBatchPaper(List<Long> idList) {
+    public boolean deleteGradeBatchPaper(Long batchId, List<Long> idList) {
         for (Long id : idList) {
             GradeBatchPaper gradeBatchPaper = this.getById(id);
             if (GradeAnalyzePaperStatusEnum.CALCULATING.equals(gradeBatchPaper.getStatus())) {
                 throw ExceptionResultEnum.ERROR.exception("试卷编号为【" + gradeBatchPaper.getPaperNumber() +
                         "】,试卷类型为【" + gradeBatchPaper.getPaperType() + "】的分析试卷正在计算中请稍后再试");
             }
+            if (gradeBatchPaper.getPublishStatus()) {
+                throw ExceptionResultEnum.ERROR.exception("试卷编号为【" + gradeBatchPaper.getPaperNumber() +
+                        "】,试卷类型为【" + gradeBatchPaper.getPaperType() + "】的分析试卷已发布,不能删除");
+            }
         }
-        return this.removeByIds(idList);
+        // 更新批次状态为status=PUSH_GRADE_BATCH
+        UpdateWrapper<GradeBatch> gradeBatchUpdateWrapper = new UpdateWrapper<>();
+        gradeBatchUpdateWrapper.lambda().set(GradeBatch::getStatus, GradeAnalyzePaperStatusEnum.PUSH_GRADE_BATCH).eq(GradeBatch::getId, batchId);
+        gradeBatchService.update(gradeBatchUpdateWrapper);
+
+        // 更新enale=false
+        UpdateWrapper<GradeBatchPaper> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(GradeBatchPaper::getEnable, false).in(GradeBatchPaper::getId, idList);
+        return this.update(updateWrapper);
     }
 
     @Override

+ 6 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncTeachCloudReportService.java

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print.business.templete.execute;
 
 import com.qmth.distributed.print.business.entity.GradeBatch;
+import com.qmth.distributed.print.business.entity.GradeBatchPaper;
 import com.qmth.distributed.print.business.entity.TBSyncTask;
 import com.qmth.distributed.print.business.service.DataSyncReportService;
 import com.qmth.distributed.print.business.service.TBSyncTaskService;
@@ -45,4 +46,9 @@ public class AsyncTeachCloudReportService {
         TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatch.getSchoolId(), gradeBatch.getId(), PushTypeEnum.CALCULATE);
         dataSyncReportService.startCalc(gradeBatch, tbSyncTask);
     }
+
+    public void publish(GradeBatch gradeBatch, GradeBatchPaper gradeBatchPaper) {
+        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatchPaper.getSchoolId(), gradeBatchPaper.getId(), PushTypeEnum.PUBLISH);
+        dataSyncReportService.publish(gradeBatch, gradeBatchPaper, tbSyncTask);
+    }
 }

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

@@ -126,7 +126,7 @@ public class GradeBatchController {
     }
 
     /**
-     * 导入考务数据-包含任课老师信息
+     * 成绩分析批次课程-开始计算
      *
      * @param batchId 批次ID
      */

+ 33 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/GradeBatchPaperController.java

@@ -6,7 +6,11 @@ import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.params.analyze.GradeBatchPaperParam;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.bean.result.analyze.GradeBatchPaperResult;
+import com.qmth.distributed.print.business.entity.GradeBatch;
+import com.qmth.distributed.print.business.entity.GradeBatchPaper;
 import com.qmth.distributed.print.business.service.GradeBatchPaperService;
+import com.qmth.distributed.print.business.service.GradeBatchService;
+import com.qmth.distributed.print.business.templete.execute.AsyncTeachCloudReportService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
@@ -42,6 +46,12 @@ public class GradeBatchPaperController {
     @Resource
     private GradeBatchPaperService gradeBatchPaperService;
 
+    @Resource
+    private GradeBatchService gradeBatchService;
+
+    @Resource
+    private AsyncTeachCloudReportService asyncTeachCloudReportService;
+
     @ApiOperation(value = "成绩分析批次课程-查询")
     @RequestMapping(value = "/page", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = GradeBatchPaperResult.class)})
@@ -89,10 +99,30 @@ public class GradeBatchPaperController {
     @ApiOperation(value = "成绩分析批次课程-删除")
     @RequestMapping(value = "/delete", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
-    public Result deleteGradeBatchPaper(@ApiParam(value = "选择的要删除的成绩分析课程id集合", required = true) @RequestParam List<String> idList) {
-        gradeBatchPaperService.deleteGradeBatchPaper(idList.stream().map(SystemConstant::convertIdToLong).collect(Collectors.toList()));
+    public Result deleteGradeBatchPaper(@ApiParam(value = "批次ID", required = true) @RequestParam Long batchId,
+                                        @ApiParam(value = "选择的要删除的成绩分析课程id集合", required = true) @RequestParam List<String> idList) {
+        gradeBatchPaperService.deleteGradeBatchPaper(batchId, idList.stream().map(SystemConstant::convertIdToLong).collect(Collectors.toList()));
         return ResultUtil.ok();
     }
 
-    // TODO: 2022/6/2 成绩分析课程推送,计算
+    /**
+     * 成绩分析批次课程-发布
+     *
+     * @param gradeBatchPaperId 批次试卷ID
+     */
+    @ApiOperation(value = "成绩分析批次课程-发布")
+    @RequestMapping(value = "/publish", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "发布成功", response = EditResult.class)})
+    public Result publish(@RequestParam Long batchId, @RequestParam Long gradeBatchPaperId) {
+        GradeBatchPaper gradeBatchPaper = gradeBatchPaperService.getById(gradeBatchPaperId);
+        if(gradeBatchPaper == null){
+            throw ExceptionResultEnum.ERROR.exception("没有批次课程信息");
+        }
+        GradeBatch gradeBatch = gradeBatchService.getById(batchId);
+        if(gradeBatch == null){
+            throw ExceptionResultEnum.ERROR.exception("没有批次信息");
+        }
+        asyncTeachCloudReportService.publish(gradeBatch, gradeBatchPaper);
+        return ResultUtil.success(true);
+    }
 }

+ 1 - 0
distributed-print/src/main/resources/application-dev.properties

@@ -203,6 +203,7 @@ report.open.examApi=/api/report/open/exam_edit
 report.open.courseEditApi=/api/report/open/course_edit
 report.open.courseDelApi=/api/report/open/course_del
 report.open.calculateApi=/api/report/open/calculate
+report.open.publishApi=/api/report/open/publish
 report.open.ssoLoginApi=/api/report/sso/login
 
 print.open.callbackPwd=123456

+ 1 - 0
distributed-print/src/main/resources/application-release.properties

@@ -207,6 +207,7 @@ report.open.examApi=/api/report/open/exam_edit
 report.open.courseEditApi=/api/report/open/course_edit
 report.open.courseDelApi=/api/report/open/course_del
 report.open.calculateApi=/api/report/open/calculate
+report.open.publishApi=/api/report/open/publish
 report.open.ssoLoginApi=/api/report/sso/login
 
 print.open.callbackPwd=123456

+ 1 - 0
distributed-print/src/main/resources/application-test.properties

@@ -202,6 +202,7 @@ report.open.examApi=/api/report/open/exam_edit
 report.open.courseEditApi=/api/report/open/course_edit
 report.open.courseDelApi=/api/report/open/course_del
 report.open.calculateApi=/api/report/open/calculate
+report.open.publishApi=/api/report/open/publish
 report.open.ssoLoginApi=/api/report/sso/login
 
 print.open.callbackPwd=123456

+ 10 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/domain/ReportOpenDomain.java

@@ -23,6 +23,8 @@ public class ReportOpenDomain implements Serializable {
 
     String calculateApi;
 
+    String publishApi;
+
     String ssoLoginApi;
 
     public String getSsoLoginApi() {
@@ -73,6 +75,14 @@ public class ReportOpenDomain implements Serializable {
         this.calculateApi = calculateApi;
     }
 
+    public String getPublishApi() {
+        return publishApi;
+    }
+
+    public void setPublishApi(String publishApi) {
+        this.publishApi = publishApi;
+    }
+
     public String getSemesterApi() {
         return semesterApi;
     }

+ 4 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PushTypeEnum.java

@@ -16,7 +16,7 @@ public enum PushTypeEnum {
 
     STRUCTURE_GROUP_PUSH("试卷结构、分组、评卷员绑定关系数据推送"),
 
-    PAPER_ANSWER_FILE_PUSH("试卷、标文件推送"),
+    PAPER_ANSWER_FILE_PUSH("试卷、标文件推送"),
 
     OBJECTIVE_ANSWER_PUSH("客观题答案推送"),
 
@@ -24,7 +24,9 @@ public enum PushTypeEnum {
 
     GRADE_BATCH_PUSH("分析批次推送"),
 
-    CALCULATE("分析计算");
+    CALCULATE("分析计算"),
+
+    PUBLISH("发布");
 
     PushTypeEnum(String title) {
         this.title = title;

+ 46 - 8
teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/TeachCloudReportTaskUtils.java

@@ -10,7 +10,6 @@ import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicSchool;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.service.CommonCacheService;
-import com.qmth.teachcloud.common.util.HttpKit;
 import com.qmth.teachcloud.common.util.HttpUtil;
 import com.qmth.teachcloud.common.util.JacksonUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
@@ -48,10 +47,10 @@ public class TeachCloudReportTaskUtils {
      * 学期创建/更新接口
      *
      * @param thirdSemesterId
-     * @param semesterName 学期名称
-     * @param startTime    学期开始时间
-     * @param endTime      学期结束时间
-     * @param enable       启用/禁用,ture:启用,false:禁用,默认启用
+     * @param semesterName    学期名称
+     * @param startTime       学期开始时间
+     * @param endTime         学期结束时间
+     * @param enable          启用/禁用,ture:启用,false:禁用,默认启用
      */
     public Long syncSemester(Long schoolId, Long thirdSemesterId, String semesterName, Long startTime, Long endTime, Boolean enable) {
         String hostUrl = dictionaryConfig.reportOpenDomain().getHostUrl();
@@ -74,7 +73,7 @@ public class TeachCloudReportTaskUtils {
             JSONObject jsonObject = JSONObject.parseObject(result);
             if (jsonObject.containsKey("code")) {
                 String code = jsonObject.getString("code");
-                if("200".equals(code)) {
+                if ("200".equals(code)) {
                     return jsonObject.getLong("data");
                 } else {
                     throw ExceptionResultEnum.ERROR.exception(jsonObject.getString("error"));
@@ -118,7 +117,7 @@ public class TeachCloudReportTaskUtils {
             JSONObject jsonObject = JSONObject.parseObject(result);
             if (jsonObject.containsKey("code")) {
                 String code = jsonObject.getString("code");
-                if("200".equals(code)) {
+                if ("200".equals(code)) {
                     return jsonObject.getLong("data");
                 } else {
                     throw ExceptionResultEnum.ERROR.exception(jsonObject.getString("error"));
@@ -162,7 +161,7 @@ public class TeachCloudReportTaskUtils {
             JSONObject jsonObject = JSONObject.parseObject(result);
             if (jsonObject.containsKey("code")) {
                 String code = jsonObject.getString("code");
-                if("200".equals(code)) {
+                if ("200".equals(code)) {
                     JSONObject successJson = JSONObject.parseObject(jsonObject.getString("data"));
                     return successJson.getBoolean("success");
                 } else {
@@ -212,6 +211,45 @@ public class TeachCloudReportTaskUtils {
         return false;
     }
 
+    /**
+     * 发布
+     *
+     * @param schoolId        学校ID
+     * @param thirdExamId     考试ID
+     * @param gradeCourseCode 课程
+     * @param publishStatus   发布状态
+     * @return
+     */
+    public boolean publish(Long schoolId, Long thirdExamId, String gradeCourseCode, boolean publishStatus) {
+        String hostUrl = dictionaryConfig.reportOpenDomain().getHostUrl();
+        String saveUrl = dictionaryConfig.reportOpenDomain().getPublishApi();
+        validUrl(hostUrl, saveUrl);
+        String postUrl = hostUrl.concat(saveUrl);
+        long timestamp = System.currentTimeMillis();
+        try {
+            Map<String, Object> map = new HashMap<>();
+            map.computeIfAbsent("examId", v -> thirdExamId);
+            map.computeIfAbsent("courseCode", v -> gradeCourseCode);//试卷编号+卷型
+            map.computeIfAbsent("publishStatus", v -> publishStatus);//发布(默认true)
+            String accessToken = createSign(schoolId, timestamp, saveUrl);
+            String result = HttpUtil.postJson(postUrl, JacksonUtil.parseJson(map), accessToken, timestamp);
+            JSONObject jsonObject = JSONObject.parseObject(result);
+            if (jsonObject.containsKey("code")) {
+                String code = jsonObject.getString("code");
+                if ("200".equals(code)) {
+                    JSONObject successJson = JSONObject.parseObject(jsonObject.getString("data"));
+                    return successJson.getBoolean("success");
+                } else {
+                    throw ExceptionResultEnum.ERROR.exception(jsonObject.getString("error"));
+                }
+            } else {
+                throw ExceptionResultEnum.ERROR.exception("分析课程同步失败");
+            }
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            throw ExceptionResultEnum.ERROR.exception(e.getMessage());
+        }
+    }
 
     /**
      * http请求头