Эх сурвалжийг харах

3.2.2-推送考生功能优化

xiaof 2 жил өмнө
parent
commit
2ab1e5df91
34 өөрчлөгдсөн 529 нэмэгдсэн , 308 устгасан
  1. 20 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamDetailCourseDto.java
  2. 69 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/SyncExamTaskDto.java
  3. 35 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/SyncDataParam.java
  4. 34 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/PrintPlanResult.java
  5. 34 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamDetailCourse.java
  6. 1 35
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamPrintPlan.java
  7. 3 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamPrintPlanSyncStatusEnum.java
  8. 42 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/SyncCardTypeEnum.java
  9. 6 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailCourseMapper.java
  10. 0 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamPrintPlanMapper.java
  11. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamStudentMapper.java
  12. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/DataSyncService.java
  13. 6 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailCourseService.java
  14. 3 7
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPrintPlanService.java
  15. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamStudentService.java
  16. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TBSyncTaskService.java
  17. 79 82
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java
  18. 14 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java
  19. 2 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  20. 35 67
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java
  21. 5 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamStudentServiceImpl.java
  22. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskPrintServiceImpl.java
  23. 1 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  24. 5 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBSyncTaskServiceImpl.java
  25. 18 15
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncCloudMarkingTaskService.java
  26. 4 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncTeachCloudReportService.java
  27. 49 0
      distributed-print-business/src/main/resources/mapper/ExamDetailCourseMapper.xml
  28. 0 20
      distributed-print-business/src/main/resources/mapper/ExamPrintPlanMapper.xml
  29. 25 0
      distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml
  30. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicExamController.java
  31. 13 48
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanSyncController.java
  32. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java
  33. 15 7
      distributed-print/src/main/java/com/qmth/distributed/print/api/TSyncExamStudentScoreController.java
  34. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/auth/DistributedPrintSession.java

+ 20 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamDetailCourseDto.java

@@ -0,0 +1,20 @@
+package com.qmth.distributed.print.business.bean.dto;
+
+import com.qmth.distributed.print.business.entity.ExamDetailCourse;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 考场科目dto
+ */
+public class ExamDetailCourseDto extends ExamDetailCourse {
+
+    private Long examTaskId;
+
+    public Long getExamTaskId() {
+        return examTaskId;
+    }
+
+    public void setExamTaskId(Long examTaskId) {
+        this.examTaskId = examTaskId;
+    }
+}

+ 69 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/SyncExamTaskDto.java

@@ -0,0 +1,69 @@
+package com.qmth.distributed.print.business.bean.dto;
+
+
+import com.qmth.distributed.print.business.entity.ExamTask;
+import com.qmth.distributed.print.business.enums.SyncCardTypeEnum;
+
+/**
+ * @Date: 2021/3/29.
+ */
+public class SyncExamTaskDto extends ExamTask {
+
+    private String paperType;
+    private SyncCardTypeEnum syncCardType;
+    private Integer totalSubjects;
+
+    private Integer syncSuccessCount;
+
+    private Integer syncFailCount;
+
+    private Integer syncInitCount;
+
+    public String getPaperType() {
+        return paperType;
+    }
+
+    public void setPaperType(String paperType) {
+        this.paperType = paperType;
+    }
+
+    public SyncCardTypeEnum getSyncCardType() {
+        return syncCardType;
+    }
+
+    public void setSyncCardType(SyncCardTypeEnum syncCardType) {
+        this.syncCardType = syncCardType;
+    }
+
+    public Integer getTotalSubjects() {
+        return totalSubjects;
+    }
+
+    public void setTotalSubjects(Integer totalSubjects) {
+        this.totalSubjects = totalSubjects;
+    }
+
+    public Integer getSyncSuccessCount() {
+        return syncSuccessCount;
+    }
+
+    public void setSyncSuccessCount(Integer syncSuccessCount) {
+        this.syncSuccessCount = syncSuccessCount;
+    }
+
+    public Integer getSyncFailCount() {
+        return syncFailCount;
+    }
+
+    public void setSyncFailCount(Integer syncFailCount) {
+        this.syncFailCount = syncFailCount;
+    }
+
+    public Integer getSyncInitCount() {
+        return syncInitCount;
+    }
+
+    public void setSyncInitCount(Integer syncInitCount) {
+        this.syncInitCount = syncInitCount;
+    }
+}

+ 35 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/SyncDataParam.java

@@ -1,7 +1,5 @@
 package com.qmth.distributed.print.business.bean.params;
 
-import com.qmth.distributed.print.business.entity.ExamPrintPlan;
-
 import java.util.List;
 
 /**
@@ -9,12 +7,39 @@ import java.util.List;
  */
 public class SyncDataParam {
 
+    /**
+     * 印刷计划ID
+     */
+    private Long printPlanId;
+
+    /**
+     * thirdRelateId、thirdRelateName二选一,若thirdRelateId有值优先用thirdRelateId值
+     */
     private Long thirdRelateId;
 
+    /**
+     * thirdRelateId、thirdRelateName二选一,若thirdRelateId有值优先用thirdRelateId值
+     */
     private String thirdRelateName;
 
+    /**
+     * 考试时间
+     */
+    private Long examTime;
+
+    /**
+     * examTaskId集合
+     */
     private List<Long> list;
 
+    public Long getPrintPlanId() {
+        return printPlanId;
+    }
+
+    public void setPrintPlanId(Long printPlanId) {
+        this.printPlanId = printPlanId;
+    }
+
     public Long getThirdRelateId() {
         return thirdRelateId;
     }
@@ -31,6 +56,14 @@ public class SyncDataParam {
         this.thirdRelateName = thirdRelateName;
     }
 
+    public Long getExamTime() {
+        return examTime;
+    }
+
+    public void setExamTime(Long examTime) {
+        this.examTime = examTime;
+    }
+
     public List<Long> getList() {
         return list;
     }

+ 34 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/PrintPlanResult.java

@@ -54,7 +54,7 @@ public class PrintPlanResult {
     @ApiModelProperty(value = "试卷&&题卡印品类型")
     private String printContent;
 
-    @ApiModelProperty(value = "试卷备份方式(考点||场)")
+    @ApiModelProperty(value = "试卷备份方式(考点||场)")
     private BackupMethodEnum backupMethod;
 
     @ApiModelProperty(value = "试卷备份数量")
@@ -106,6 +106,15 @@ public class PrintPlanResult {
     @ApiModelProperty("是否能推送云阅卷")
     private Boolean isCanPush;
 
+    @ApiModelProperty("推送成功科目数")
+    private Integer syncSuccessCount;
+
+    @ApiModelProperty("推送失败科目数")
+    private Integer syncFailCount;
+
+    @ApiModelProperty("未推送科目数")
+    private Integer syncInitCount;
+
     public Long getId() {
         return id;
     }
@@ -321,4 +330,28 @@ public class PrintPlanResult {
     public void setCanPush(Boolean canPush) {
         isCanPush = canPush;
     }
+
+    public Integer getSyncSuccessCount() {
+        return syncSuccessCount;
+    }
+
+    public void setSyncSuccessCount(Integer syncSuccessCount) {
+        this.syncSuccessCount = syncSuccessCount;
+    }
+
+    public Integer getSyncFailCount() {
+        return syncFailCount;
+    }
+
+    public void setSyncFailCount(Integer syncFailCount) {
+        this.syncFailCount = syncFailCount;
+    }
+
+    public Integer getSyncInitCount() {
+        return syncInitCount;
+    }
+
+    public void setSyncInitCount(Integer syncInitCount) {
+        this.syncInitCount = syncInitCount;
+    }
 }

+ 34 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamDetailCourse.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.enums.ExamPrintPlanSyncStatusEnum;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -70,6 +71,15 @@ public class ExamDetailCourse extends BaseEntity implements Serializable {
     @TableField("common_attachment_id")
     private String commonAttachmentId;
 
+    @TableField("third_relate_id")
+    private Long thirdRelateId;
+
+    @TableField("sync_status")
+    private ExamPrintPlanSyncStatusEnum syncStatus;
+
+    @TableField("sync_user_id")
+    private Long syncUserId;
+
     public Long getSchoolId() {
         return schoolId;
     }
@@ -177,4 +187,28 @@ public class ExamDetailCourse extends BaseEntity implements Serializable {
     public void setCommonAttachmentId(String commonAttachmentId) {
         this.commonAttachmentId = commonAttachmentId;
     }
+
+    public Long getThirdRelateId() {
+        return thirdRelateId;
+    }
+
+    public void setThirdRelateId(Long thirdRelateId) {
+        this.thirdRelateId = thirdRelateId;
+    }
+
+    public ExamPrintPlanSyncStatusEnum getSyncStatus() {
+        return syncStatus;
+    }
+
+    public void setSyncStatus(ExamPrintPlanSyncStatusEnum syncStatus) {
+        this.syncStatus = syncStatus;
+    }
+
+    public Long getSyncUserId() {
+        return syncUserId;
+    }
+
+    public void setSyncUserId(Long syncUserId) {
+        this.syncUserId = syncUserId;
+    }
 }

+ 1 - 35
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamPrintPlan.java

@@ -6,10 +6,9 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.distributed.print.business.enums.BackupMethodEnum;
-import com.qmth.teachcloud.common.enums.DrawRuleEnum;
-import com.qmth.distributed.print.business.enums.ExamPrintPlanSyncStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.teachcloud.common.base.BaseEntity;
+import com.qmth.teachcloud.common.enums.DrawRuleEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
@@ -100,15 +99,6 @@ public class ExamPrintPlan extends BaseEntity implements Serializable {
     private String ordinaryContent;
     private PrintPlanStatusEnum status;
 
-    @TableField("third_relate_id")
-    private Long thirdRelateId;
-
-    @TableField("third_relate_name")
-    private String thirdRelateName;
-
-    @TableField("sync_status")
-    private ExamPrintPlanSyncStatusEnum syncStatus;
-
     @ApiModelProperty(value = "考试id")
     @JsonSerialize(using = ToStringSerializer.class)
     @TableField("exam_id")
@@ -221,28 +211,4 @@ public class ExamPrintPlan extends BaseEntity implements Serializable {
     public void setStatus(PrintPlanStatusEnum status) {
         this.status = status;
     }
-
-    public Long getThirdRelateId() {
-        return thirdRelateId;
-    }
-
-    public void setThirdRelateId(Long thirdRelateId) {
-        this.thirdRelateId = thirdRelateId;
-    }
-
-    public String getThirdRelateName() {
-        return thirdRelateName;
-    }
-
-    public void setThirdRelateName(String thirdRelateName) {
-        this.thirdRelateName = thirdRelateName;
-    }
-
-    public ExamPrintPlanSyncStatusEnum getSyncStatus() {
-        return syncStatus;
-    }
-
-    public void setSyncStatus(ExamPrintPlanSyncStatusEnum syncStatus) {
-        this.syncStatus = syncStatus;
-    }
 }

+ 3 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamPrintPlanSyncStatusEnum.java

@@ -11,10 +11,9 @@ import java.util.List;
 public enum ExamPrintPlanSyncStatusEnum {
 
     INIT("未开始"),
-    START_SYNC("开始同步"),
-    EXAM_FINISH("考试同步成功"),
-    STUDENT_FINISH("考生同步成功"),
-    FINISH("题卡同步成功,已结束");
+    START("开始同步"),
+    PART_FINISH("部分成功"),
+    FINISH("同步成功");
 
     ExamPrintPlanSyncStatusEnum(String desc) {
         this.desc = desc;

+ 42 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/SyncCardTypeEnum.java

@@ -0,0 +1,42 @@
+package com.qmth.distributed.print.business.enums;
+
+import com.qmth.teachcloud.common.enums.EnumResult;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 推送题卡类型
+ */
+public enum SyncCardTypeEnum {
+
+    GENERIC("通用题卡"),
+    ELECTRONIC("电子题卡");
+
+    SyncCardTypeEnum(String desc) {
+        this.desc = desc;
+    }
+
+    private String desc;
+
+    public String getDesc() {
+        return desc;
+    }
+
+    /**
+     * @return
+     */
+    public static List<EnumResult> listTypes() {
+        List<EnumResult> list = new ArrayList<EnumResult>();
+        for (SyncCardTypeEnum value : SyncCardTypeEnum.values()) {
+            EnumResult result = new EnumResult();
+            result.setName(value.name());
+            result.setOrdinal(value.ordinal());
+            result.setCode(null);
+            result.setDesc(value.getDesc());
+            list.add(result);
+        }
+        return list;
+    }
+
+}

+ 6 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailCourseMapper.java

@@ -1,6 +1,8 @@
 package com.qmth.distributed.print.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.distributed.print.business.bean.dto.ExamDetailCourseDto;
+import com.qmth.distributed.print.business.bean.dto.SyncExamTaskDto;
 import com.qmth.distributed.print.business.entity.ExamDetailCourse;
 import com.qmth.teachcloud.common.entity.BasicCourse;
 import org.apache.ibatis.annotations.Param;
@@ -31,4 +33,8 @@ public interface ExamDetailCourseMapper extends BaseMapper<ExamDetailCourse> {
     List<ExamDetailCourse> listByPrintPlanIdAndCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId, @Param("printPlanId") Long printPlanId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
 
     List<ExamDetailCourse> listByAndCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId,@Param("courseCode") String courseCode,@Param("paperNumber") String paperNumber);
+
+    List<SyncExamTaskDto> listSyncCourseByPringPlanId(List<Long> printPlanIds);
+
+    List<ExamDetailCourseDto> listByPrintPlanIdAndExamTaskId(@Param("printPlanId") Long printPlanId, @Param("examTaskIds") List<Long> examTaskIds);
 }

+ 0 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamPrintPlanMapper.java

@@ -54,7 +54,5 @@ public interface ExamPrintPlanMapper extends BaseMapper<ExamPrintPlan> {
 
     ClientPrintStatisticsTotalDto clientStatisticsTotalData(@Param("schoolId") Long schoolId, @Param("printPlanId") String printPlanId, @Param("examPlace") String examPlace, @Param("examStartTime") Long examStartTime, @Param("examEndTime") Long examEndTime, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("orgId") Long orgId, @Param("examDetailStatus") String[] examDetailStatus);
 
-    List<ThirdObjectDto> listThirdObject(@Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("examId") Long examId);
-
     List<PrintPlanBrief> listToClient(@Param("schoolId") Long schoolId, @Param("source") String source, @Param("module") String module, @Param("status") String[] status, @Param("orgId") Long orgId);
 }

+ 2 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamStudentMapper.java

@@ -54,4 +54,6 @@ public interface ExamStudentMapper extends BaseMapper<ExamStudent> {
     List<Map> listStudentScoreSync(@Param("schoolId") Long schoolId, @Param("studentCode") String studentCode, @Param("examNumber") String examNumber, @Param("subjectCode") String subjectCode);
 
     List<ExamStudentCourseClassDto> listExamStudentByPaperNumberAndPaperType(@Param("batchId") Long batchId, @Param("paperNumber") String paperNumber, @Param("paperType") String paperType);
+
+    List<SyncExamStudentDto> listStudentByExamDetailCourseId(@Param("examDetailCourseId") Long examDetailCourseId);
 }

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

@@ -8,7 +8,7 @@ import com.qmth.teachcloud.common.entity.SysUser;
  * 同步数据到云阅卷 服务类
  */
 public interface DataSyncService {
-    void syncExamAndStudentAndCard(Long relateId, String thirdRelateName, Long examEndTime, TBSyncTask tbSyncTask, SysUser sysUser);
+    void syncExamAndStudentAndCard(Long thirdRelateId, String thirdRelateName, String examTime, TBSyncTask tbSyncTask, SysUser sysUser);
 
     void syncPaperStructureAndGroup(ExamPaperStructure examPaperStructure, TBSyncTask tbSyncTask);
 

+ 6 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailCourseService.java

@@ -1,6 +1,8 @@
 package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.bean.dto.ExamDetailCourseDto;
+import com.qmth.distributed.print.business.bean.dto.SyncExamTaskDto;
 import com.qmth.distributed.print.business.entity.ExamDetailCourse;
 import com.qmth.teachcloud.common.entity.BasicCourse;
 
@@ -31,4 +33,8 @@ public interface ExamDetailCourseService extends IService<ExamDetailCourse> {
     List<ExamDetailCourse> listByPrintPlanIdAndCourseCodeAndPaperNumber(Long schoolId, Long printPlanId, String courseCode, String paperNumber);
 
     List<ExamDetailCourse> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
+
+    List<SyncExamTaskDto> listSyncCourseByPrintPlanId(List<Long> printPlanIds);
+
+    List<ExamDetailCourseDto> listByPrintPlanIdAndExamTaskId(Long printPlanId, List<Long> examTaskIds);
 }

+ 3 - 7
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPrintPlanService.java

@@ -91,13 +91,7 @@ public interface ExamPrintPlanService extends IService<ExamPrintPlan> {
 
     ClientPrintStatisticsTotalDto clientStatisticsTotalData(Long orgId, String printPlanId, String examPlace, Long examStartTime, Long examEndTime, String courseCode, String paperNumber);
 
-    List<ThirdObjectDto> printSyncPlan(Long schoolId, Long semesterId, Long examId);
-
-    void syncDataCloud(Long printPlanId, Long thirdRelateId);
-
-    void syncDataCloudBatch(SyncDataParam syncDataParam);
-
-    void syncDataMerge(SyncDataParam syncDataParam);
+    void syncDataCloud(SyncDataParam syncDataParam);
 
     /**
      * 根据考场详情表查找印刷计划
@@ -118,4 +112,6 @@ public interface ExamPrintPlanService extends IService<ExamPrintPlan> {
     List<ExamPrintPlan> findByPaperNumber(Long schoolId,String paperNumber);
 
     List<ExamPrintPlan> listBySchoolId(Long schoolId);
+
+    List<SyncExamTaskDto> listSyncExamTask(List<Long> printPlanIds);
 }

+ 2 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamStudentService.java

@@ -46,4 +46,6 @@ public interface ExamStudentService extends IService<ExamStudent> {
     ExamStudentPdfInfoDto getByStudentId(Long id);
 
     List<Map> listStudentScoreSync(Long schoolId, String studentCode, String examNumber, String subjectCode);
+
+    List<SyncExamStudentDto> listStudentByExamDetailCourseId(Long examDetailCourseId);
 }

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

@@ -20,7 +20,7 @@ import java.util.Map;
  */
 public interface TBSyncTaskService extends IService<TBSyncTask> {
 
-    TBSyncTask saveTask(Long schoolId, Long objectId, PushTypeEnum type);
+    TBSyncTask saveTask(Long schoolId,  Long objectId, PushTypeEnum type, String remark);
 
     void updateStatusAndResultById(Long id, Long thirdRelateId, TaskStatusEnum status, TaskResultEnum result, String errorMessage);
 

+ 79 - 82
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java

@@ -1,11 +1,11 @@
 package com.qmth.distributed.print.business.service.impl;
 
-import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
+import com.qmth.distributed.print.business.bean.dto.ExamDetailCourseDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamStudentDto;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamPaperStructureStatusEnum;
@@ -59,6 +59,9 @@ public class DataSyncServiceImpl implements DataSyncService {
     @Resource
     private ExamDetailService examDetailService;
 
+    @Resource
+    private ExamDetailCourseService examDetailCourseService;
+
     @Resource
     private ExamCardService examCardService;
 
@@ -91,8 +94,7 @@ public class DataSyncServiceImpl implements DataSyncService {
 
     @Async
     @Override
-    public void syncExamAndStudentAndCard(Long thirdRelateId, String thirdRelateName, Long examEndTime, TBSyncTask tbSyncTask, SysUser sysUser) {
-        UpdateWrapper<ExamPrintPlan> updateWrapper = new UpdateWrapper<>();
+    public void syncExamAndStudentAndCard(Long thirdRelateId, String thirdRelateName, String examTime, TBSyncTask tbSyncTask, SysUser sysUser) {
         ExamPrintPlanSyncStatusEnum syncStatus = ExamPrintPlanSyncStatusEnum.INIT;
 
         // 同步初始参数
@@ -101,27 +103,40 @@ public class DataSyncServiceImpl implements DataSyncService {
         String errorMessage = null;
         Long schoolId = tbSyncTask.getSchoolId();
         Long printPlanId = tbSyncTask.getObjectId();
+        List<Long> examTaskIds = JSONObject.parseArray(tbSyncTask.getRemark(), Long.class);
         try {
             // 同步中
             status = TaskStatusEnum.RUNNING;
             tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, null, null);
 
             // 同步计划 -> 同步到云阅卷考试
-            thirdRelateId = saveExam(schoolId, printPlanId, thirdRelateId, thirdRelateName, examEndTime);
-            syncStatus = ExamPrintPlanSyncStatusEnum.EXAM_FINISH;
-            tbSyncTask.setThirdRelateId(thirdRelateId);
+            thirdRelateId = saveExam(schoolId, printPlanId, thirdRelateId, thirdRelateName, examTime);
+            syncStatus = ExamPrintPlanSyncStatusEnum.PART_FINISH;
             // 考试同步成功,才能同步考生和题卡
-            if (Objects.nonNull(thirdRelateId)) {
-                updateWrapper.lambda().set(ExamPrintPlan::getThirdRelateId, thirdRelateId).set(ExamPrintPlan::getThirdRelateName, thirdRelateName);
-                // 同步考生
-                saveStudent(schoolId, printPlanId, thirdRelateId);
-                syncStatus = ExamPrintPlanSyncStatusEnum.STUDENT_FINISH;
-                // 同步题卡
-                cardUpload(schoolId, printPlanId, thirdRelateId);
-                syncStatus = ExamPrintPlanSyncStatusEnum.FINISH;
-            } else {
+            if (Objects.isNull(thirdRelateId)) {
                 throw ExceptionResultEnum.ERROR.exception("无法获取云阅卷考试ID,同步数据失败");
             }
+
+            List<ExamDetailCourseDto> examDetailCourseList = examDetailCourseService.listByPrintPlanIdAndExamTaskId(printPlanId, examTaskIds);
+            for (ExamDetailCourseDto examDetailCourseDto : examDetailCourseList) {
+                try {
+                    // 同步考生
+                    saveStudent(schoolId, thirdRelateId, examDetailCourseDto.getId());
+                    syncStatus = ExamPrintPlanSyncStatusEnum.PART_FINISH;
+                    // 同步题卡
+                    cardUpload(schoolId, thirdRelateId, examDetailCourseDto.getExamTaskId(), examDetailCourseDto.getPaperType());
+                    syncStatus = ExamPrintPlanSyncStatusEnum.FINISH;
+                } catch (Exception e) {
+                    throw new RuntimeException("推送考生信息、题卡信息失败,试卷编号:" + examDetailCourseDto.getPaperNumber() + "," + e.getMessage());
+                } finally {
+                    UpdateWrapper<ExamDetailCourse> examDetailCourseUpdateWrapper = new UpdateWrapper<>();
+                    examDetailCourseUpdateWrapper.lambda().set(ExamDetailCourse::getThirdRelateId, thirdRelateId)
+                            .set(ExamDetailCourse::getSyncStatus, syncStatus)
+                            .set(ExamDetailCourse::getSyncUserId, sysUser.getId())
+                            .eq(ExamDetailCourse::getId, examDetailCourseDto.getId());
+                    examDetailCourseService.update(examDetailCourseUpdateWrapper);
+                }
+            }
             // 任务结果
             result = TaskResultEnum.SUCCESS;
         } catch (Exception e) {
@@ -130,11 +145,8 @@ public class DataSyncServiceImpl implements DataSyncService {
         } finally {
             // 同步结束
             status = TaskStatusEnum.FINISH;
-
             tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), thirdRelateId, status, result, errorMessage);
 
-            updateWrapper.lambda().set(ExamPrintPlan::getSyncStatus, syncStatus).eq(ExamPrintPlan::getId, printPlanId);
-            examPrintPlanService.update(updateWrapper);
             // 同步成功,发送短信
 //            if (ExamPrintPlanSyncStatusEnum.FINISH.equals(syncStatus)) {
 //                examPrintPlanService.sendNoticeUploadStructure(printPlanId, sysUser);
@@ -436,13 +448,12 @@ public class DataSyncServiceImpl implements DataSyncService {
      * @param printPlanId     计划ID
      * @param thirdRelateId   云阅卷考试ID
      * @param thirdRelateName 云阅卷考试名称
-     * @param examEndTime     考试时间
+     * @param examTime        考试时间
      */
-    public Long saveExam(Long schoolId, Long printPlanId, Long thirdRelateId, String thirdRelateName, Long examEndTime) {
+    public Long saveExam(Long schoolId, Long printPlanId, Long thirdRelateId, String thirdRelateName, String examTime) {
         try {
             if (Objects.isNull(thirdRelateId)) {
                 String code = String.valueOf(printPlanId);
-                String examTime = DateUtil.format(new Date(examEndTime), CloudMarkingTaskUtils.DATE_FORMAT);
                 thirdRelateId = cloudMarkingTaskUtils.syncExam(schoolId, code, thirdRelateName, examTime);
             }
             return thirdRelateId;
@@ -454,12 +465,11 @@ public class DataSyncServiceImpl implements DataSyncService {
     /**
      * 新增考生
      *
-     * @param schoolId        学校ID
-     * @param examPrintPlanId 计划ID
-     * @param thirdRelateId   云阅卷考试ID
+     * @param schoolId      学校ID
+     * @param thirdRelateId 云阅卷考试ID
      */
-    public void saveStudent(Long schoolId, Long examPrintPlanId, Long thirdRelateId) {
-        List<SyncExamStudentDto> examStudents = examStudentService.listStudentByPrintPlanIdAndSyncStatus(examPrintPlanId);
+    public void saveStudent(Long schoolId, Long thirdRelateId, Long examDetailCourseId) {
+        List<SyncExamStudentDto> examStudents = examStudentService.listStudentByExamDetailCourseId(examDetailCourseId);
         for (SyncExamStudentDto examStudent : examStudents) {
             try {
                 //参数
@@ -492,71 +502,58 @@ public class DataSyncServiceImpl implements DataSyncService {
     /**
      * 同步题卡
      *
-     * @param schoolId        学校ID
-     * @param examPrintPlanId 计划ID
-     * @param thirdRelateId   云阅卷考试ID
+     * @param schoolId      学校ID
+     * @param thirdRelateId 云阅卷考试ID
      */
-    public void cardUpload(Long schoolId, Long examPrintPlanId, Long thirdRelateId) {
-        List<ExamDetailCourse> examDetailCourses = examDetailService.listSyncPaperNumberByPrintPlanId(examPrintPlanId);
-        if (CollectionUtils.isEmpty(examDetailCourses)) {
-            return;
+    public void cardUpload(Long schoolId, Long thirdRelateId, Long examTaskId, String paperType) {
+        ExamTask examTask = examTaskService.getById(examTaskId);
+        if (examTask == null) {
+            throw ExceptionResultEnum.ERROR.exception(String.format("[上传题卡格式]数据异常,命题任务ID[%s]数据为空", examTaskId));
+        }
+        ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(examTask.getId());
+        List<JSONObject> paperAttachmentIds = JSON.parseArray(examTaskDetail.getPaperAttachmentIds(), JSONObject.class);
+        if (paperAttachmentIds.isEmpty()) {
+            throw ExceptionResultEnum.ERROR.exception(String.format("[上传题卡格式]数据异常,通过命题任务ID[%s],查询试卷信息为空", examTask.getId()));
         }
-        for (ExamDetailCourse examDetailCours : examDetailCourses) {
-            ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(examDetailCours.getSchoolId(), examDetailCours.getCourseCode(), examDetailCours.getPaperNumber());
-            if (examTask == null) {
-                log.info("[上传题卡格式]数据异常,通过学校:{},课程代码:{},试卷编号:{}查出命题任务为空", examDetailCours.getSchoolId(), examDetailCours.getCourseCode(), examDetailCours.getPaperNumber());
-                continue;
-            }
-            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(examTask.getId());
-            List<JSONObject> paperAttachmentIds = JSON.parseArray(examTaskDetail.getPaperAttachmentIds(), JSONObject.class);
-            if (paperAttachmentIds.isEmpty()) {
-                log.info("[上传题卡格式]数据异常,通过命题任务ID:{}查询试卷信息为空", examTask.getId());
-                continue;
-            }
 
-            String paperType = examDetailCours.getPaperType();
-            if (StringUtils.isBlank(paperType)) {
-                log.info("[上传题卡格式]数据异常,通过学校:{},课程代码:{},试卷编号:{}查出考场科目信息中绑定卷型为空", examDetailCours.getSchoolId(), examDetailCours.getCourseCode(), examDetailCours.getPaperNumber());
-                continue;
+        if (StringUtils.isBlank(paperType)) {
+            throw ExceptionResultEnum.ERROR.exception("[上传题卡格式]数据异常,考场科目信息中绑定卷型为空");
+        }
+        for (String s : paperType.split(",")) {
+            Optional<JSONObject> optional = paperAttachmentIds.stream().filter(m -> m.getString("name").equals(s)).findFirst();
+            if (!optional.isPresent()) {
+                throw ExceptionResultEnum.ERROR.exception(String.format("[上传题卡格式]数据异常,未找到卷型[%s]绑定题卡ID", s));
+            }
+            Long cardId = optional.get().getLong("cardId");
+            CardDetailDto cardDetail = examCardService.getCardDetail(cardId);
+            if (cardDetail == null || StringUtils.isBlank(cardDetail.getContent())) {
+                throw ExceptionResultEnum.ERROR.exception(String.format("[上传题卡格式]数据异常,通过题卡ID[%s],未查到题卡格式信息", cardId));
             }
-            for (String s : examDetailCours.getPaperType().split(",")) {
-                Optional<JSONObject> optional = paperAttachmentIds.stream().filter(m -> m.getString("name").equals(s)).findFirst();
-                if (!optional.isPresent()) {
-                    log.info("[上传题卡格式]数据异常,未找到卷型{}绑定题卡ID", s);
-                    continue;
-                }
-                Long cardId = optional.get().getLong("cardId");
-                CardDetailDto cardDetail = examCardService.getCardDetail(cardId);
-                if (cardDetail == null || StringUtils.isBlank(cardDetail.getContent())) {
-                    log.info("[上传题卡格式]数据异常,通过题卡ID:{}未查到题卡格式信息", cardId);
-                    continue;
-                }
 
-                //生成json文件
-                File file = null;
-                try {
-                    // 文件临时目录
-                    String filePath = getTempDir(SyncFileTypeEnum.CARD);
-                    file = createJsonFile(filePath, cardDetail.getContent());
-                    if (file.exists()) {
-                        String uploadCardUrl = cloudMarkingTaskUtils.syncFile(schoolId, String.valueOf(thirdRelateId), examTask.getCourseCode() + s + examTask.getSequence(), SyncFileTypeEnum.CARD, file);
-                        if (StringUtils.isNotBlank(uploadCardUrl)) {
-                            UpdateWrapper<ExamCard> updateWrapper = new UpdateWrapper<>();
-                            updateWrapper.lambda().set(ExamCard::getSyncStatus, true).eq(ExamCard::getId, cardId);
-                            examCardService.update(updateWrapper);
-                        }
+            //生成json文件
+            File file = null;
+            try {
+                // 文件临时目录
+                String filePath = getTempDir(SyncFileTypeEnum.CARD);
+                file = createJsonFile(filePath, cardDetail.getContent());
+                if (file.exists()) {
+                    String uploadCardUrl = cloudMarkingTaskUtils.syncFile(schoolId, String.valueOf(thirdRelateId), examTask.getCourseCode() + s + examTask.getSequence(), SyncFileTypeEnum.CARD, file);
+                    if (StringUtils.isNotBlank(uploadCardUrl)) {
+                        UpdateWrapper<ExamCard> updateWrapper = new UpdateWrapper<>();
+                        updateWrapper.lambda().set(ExamCard::getSyncStatus, true).eq(ExamCard::getId, cardId);
+                        examCardService.update(updateWrapper);
                     }
-                } catch (Exception e) {
-                    throw ExceptionResultEnum.ERROR.exception(e.getMessage());
-                } finally {
-                    if (Objects.nonNull(dictionaryConfig.sysDomain()) && dictionaryConfig.sysDomain().isOss()) {
-                        if (file != null && file.exists()) {
-                            file.delete();
-                        }
+                }
+            } catch (Exception e) {
+                throw ExceptionResultEnum.ERROR.exception(e.getMessage());
+            } finally {
+                if (Objects.nonNull(dictionaryConfig.sysDomain()) && dictionaryConfig.sysDomain().isOss()) {
+                    if (file != null && file.exists()) {
+                        file.delete();
                     }
                 }
-
             }
+
         }
     }
 

+ 14 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java

@@ -3,6 +3,8 @@ package com.qmth.distributed.print.business.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.bean.dto.ExamDetailCourseDto;
+import com.qmth.distributed.print.business.bean.dto.SyncExamTaskDto;
 import com.qmth.distributed.print.business.entity.ExamDetailCourse;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.ExamStatusEnum;
@@ -66,4 +68,16 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
     public List<ExamDetailCourse> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber) {
         return this.baseMapper.listByAndCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
     }
+
+    @Override
+    public List<SyncExamTaskDto> listSyncCourseByPrintPlanId(List<Long> printPlanIds) {
+        List<SyncExamTaskDto> examTaskDtos = this.baseMapper.listSyncCourseByPringPlanId(printPlanIds);
+        // todo 题卡类型 xf 20221204
+        return null;
+    }
+
+    @Override
+    public List<ExamDetailCourseDto> listByPrintPlanIdAndExamTaskId(Long printPlanId, List<Long> examTaskIds) {
+        return this.baseMapper.listByPrintPlanIdAndExamTaskId(printPlanId, examTaskIds);
+    }
 }

+ 2 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -15,10 +15,7 @@ import com.qmth.distributed.print.business.bean.result.ExaminationDetailResult;
 import com.qmth.distributed.print.business.bean.result.ExaminationResult;
 import com.qmth.distributed.print.business.bean.result.SummarizedDataResult;
 import com.qmth.distributed.print.business.entity.*;
-import com.qmth.distributed.print.business.enums.ExamDataSourceEnum;
-import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
-import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
-import com.qmth.distributed.print.business.enums.StudentClazzEnum;
+import com.qmth.distributed.print.business.enums.*;
 import com.qmth.distributed.print.business.mapper.ExamDetailMapper;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.bean.dto.MqDto;
@@ -594,6 +591,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             examDetailCourse.setCourseName(courseName);
             examDetailCourse.setPaperNumber(paperNumber);
             examDetailCourse.setTotalSubjects(totalSubjects);
+            examDetailCourse.setSyncStatus(ExamPrintPlanSyncStatusEnum.INIT);
             examDetailCourse.setCreateId(userId);
             examDetailCourse.setUpdateId(userId);
             examDetailCourseList.add(examDetailCourse);

+ 35 - 67
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java

@@ -135,15 +135,19 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
             List<SyncExamStudentDto> examStudentDtos = examStudentService.listStudentByPrintPlanIdAndSyncStatus(printPlanResult.getId());
             printPlanResult.setCanPush(examStudentDtos != null && examStudentDtos.size() > 0);
 
-            List<Map> variableContent = JSONObject.parseArray(printPlanResult.getVariableContentTemp(), Map.class);
-            List<Map> ordinaryContent = JSONObject.parseArray(printPlanResult.getOrdinaryContentTemp(), Map.class);
-            printPlanResult.setVariableContent(variableContent);
-            printPlanResult.setOrdinaryContent(ordinaryContent);
-
             double totalSubjects = examDetailService.calculateTotalSubjects(printPlanResult.getId());
             double totalPackages = examDetailService.calculateTotalPackages(printPlanResult.getId());
             printPlanResult.setTotalSubjects((int) totalSubjects);
             printPlanResult.setTotalPackages((int) totalPackages);
+
+            List<Long> printPlanIds = Arrays.asList(new Long[]{printPlanResult.getId()});
+            List<SyncExamTaskDto> syncExamTaskDtos = examDetailCourseService.listSyncCourseByPrintPlanId(printPlanIds);
+            long successCount = syncExamTaskDtos.stream().mapToInt(m->m.getSyncSuccessCount()).sum();
+            printPlanResult.setSyncSuccessCount(Math.toIntExact(successCount));
+            long failCount = syncExamTaskDtos.stream().mapToInt(m->m.getSyncFailCount()).sum();
+            printPlanResult.setSyncFailCount(Math.toIntExact(failCount));
+            long initCount = syncExamTaskDtos.stream().mapToInt(m->m.getSyncInitCount()).sum();
+            printPlanResult.setSyncInitCount(Math.toIntExact(initCount));
         }
         return page;
     }
@@ -281,7 +285,6 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
             }
             examPrintPlan.setId(SystemConstant.getDbUuid());
             examPrintPlan.setStatus(PrintPlanStatusEnum.NEW);
-            examPrintPlan.setSyncStatus(ExamPrintPlanSyncStatusEnum.INIT);
             result = this.save(examPrintPlan);
         } else {
             // 包含印刷计划id -> 编辑印刷计划
@@ -444,72 +447,32 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
     }
 
     @Override
-    public void syncDataCloud(Long printPlanId, Long thirdRelateId) {
-        ExamPrintPlan examPrintPlan = this.getById(printPlanId);
-        if (examPrintPlan == null) {
-            throw ExceptionResultEnum.ERROR.exception("印刷计划数据异常");
-        }
-        if (!PrintPlanStatusEnum.END.equals(examPrintPlan.getStatus())
-                && !PrintPlanStatusEnum.PRINT_FINISH.equals(examPrintPlan.getStatus())) {
-            throw ExceptionResultEnum.ERROR.exception("印刷计划未打印完成或者未结束,不能同步数据");
-        }
-        asyncCloudMarkingTaskService.syncExamAndStudentAndCard(examPrintPlan, thirdRelateId, null);
-    }
-
-    @Override
-    public void syncDataCloudBatch(SyncDataParam syncDataParam) {
-        List<Long> ids = syncDataParam.getList();
-        if (ids.isEmpty()) {
-            throw ExceptionResultEnum.ERROR.exception("请选择操作数据");
-        }
-        QueryWrapper<ExamPrintPlan> queryWrapper = new QueryWrapper<>();
-        List<PrintPlanStatusEnum> statusEnums = Arrays.asList(PrintPlanStatusEnum.END, PrintPlanStatusEnum.PRINT_FINISH);
-        queryWrapper.lambda().in(ExamPrintPlan::getId, ids);
-        List<ExamPrintPlan> examPrintPlans = this.list(queryWrapper);
-        if (!examPrintPlans.isEmpty()) {
-            long count = examPrintPlans.stream().filter(m -> !statusEnums.contains(m.getStatus())).count();
-            if (count > 0) {
-                throw ExceptionResultEnum.ERROR.exception("印刷计划未打印完成或者未结束,不能同步数据");
+    public void syncDataCloud(SyncDataParam syncDataParam) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        List<Long> examTaskIds = syncDataParam.getList();
+        if (CollectionUtils.isEmpty(examTaskIds)) {
+            throw ExceptionResultEnum.ERROR.exception("请选择需要推送的数据");
+        }
+
+        if (asyncCloudMarkingTaskService.isSync()) {
+            if (Objects.isNull(syncDataParam.getThirdRelateId())
+                    && StringUtils.isBlank(syncDataParam.getThirdRelateName())) {
+                throw ExceptionResultEnum.ERROR.exception("考试ID、考试名称至少选择一个");
+            } else if (StringUtils.isNotBlank(syncDataParam.getThirdRelateName())
+                    && Objects.isNull(syncDataParam.getExamTime())) {
+                throw ExceptionResultEnum.ERROR.exception("考试时间必填");
             }
-            for (ExamPrintPlan examPrintPlan : examPrintPlans) {
-                asyncCloudMarkingTaskService.syncExamAndStudentAndCard(examPrintPlan, null, null);
+            if (syncDataParam.getThirdRelateId() == null) {
+                String time = String.valueOf(System.currentTimeMillis());
+                String examTime = DateUtil.format(new Date(syncDataParam.getExamTime()), CloudMarkingTaskUtils.DATE_FORMAT);
+                syncDataParam.setThirdRelateId(cloudMarkingTaskUtils.syncExam(schoolId, time, syncDataParam.getThirdRelateName(), examTime));
             }
+            Long printPlanId = syncDataParam.getPrintPlanId();
+            String examTime = DateUtil.format(new Date(syncDataParam.getExamTime()), CloudMarkingTaskUtils.DATE_FORMAT);
+            asyncCloudMarkingTaskService.syncExamAndStudentAndCard(schoolId, printPlanId, syncDataParam.getThirdRelateId(), syncDataParam.getThirdRelateName(), examTime, examTaskIds);
         }
     }
 
-    @Override
-    public void syncDataMerge(SyncDataParam syncDataParam) {
-        List<Long> printPlans = syncDataParam.getList();
-        if (CollectionUtils.isEmpty(printPlans)) {
-            throw ExceptionResultEnum.ERROR.exception("请选择需要合并的印刷任务");
-        }
-
-        if (Objects.isNull(syncDataParam.getThirdRelateId()) && Objects.isNull(syncDataParam.getThirdRelateName())) {
-            throw ExceptionResultEnum.ERROR.exception("考试ID、考试名称至少填一个");
-        }
-
-        // todo 校验印刷计划是否完成
-        if (syncDataParam.getThirdRelateId() == null) {
-            String time = String.valueOf(System.currentTimeMillis());
-            QueryWrapper<ExamPrintPlan> printPlanQueryWrapper = new QueryWrapper<>();
-            printPlanQueryWrapper.lambda().in(ExamPrintPlan::getId, syncDataParam.getList());
-            List<ExamPrintPlan> examPrintPlans = this.list(printPlanQueryWrapper);
-            ExamPrintPlan examPrintPlan = examPrintPlans.stream().max(Comparator.comparingLong(ExamPrintPlan::getExamEndTime)).get();
-            String examTime = DateUtil.format(new Date(examPrintPlan.getExamEndTime()), CloudMarkingTaskUtils.DATE_FORMAT);
-            syncDataParam.setThirdRelateId(cloudMarkingTaskUtils.syncExam(examPrintPlan.getSchoolId(), time, syncDataParam.getThirdRelateName(), examTime));
-        }
-
-        for (Long printPlanId : printPlans) {
-            ExamPrintPlan examPrintPlan = this.getById(printPlanId);
-            asyncCloudMarkingTaskService.syncExamAndStudentAndCard(examPrintPlan, syncDataParam.getThirdRelateId(), syncDataParam.getThirdRelateName());
-        }
-    }
-
-    @Override
-    public List<ThirdObjectDto> printSyncPlan(Long schoolId, Long semesterId, Long examId) {
-        return this.baseMapper.listThirdObject(schoolId, semesterId, examId);
-    }
-
     @Override
     public ExamPrintPlan findByExamDetailId(Long examDetailId) {
         ExamDetail examDetail = examDetailService.getById(examDetailId);
@@ -566,6 +529,11 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
         return this.list(queryWrapper);
     }
 
+    @Override
+    public List<SyncExamTaskDto> listSyncExamTask(List<Long> printPlanIds) {
+        return examDetailCourseService.listSyncCourseByPrintPlanId(printPlanIds);
+    }
+
 
     /**
      * 查找子机构

+ 5 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamStudentServiceImpl.java

@@ -115,4 +115,9 @@ public class ExamStudentServiceImpl extends ServiceImpl<ExamStudentMapper, ExamS
     public List<Map> listStudentScoreSync(Long schoolId, String studentCode, String examNumber, String subjectCode) {
         return this.baseMapper.listStudentScoreSync(schoolId, studentCode, examNumber, subjectCode);
     }
+
+    @Override
+    public List<SyncExamStudentDto> listStudentByExamDetailCourseId(Long examDetailCourseId) {
+        return this.baseMapper.listStudentByExamDetailCourseId(examDetailCourseId);
+    }
 }

+ 2 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskPrintServiceImpl.java

@@ -13,6 +13,7 @@ import com.qmth.distributed.print.business.bean.params.SerialNumberParams;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamDataSourceEnum;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
+import com.qmth.distributed.print.business.enums.ExamPrintPlanSyncStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.mapper.ExamTaskPrintMapper;
 import com.qmth.distributed.print.business.service.*;
@@ -223,6 +224,7 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
             examDetailCourse.setPaperNumber(examTaskPrint.getPaperNumber());
             examDetailCourse.setClazzId(examTaskPrint.getClassId());
             examDetailCourse.setTotalSubjects(examTaskPrint.getStudentCount());
+            examDetailCourse.setSyncStatus(ExamPrintPlanSyncStatusEnum.INIT);
             examDetailCourse.setCreateId(examTaskPrint.getCreateId());
             examDetailCourseService.save(examDetailCourse);
 

+ 1 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -1639,7 +1639,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 examPrintPlan.setVariableContent(basicPrintConfig.getVariableContent());
                 examPrintPlan.setOrdinaryContent(basicPrintConfig.getOrdinaryContent());
                 examPrintPlan.setStatus(PrintPlanStatusEnum.READY);
-                examPrintPlan.setSyncStatus(ExamPrintPlanSyncStatusEnum.INIT);
                 examPrintPlanService.save(examPrintPlan);
 
                 String paperNumber = examTask.getPaperNumber();
@@ -1653,7 +1652,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                             throw ExceptionResultEnum.ERROR.exception("选择的考试班级【" + clazzName + "】下无学生,请确认该班级学生信息。");
                         }
 
-
                         SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-" + schoolId, "1", 6);
                         ExamDetail examDetail = new ExamDetail();
                         examDetail.setId(SystemConstant.getDbUuid());
@@ -1688,6 +1686,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                         examDetailCourse.setPaperNumber(paperNumber);
                         examDetailCourse.setClazzId(examDetailList.getClassId());
                         examDetailCourse.setTotalSubjects(examDetailList.getStudentCount());
+                        examDetailCourse.setSyncStatus(ExamPrintPlanSyncStatusEnum.INIT);
                         examDetailCourse.setCreateId(sysUser.getId());
                         examDetailCourseService.save(examDetailCourse);
 

+ 5 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBSyncTaskServiceImpl.java

@@ -1,5 +1,7 @@
 package com.qmth.distributed.print.business.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -65,7 +67,7 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
 
     @Transactional
     @Override
-    public TBSyncTask saveTask(Long schoolId, Long objectId, PushTypeEnum type) {
+    public TBSyncTask saveTask(Long schoolId, Long objectId, PushTypeEnum type, String remark) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         QueryWrapper<TBSyncTask> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(TBSyncTask::getSchoolId, schoolId)
@@ -85,6 +87,7 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
         tbSyncTask.setSchoolId(schoolId);
         tbSyncTask.setObjectId(objectId);
         tbSyncTask.setType(type);
+        tbSyncTask.setRemark(remark);
         tbSyncTask.setStatus(TaskStatusEnum.INIT);
         tbSyncTask.setCreateId(sysUser.getId());
         tbSyncTask.setCreateTime(System.currentTimeMillis());
@@ -233,7 +236,7 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
         }
         switch (tbSyncTask.getType()) {
             case EXAM_PUSH:
-                asyncCloudMarkingTaskService.syncExamAndStudentAndCard(examPrintPlanService.getById(tbSyncTask.getObjectId()), tbSyncTask.getThirdRelateId(), null);
+                asyncCloudMarkingTaskService.syncExamAndStudentAndCard(tbSyncTask.getSchoolId(), tbSyncTask.getObjectId(), tbSyncTask.getThirdRelateId(), null, null, JSON.parseArray(tbSyncTask.getRemark(), Long.class));
                 break;
             case STRUCTURE_GROUP_PUSH:
                 asyncCloudMarkingTaskService.syncPaperStructureAndGroup(examPaperStructureService.getById(tbSyncTask.getObjectId()));

+ 18 - 15
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncCloudMarkingTaskService.java

@@ -1,7 +1,7 @@
 package com.qmth.distributed.print.business.templete.execute;
 
+import com.alibaba.fastjson.JSONObject;
 import com.qmth.distributed.print.business.entity.ExamPaperStructure;
-import com.qmth.distributed.print.business.entity.ExamPrintPlan;
 import com.qmth.distributed.print.business.entity.TBSyncTask;
 import com.qmth.distributed.print.business.service.DataSyncService;
 import com.qmth.distributed.print.business.service.TBSyncTaskService;
@@ -17,7 +17,7 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.Objects;
+import java.util.List;
 
 /**
  * 异步同步云阅卷
@@ -37,25 +37,27 @@ public class AsyncCloudMarkingTaskService {
     @Resource
     private TBSyncTaskService tbSyncTaskService;
 
-    private boolean isSync() {
+    public boolean isSync() {
         SysConfig sysConfig = sysConfigService.getByKey("sys.sync.enable");
-        return sysConfig != null && "true".equals(sysConfig.getConfigValue());
+        boolean isSync = sysConfig != null && "true".equals(sysConfig.getConfigValue());
+        if (!isSync) {
+            throw ExceptionResultEnum.ERROR.exception("未开启同步开关");
+        }
+        return true;
     }
 
     /**
      * 同步考试、考生、科目、题卡
      *
-     * @param examPrintPlan 印刷计划
+     * @param schoolId      学校ID
+     * @param objectId      同步对象ID(命题任务Id)
      * @param thirdRelateId 云阅卷考试ID
      */
-    public void syncExamAndStudentAndCard(ExamPrintPlan examPrintPlan, Long thirdRelateId, String thirdRelateName) {
+    public void syncExamAndStudentAndCard(Long schoolId, Long objectId, Long thirdRelateId, String thirdRelateName, String examTime, List<Long> examTaskIds) {
         if (isSync()) {
-            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPrintPlan.getSchoolId(), examPrintPlan.getId(), PushTypeEnum.EXAM_PUSH);
-
-            Long relateId = Objects.isNull(thirdRelateId) ? examPrintPlan.getThirdRelateId() : thirdRelateId;
-            thirdRelateName = Objects.isNull(examPrintPlan.getThirdRelateId()) ? examPrintPlan.getName() : examPrintPlan.getThirdRelateName();
+            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(schoolId, objectId, PushTypeEnum.EXAM_PUSH, JSONObject.toJSONString(examTaskIds));
             SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-            dataSyncService.syncExamAndStudentAndCard(relateId, thirdRelateName, examPrintPlan.getExamEndTime(), tbSyncTask ,sysUser);
+            dataSyncService.syncExamAndStudentAndCard(thirdRelateId, thirdRelateName, examTime, tbSyncTask, sysUser);
         }
     }
 
@@ -69,7 +71,7 @@ public class AsyncCloudMarkingTaskService {
             throw ExceptionResultEnum.ERROR.exception("未找到同步数据");
         }
         if (isSync()) {
-            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.STRUCTURE_GROUP_PUSH);
+            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.STRUCTURE_GROUP_PUSH, null);
             dataSyncService.syncPaperStructureAndGroup(examPaperStructure, tbSyncTask);
         }
     }
@@ -84,7 +86,7 @@ public class AsyncCloudMarkingTaskService {
             throw ExceptionResultEnum.ERROR.exception("请先设置评卷参数");
         }
         if (isSync()) {
-            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.PAPER_ANSWER_FILE_PUSH);
+            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.PAPER_ANSWER_FILE_PUSH, null);
             dataSyncService.syncPaperAndAnswer(examPaperStructure, tbSyncTask);
         }
     }
@@ -99,13 +101,14 @@ public class AsyncCloudMarkingTaskService {
             throw ExceptionResultEnum.ERROR.exception("请先设置评卷参数");
         }
         if (isSync()) {
-            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.OBJECTIVE_ANSWER_PUSH);
+            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.OBJECTIVE_ANSWER_PUSH, null);
             dataSyncService.syncObjectiveStructure(examPaperStructure, tbSyncTask);
         }
     }
 
     /**
      * 绑定科组长
+     *
      * @param examPaperStructure 试卷结构对象
      */
     public void syncMarkLeader(ExamPaperStructure examPaperStructure) {
@@ -113,7 +116,7 @@ public class AsyncCloudMarkingTaskService {
             throw ExceptionResultEnum.ERROR.exception("请先设置评卷参数");
         }
         if (isSync()) {
-            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.MARK_LEADER_PUSH);
+            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.MARK_LEADER_PUSH, null);
             dataSyncService.syncMarkLeader(examPaperStructure, tbSyncTask);
         }
     }

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

@@ -39,7 +39,7 @@ public class AsyncTeachCloudReportService {
      * @param gradeBatch 分析批次对象
      */
     public void syncGradeBatch(GradeBatch gradeBatch) {
-        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatch.getSchoolId(), gradeBatch.getId(), PushTypeEnum.GRADE_BATCH_PUSH);
+        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatch.getSchoolId(), gradeBatch.getId(), PushTypeEnum.GRADE_BATCH_PUSH, null);
         dataSyncReportService.syncGradeBatch(gradeBatch, tbSyncTask);
     }
 
@@ -48,7 +48,7 @@ public class AsyncTeachCloudReportService {
      * @param gradeBatch 分析批次对象
      */
     public void startCalc(GradeBatch gradeBatch) {
-        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatch.getSchoolId(), gradeBatch.getId(), PushTypeEnum.CALCULATE);
+        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatch.getSchoolId(), gradeBatch.getId(), PushTypeEnum.CALCULATE, null);
         dataSyncReportService.startCalc(gradeBatch, tbSyncTask);
     }
 
@@ -57,7 +57,7 @@ public class AsyncTeachCloudReportService {
         if(gradeBatch == null){
             throw ExceptionResultEnum.ERROR.exception("没有批次信息");
         }
-        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatchPaper.getSchoolId(), gradeBatchPaper.getId(), PushTypeEnum.PUBLISH);
+        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatchPaper.getSchoolId(), gradeBatchPaper.getId(), PushTypeEnum.PUBLISH, null);
         dataSyncReportService.publish(gradeBatch, gradeBatchPaper, tbSyncTask);
     }
 
@@ -66,7 +66,7 @@ public class AsyncTeachCloudReportService {
      * @param gradeBatch 批次
      */
     public void deleteGradeBatch(GradeBatch gradeBatch){
-        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatch.getSchoolId(), gradeBatch.getId(), PushTypeEnum.GRADE_BATCH_DELETE);
+        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatch.getSchoolId(), gradeBatch.getId(), PushTypeEnum.GRADE_BATCH_DELETE, null);
         dataSyncReportService.deleteGradeBatch(gradeBatch,tbSyncTask);
     }
 }

+ 49 - 0
distributed-print-business/src/main/resources/mapper/ExamDetailCourseMapper.xml

@@ -142,5 +142,54 @@
                 AND a.paper_number = #{paperNumber}
                 AND c.status != 'END'
     </select>
+    <select id="listSyncCourseByPringPlanId"
+            resultType="com.qmth.distributed.print.business.bean.dto.SyncExamTaskDto">
+        SELECT b.course_code   courseCode,
+               b.course_name   courseName,
+               b.paper_number  paperNumber,
+               b.paper_type    paperType,
+               et.sequence,
+               sum(b.total_subjects) totalSubjects,
+               sum(case b.sync_status when 'FINISH' then 1 else 0 end) syncSuccessCount,
+               sum(case b.sync_status when 'PART_FINISH' then 1 else 0 end) syncFailCount,
+               sum(case b.sync_status when 'INIT' then 1 else 0 end) syncInitCount
+        FROM exam_detail_course b
+                 LEFT JOIN
+             exam_detail c ON b.exam_detail_id = c.id
+                 LEFT JOIN
+             exam_task et ON b.school_id = et.school_id
+                 and b.course_code = et.course_code
+                 and b.paper_number = et.paper_number
+        WHERE c.print_plan_id in
+                <foreach collection="printPlanIds" open="(" close=")" item="printPlanId" separator=",">
+                    #{printPlanId}
+                </foreach>
+                GROUP BY b.course_code, b.course_name , b.paper_number, b.paper_type, et.sequence
+    </select>
+    <select id="listByPrintPlanIdAndExamTaskId"
+            resultType="com.qmth.distributed.print.business.bean.dto.ExamDetailCourseDto">
+        SELECT b.id,
+               et.id examTaskId,
+               b.course_code   courseCode,
+               b.course_name   courseName,
+               b.paper_number  paperNumber,
+               b.paper_type paperType,
+               b.third_relate_id thirdRelateId,
+               b.sync_status syncStatus
+        FROM exam_detail_course b
+                 LEFT JOIN
+             exam_detail c ON b.exam_detail_id = c.id
+                 LEFT JOIN
+             exam_task et ON b.school_id = et.school_id
+                 and b.course_code = et.course_code
+                 and b.paper_number = et.paper_number
+        WHERE c.print_plan_id = #{printPlanId}
+            <if test="examTaskIds != null">
+                and et.id in
+                <foreach collection="examTaskIds" open="(" close=")" item="examTaskId" separator=",">
+                    #{examTaskId}
+                </foreach>
+            </if>
+    </select>
 
 </mapper>

+ 0 - 20
distributed-print-business/src/main/resources/mapper/ExamPrintPlanMapper.xml

@@ -546,26 +546,6 @@
             </if>
         </where>
     </select>
-    <select id="listThirdObject" resultType="com.qmth.distributed.print.business.bean.dto.ThirdObjectDto">
-        SELECT
-            distinct
-            epp.third_relate_id thirdRelateId,
-            epp.third_relate_name thirdRelateName
-        FROM
-            exam_print_plan epp
-            LEFT JOIN basic_exam be ON epp.exam_id = be.id
-        <where>
-            epp.school_id = #{schoolId}
-            <if test="semesterId != null and semesterId != ''">
-                and be.semester_id = #{semesterId}
-            </if>
-            <if test="examId != null and examId != ''">
-                and epp.exam_id = #{examId}
-            </if>
-            and epp.third_relate_id is not null
-        </where>
-        ORDER BY epp.third_relate_id DESC
-    </select>
     <select id="listToClient" resultType="com.qmth.distributed.print.business.bean.result.PrintPlanBrief">
         SELECT DISTINCT
             a.id, a.name, a.status

+ 25 - 0
distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml

@@ -135,6 +135,31 @@
                  and b.paper_number = et.paper_number
         WHERE c.print_plan_id = #{printPlanId}
     </select>
+    <select id="listStudentByExamDetailCourseId"
+            resultType="com.qmth.distributed.print.business.bean.dto.SyncExamStudentDto">
+        SELECT a.id,
+               b.course_code   courseCode,
+               b.course_name   courseName,
+               b.paper_number  paperNumber,
+               a.student_name  studentName,
+               a.student_code  studentCode,
+               a.ticket_number ticketNumber,
+               a.clazz_name    clazzName,
+               a.extend_fields extendFields,
+               a.paper_type    paperType,
+               c.package_code pachageCode,
+               et.sequence
+        FROM exam_detail_course b
+                 LEFT JOIN
+             exam_student a ON a.exam_detail_course_id = b.id
+                 LEFT JOIN
+             exam_detail c ON b.exam_detail_id = c.id
+                 LEFT JOIN
+             exam_task et ON b.school_id = et.school_id
+                 and b.course_code = et.course_code
+                 and b.paper_number = et.paper_number
+        WHERE b.id = #{examDetailCourseId}
+    </select>
     <select id="listExamStudentBySchoolIdAndClazzId"
             resultType="com.qmth.distributed.print.business.entity.ExamStudent">
         SELECT

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

@@ -62,7 +62,7 @@ public class BasicExamController {
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
     public Result query(@RequestParam(value = "semesterId", required = false) Long semesterId,
-                        @RequestParam(value = "examModel", required = false) List<ExamModelEnum> examModels,
+                        @RequestParam(value = "examModels", required = false) List<ExamModelEnum> examModels,
                         @RequestParam(value = "inUsed", required = false) Boolean inUsed) {
         return ResultUtil.ok(basicExamService.query(semesterId, examModels, inUsed));
     }

+ 13 - 48
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanSyncController.java

@@ -17,16 +17,17 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
+import java.util.List;
 
 /**
  * <p>
- * 印刷计划管理 前端控制器
+ * 印刷计划推送管理 前端控制器
  * </p>
  *
  * @author xf
  * @since 2021-03-23
  */
-@Api(tags = "印刷计划管理Controller")
+@Api(tags = "印刷计划推送管理Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_EXAM + "/print_sync")
 @Validated
@@ -44,7 +45,7 @@ public class ExamPrintPlanSyncController {
      * @param pageSize
      * @return
      */
-    @ApiOperation(value = "印刷计划合并管理-计划查询")
+    @ApiOperation(value = "印刷计划推送管理-查询")
     @RequestMapping(value = "/list_sync", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
@@ -60,18 +61,15 @@ public class ExamPrintPlanSyncController {
     }
 
     /**
-     * 已同步过的云阅卷考试列表
-     * @param semesterId 学期ID
-     * @param examId 考试ID
+     * 查询计划下需要同步的命题任务
+     * @param printPlanIds 印刷计划ID
      */
-    @ApiOperation(value = "印刷计划合并管理-合并推送-云阅卷考试ID列表")
-    @RequestMapping(value = "/list_relate_ids", method = RequestMethod.POST)
+    @ApiOperation(value = "印刷计划推送管理-查询计划下需要同步的命题任务")
+    @RequestMapping(value = "/list_sync_exam_task", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
-    public Result findPrintPlanPage(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
-                                    @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId) {
-        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        return ResultUtil.ok(examPrintPlanService.printSyncPlan(schoolId, semesterId, examId));
+    public Result listSyncExamTask(@ApiParam(value = "印刷计划ID集合") @RequestParam List<Long> printPlanIds) {
+        return ResultUtil.ok(examPrintPlanService.listSyncExamTask(printPlanIds));
     }
 
 
@@ -82,47 +80,14 @@ public class ExamPrintPlanSyncController {
      * @return
      * @throws Exception
      */
-    @ApiOperation(value = "印刷计划合并管理-合并推送-多计划合并同步")
-    @RequestMapping(value = "/sync_data_merge", method = RequestMethod.POST)
+    @ApiOperation(value = "印刷计划推送管理-推送")
+    @RequestMapping(value = "/sync_data_cloud", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.PUSH)
     public Result syncDataCloud(@RequestBody SyncDataParam syncDataParam) {
-        examPrintPlanService.syncDataMerge(syncDataParam);
+        examPrintPlanService.syncDataCloud(syncDataParam);
         return ResultUtil.ok(true);
     }
 
-    /**
-     * 批量同步
-     *
-     * @param syncDataParam
-     * @return
-     * @throws Exception
-     */
-    @ApiOperation(value = "印刷计划合并管理-批量同步")
-    @RequestMapping(value = "/sync_data_cloud_batch", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
-    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.PUSH)
-    public Result syncDataCloudBatch(@RequestBody SyncDataParam syncDataParam) {
-        examPrintPlanService.syncDataCloudBatch(syncDataParam);
-        return ResultUtil.ok(true);
-    }
-
-    /**
-     * 单个手动同步
-     *
-     * @param printPlanId
-     * @param thirdRelateId
-     * @return
-     * @throws Exception
-     */
-    @ApiOperation(value = "印刷计划合并管理-同步失败-单个手动同步")
-    @RequestMapping(value = "/sync_data_cloud", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
-    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.PUSH)
-    public Result syncDataCloud(@RequestParam(value = "printPlanId") Long printPlanId,
-                                @RequestParam(value = "thirdRelateId", required = false) Long thirdRelateId) {
-        examPrintPlanService.syncDataCloud(printPlanId, thirdRelateId);
-        return ResultUtil.ok(true);
-    }
 }
 

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

@@ -150,7 +150,6 @@ public class ExamTaskController {
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
     public Result paperNumberQuery(@RequestParam(value = "param", required = false) String param,
                                    @RequestParam(value = "printPlanId", required = false) List<String> printPlanId) {
-
         if (Objects.isNull(printPlanId)) {
             printPlanId = new ArrayList<>();
         }

+ 15 - 7
distributed-print/src/main/java/com/qmth/distributed/print/api/TSyncExamStudentScoreController.java

@@ -3,6 +3,7 @@ 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.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.dto.ExamDetailCourseDto;
 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;
@@ -10,6 +11,7 @@ import com.qmth.distributed.print.business.entity.TBSyncTask;
 import com.qmth.distributed.print.business.entity.TSyncExamStudentScore;
 import com.qmth.distributed.print.business.enums.ExamPrintPlanSyncStatusEnum;
 import com.qmth.distributed.print.business.enums.ImageTrajectoryEnum;
+import com.qmth.distributed.print.business.service.ExamDetailCourseService;
 import com.qmth.distributed.print.business.service.ExamPrintPlanService;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.service.TSyncExamStudentScoreService;
@@ -37,7 +39,6 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
-import java.net.CacheRequest;
 import java.util.*;
 
 /**
@@ -50,7 +51,7 @@ import java.util.*;
  */
 @Api(tags = "成绩归档Controller")
 @RestController
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX  + SystemConstant.PREFIX_URL_SYNC)
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SYNC)
 //@Aac(auth = BOOL.FALSE, strict = BOOL.FALSE)
 @Validated
 public class TSyncExamStudentScoreController {
@@ -76,6 +77,9 @@ public class TSyncExamStudentScoreController {
     @Resource
     ExamPrintPlanService examPrintPlanService;
 
+    @Resource
+    ExamDetailCourseService examDetailCourseService;
+
     @ApiOperation(value = "成绩归档查询列表")
     @ApiResponses({@ApiResponse(code = 200, message = "成绩查询信息", response = TSyncExamStudentScoreResult.class)})
     @RequestMapping(value = "/score/list", method = RequestMethod.POST)
@@ -109,16 +113,20 @@ public class TSyncExamStudentScoreController {
                        @ApiParam(value = "课程编码", required = false) @RequestParam(required = false) String courseCode) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         QueryWrapper<ExamPrintPlan> examPrintPlanQueryWrapper = new QueryWrapper<ExamPrintPlan>();
-        examPrintPlanQueryWrapper.select(" DISTINCT third_relate_id ").eq("school_id", sysUser.getSchoolId())
-                .eq("exam_id", examId)
-                .eq("sync_status", ExamPrintPlanSyncStatusEnum.FINISH);
+        examPrintPlanQueryWrapper.eq("school_id", sysUser.getSchoolId())
+                .eq("exam_id", examId);
         List<ExamPrintPlan> examPrintPlanList = examPrintPlanService.list(examPrintPlanQueryWrapper);
         if (Objects.isNull(examPrintPlanList) || examPrintPlanList.size() == 0) {
             throw ExceptionResultEnum.ERROR.exception("此学期学院下未找到需要同步的考试记录");
         }
         LinkedMultiValueMap<Long, Integer> semesterExamIdMap = new LinkedMultiValueMap<>();
-        for (ExamPrintPlan e : examPrintPlanList) {
-            semesterExamIdMap.add(Long.valueOf(semesterId), Integer.parseInt(String.valueOf(e.getThirdRelateId())));
+        for (ExamPrintPlan examPrintPlan : examPrintPlanList) {
+            List<ExamDetailCourseDto> examDetailCourseList = examDetailCourseService.listByPrintPlanIdAndExamTaskId(examPrintPlan.getId(), null);
+            for (ExamDetailCourseDto examDetailCourseDto : examDetailCourseList) {
+                if (examDetailCourseDto.getSyncStatus().equals(ExamPrintPlanSyncStatusEnum.FINISH)) {
+                    semesterExamIdMap.add(Long.valueOf(semesterId), Integer.parseInt(String.valueOf(examDetailCourseDto.getThirdRelateId())));
+                }
+            }
         }
         Map<String, Object> map = printCommonService.savePush(PushTypeEnum.SCORE_PUSH, Long.valueOf(examId));
         map.computeIfAbsent("semesterExamIdMap", v -> semesterExamIdMap);

+ 2 - 2
distributed-print/src/main/java/com/qmth/distributed/print/auth/DistributedPrintSession.java

@@ -58,7 +58,7 @@ public class DistributedPrintSession implements AccessEntity {
         this.signatureType = signatureType;
     }
 
-    @Override
+    /*@Override
     public String getLogName() {
         RedisUtil redisUtil = SpringContextHolder.getBean(RedisUtil.class);
         TBSession tbSession = (TBSession) redisUtil.getUserSession(identity);
@@ -75,5 +75,5 @@ public class DistributedPrintSession implements AccessEntity {
             }
         }
         return stringJoiner.toString();
-    }
+    }*/
 }