Selaa lähdekoodia

删除云阅卷交互代码

yin 9 kuukautta sitten
vanhempi
commit
69c5d854cb

+ 1 - 1
pom.xml

@@ -25,7 +25,7 @@
         <maven.compiler.target>1.8</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-        <qmth-boot-version>1.0.4</qmth-boot-version>
+        <qmth-boot-version>1.0.5</qmth-boot-version>
     </properties>
 
     <repositories>

+ 0 - 103
src/main/java/cn/com/qmth/scancentral/client/MarkingcloudApiClient.java

@@ -1,103 +0,0 @@
-package cn.com.qmth.scancentral.client;
-
-import cn.com.qmth.scancentral.entity.QuestionEntity;
-import cn.com.qmth.scancentral.enums.CardSource;
-import cn.com.qmth.scancentral.model.*;
-import com.qmth.boot.core.retrofit.annotatioin.RetrofitClient;
-import com.qmth.boot.core.retrofit.utils.SignatureInfo;
-import okhttp3.MultipartBody;
-import retrofit2.http.*;
-
-import java.util.List;
-
-@RetrofitClient(configuration = MarkingcloudApiConfiguration.class)
-public interface MarkingcloudApiClient {
-
-    @FormUrlEncoded
-    @POST("card/answer/query")
-    List<AnswerCardInfo> getAnswerCardInfo(@Tag SignatureInfo signature,
-            @Field("examId") Long examId, @Field("number") Integer number);
-
-    @FormUrlEncoded
-    @POST("card/answer/delete")
-    String deleteAnswerCard(@Tag SignatureInfo signature, @Field("examId") Long examId,
-            @Field("number") Integer number);
-
-    @Multipart
-    @POST("card/answer/save")
-    AnswerCardInfo saveAnswerCard(@Tag SignatureInfo signature, @Query("examId") Long examId,
-            @Query("number") Integer number, @Query("source") CardSource source,
-            @Query("subjectCode") String subjectCode, @Query("parameter") String parameter,
-            @Query("remark") String remark, @Query("paperCount") Integer paperCount,
-            @Query("singlePage") Boolean singlePage, @Query("needAdapte") Boolean needAdapte,
-            @Query("sliceConfig") String sliceConfig, @Query("md5") String md5,@Query("dpi") Integer dpi, @Part MultipartBody.Part file);
-
-    @Multipart
-    @POST("file/sheet/upload")
-    FileUploadResponse sheetFileUpload(@Tag SignatureInfo signature,
-            @Query("examId") Long examId, @Query("examNumber") String examNumber, @Query("index") Integer index,
-            @Query("md5") String md5, @Part MultipartBody.Part file);
-
-    @Multipart
-    @POST("file/slice/upload")
-    FileUploadResponse sliceFileUpload(@Tag SignatureInfo signature,
-            @Query("examId") Long examId, @Query("examNumber") String examNumber, @Query("index") Integer index,
-            @Query("md5") String md5, @Part MultipartBody.Part file);
-    
-    @Multipart
-    @POST("file/paper/upload")
-    FileUploadResponse paperFileUpload(@Tag SignatureInfo signature,
-            @Query("examId") Long examId, @Query("subjectCode") String subjectCode, @Query("format") String format,
-            @Query("md5") String md5, @Part MultipartBody.Part file);
-    
-    @Multipart
-    @POST("file/answer/upload")
-    FileUploadResponse answerFileUpload(@Tag SignatureInfo signature,
-            @Query("examId") Long examId, @Query("subjectCode") String subjectCode, @Query("format") String format,
-            @Query("md5") String md5, @Part MultipartBody.Part file);
-
-    //    @FormUrlEncoded
-    //    @POST("scan/student/{examId}")
-    //    DataUploadResponse dataUpload(@Header(SignatureInfo.HEADER_NAME) String signatureInfo, @Path("examId") Long examId,
-    //            @Field("examNumber") String examNumber, @Field("sliceCount") Integer sliceCount,
-    //            @Field("sheetCount") Integer sheetCount, @Field("answers") String answers, @Field("absent") Boolean absent,
-    //            @Field("batchCode") String batchCode, @Field("paperType") String paperType,
-    //            @Field("manual") Boolean manual);
-
-    @POST("scan/student/{examId}")
-    List<DataUploadResponse> dataUpload(@Tag SignatureInfo signature,
-            @Path("examId") Long examId, @Body List<DataUploadDto> scStudentParameter);
-
-    @FormUrlEncoded
-    @POST("admin/login")
-    UserInfo login(@Field("loginName") String loginName, @Field("password") String password);
-
-    @FormUrlEncoded
-    @POST("exam/query")
-    List<ExamInfoDto> examQuery(@Tag SignatureInfo signature,
-            @Field("pageNumber") long pageNumber, @Field("pageSize") long pageSize);
-
-    @FormUrlEncoded
-    @POST("exam/config/save")
-    ExamInfoDto examConfig(@Tag SignatureInfo signature, @Field("examId") Long examId,
-            @Field("config") String config);
-
-    @FormUrlEncoded
-    @POST("exam/students/count")
-    long studentCount(@Tag SignatureInfo signature, @Field("examId") Long examId);
-
-    @FormUrlEncoded
-    @POST("exam/students")
-    List<StudentInfo> getStudents(@Tag SignatureInfo signature, @Field("examId") Long examId,
-            @Field("pageNumber") int pageNumber, @Field("pageSize") int pageSize);
-
-    @POST("scan/student/delete")
-    String studentFileDelete(@Tag SignatureInfo signature, @Query("examId") Long examId,
-            @Query("examNumber") String examNumber);
-
-    @FormUrlEncoded
-    @POST("exam/question/list")
-    List<QuestionEntity> getQuestion(@Tag SignatureInfo signature,
-            @Field("examId") Long examId, @Field("subjectCode") String subjectCode);
-
-}

+ 0 - 28
src/main/java/cn/com/qmth/scancentral/client/MarkingcloudApiConfiguration.java

@@ -1,28 +0,0 @@
-package cn.com.qmth.scancentral.client;
-
-import com.qmth.boot.core.retrofit.interfaces.CustomizeRetrofitConfiguration;
-import com.qmth.boot.core.retrofit.interfaces.SignatureProvider;
-import org.springframework.stereotype.Component;
-
-@Component
-public class MarkingcloudApiConfiguration implements CustomizeRetrofitConfiguration {
-
-    private MarkingcloudProperties properties;
-
-    public MarkingcloudApiConfiguration(MarkingcloudProperties properties) {
-        this.properties = properties;
-    }
-
-    public String getBaseUrl() {
-        String server = properties.getServer();
-        if (server.endsWith("/")) {
-            server = server.substring(0, server.length() - 1);
-        }
-        return server + "/api/";
-    }
-
-    public SignatureProvider getSignature() {
-        return null;
-    }
-
-}

+ 0 - 53
src/main/java/cn/com/qmth/scancentral/client/MarkingcloudProperties.java

@@ -1,53 +0,0 @@
-package cn.com.qmth.scancentral.client;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-import javax.validation.constraints.NotNull;
-
-@Component
-@ConfigurationProperties(prefix = "scancloud.markingcloud")
-public class MarkingcloudProperties {
-
-    @NotNull
-    private String server = "https://www.markingcloud.com";
-
-    private String fileServer;
-
-    private String invoker;
-
-    private String accessToken;
-
-    public String getServer() {
-        return server;
-    }
-
-    public void setServer(String server) {
-        this.server = server;
-    }
-
-    public String getAccessToken() {
-        return accessToken;
-    }
-
-    public void setAccessToken(String accessToken) {
-        this.accessToken = accessToken;
-    }
-
-    public String getInvoker() {
-        return invoker;
-    }
-
-    public void setInvoker(String invoker) {
-        this.invoker = invoker;
-    }
-
-    public String getFileServer() {
-        return fileServer;
-    }
-
-    public void setFileServer(String fileServer) {
-        this.fileServer = fileServer;
-    }
-
-}

+ 0 - 100
src/main/java/cn/com/qmth/scancentral/controller/admin/FileController.java

@@ -1,100 +0,0 @@
-package cn.com.qmth.scancentral.controller.admin;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-
-import com.qmth.boot.api.annotation.Aac;
-import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.boot.core.exception.ParameterException;
-import com.qmth.boot.core.exception.StatusException;
-import com.qmth.boot.core.retrofit.utils.SignatureInfo;
-import com.qmth.boot.core.retrofit.utils.UploadFile;
-import com.qmth.boot.tools.signature.SignatureType;
-
-import cn.com.qmth.scancentral.bean.User;
-import cn.com.qmth.scancentral.client.MarkingcloudApiClient;
-import cn.com.qmth.scancentral.controller.BaseController;
-import cn.com.qmth.scancentral.entity.SubjectEntity;
-import cn.com.qmth.scancentral.enums.FormatType;
-import cn.com.qmth.scancentral.enums.SystemMode;
-import cn.com.qmth.scancentral.model.FileUploadResponse;
-import cn.com.qmth.scancentral.service.SubjectService;
-import cn.com.qmth.scancentral.vo.UpdateTimeVo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-
-@RestController
-@Api(tags = "试卷答案文件上传接口")
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/admin/file")
-@Aac(strict = false, auth = true)
-public class FileController extends BaseController {
-
-    private static final Logger log = LoggerFactory.getLogger(FileController.class);
-
-    @Autowired
-    private SubjectService subjectService;
-
-    @Autowired
-    private MarkingcloudApiClient markingcloudApiClient;
-
-    @ApiOperation(value = "答案上传接口")
-    @RequestMapping(value = "/answer/upload", method = RequestMethod.POST)
-    public UpdateTimeVo answerUpload(@RequestParam Long examId, @RequestParam String subjectCode,
-            @RequestParam String md5, @RequestParam MultipartFile file) {
-        if (!SystemMode.MARKINGCLOUD.equals(SystemMode.current())) {
-            throw new ParameterException("K12模式不允许创建通卡");
-        }
-        SubjectEntity sub = subjectService.findByExamIdAndCode(examId, subjectCode);
-        if (sub == null) {
-            throw new ParameterException("未找到科目,请先同步或创建考生获取科目");
-        }
-        User user = getAccessUser();
-        SignatureInfo signatureInfo = new SignatureInfo(SignatureType.TOKEN, user.getAccount(),
-                user.getMarkingCloudToken());
-        try {
-            FileUploadResponse res = markingcloudApiClient
-                    .answerFileUpload(signatureInfo, examId, subjectCode, FormatType.PDF.toString(), md5,
-                            UploadFile.build("file", "", file.getBytes()));
-            if (res == null || !res.getSuccess()) {
-                throw new StatusException("答案上传出错,examId=" + examId + ", subjectCode=" + subjectCode);
-            }
-        } catch (Exception e) {
-            log.error("答案上传出错,examId=" + examId + ", subjectCode=" + subjectCode, e);
-        }
-        return result(System.currentTimeMillis());
-    }
-
-    @ApiOperation(value = "试卷上传接口")
-    @RequestMapping(value = "/paper/upload", method = RequestMethod.POST)
-    public UpdateTimeVo paperUpload(@RequestParam Long examId, @RequestParam String subjectCode,
-            @RequestParam String md5, @RequestParam MultipartFile file) {
-        if (!SystemMode.MARKINGCLOUD.equals(SystemMode.current())) {
-            throw new ParameterException("K12模式不允许创建通卡");
-        }
-        SubjectEntity sub = subjectService.findByExamIdAndCode(examId, subjectCode);
-        if (sub == null) {
-            throw new ParameterException("未找到科目,请先同步或创建考生获取科目");
-        }
-        User user = getAccessUser();
-        SignatureInfo signatureInfo = new SignatureInfo(SignatureType.TOKEN, user.getAccount(),
-                user.getMarkingCloudToken());
-        try {
-            FileUploadResponse res = markingcloudApiClient
-                    .paperFileUpload(signatureInfo, examId, subjectCode, FormatType.PDF.toString(), md5,
-                            UploadFile.build("file", "", file.getBytes()));
-            if (res == null || !res.getSuccess()) {
-                throw new StatusException("试卷上传出错,examId=" + examId + ", subjectCode=" + subjectCode);
-            }
-        } catch (Exception e) {
-            log.error("试卷上传出错,examId=" + examId + ", subjectCode=" + subjectCode, e);
-        }
-        return result(System.currentTimeMillis());
-    }
-
-}

+ 6 - 6
src/main/java/cn/com/qmth/scancentral/service/AnswerCardService.java

@@ -1,12 +1,14 @@
 package cn.com.qmth.scancentral.service;
 
+import java.util.List;
+
+import org.springframework.web.multipart.MultipartFile;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+
 import cn.com.qmth.scancentral.bean.User;
 import cn.com.qmth.scancentral.entity.AnswerCardEntity;
 import cn.com.qmth.scancentral.vo.AnswerCardVo;
-import com.github.jeffreyning.mybatisplus.service.IMppService;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.List;
 
 public interface AnswerCardService extends IMppService<AnswerCardEntity> {
 
@@ -23,6 +25,4 @@ public interface AnswerCardService extends IMppService<AnswerCardEntity> {
 
     AnswerCardEntity findByExamAndNumber(Long examId, Integer number);
 
-    void sync(User user, Long examId);
-
 }

+ 5 - 15
src/main/java/cn/com/qmth/scancentral/service/ExamService.java

@@ -1,23 +1,21 @@
 package cn.com.qmth.scancentral.service;
 
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.boot.core.collection.PageResult;
+
 import cn.com.qmth.scancentral.bean.ExamConfigDomain;
 import cn.com.qmth.scancentral.bean.ImportExamDomain;
 import cn.com.qmth.scancentral.bean.User;
 import cn.com.qmth.scancentral.entity.ExamEntity;
 import cn.com.qmth.scancentral.vo.ExamConfigVo;
-import cn.com.qmth.scancentral.vo.ExamInitVo;
-import cn.com.qmth.scancentral.vo.ExamRemoteVo;
 import cn.com.qmth.scancentral.vo.ExamVo;
 import cn.com.qmth.scancentral.vo.checkimage.RatioVo;
 import cn.com.qmth.scancentral.vo.examinfo.ExamInfoVo;
 import cn.com.qmth.scancentral.vo.examinfo.ExamQuery;
 import cn.com.qmth.scancentral.vo.scanexaminfo.ScanExamInfoVo;
 import cn.com.qmth.scancentral.vo.scanexamlist.ScanExamListVo;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.qmth.boot.core.collection.PageResult;
-import com.qmth.boot.mybatis.query.BaseQuery;
-
-import java.util.List;
 
 public interface ExamService extends IService<ExamEntity> {
 
@@ -29,18 +27,10 @@ public interface ExamService extends IService<ExamEntity> {
 
     List<ScanExamListVo> getScanExamList();
 
-    PageResult<ExamRemoteVo> listRemote(BaseQuery<?> query, User accessUser);
-
     ScanExamInfoVo getScanExamInfo(Long id, User accessUser);
 
     ExamConfigVo config(User user, ExamConfigDomain domain);
 
-    Double syncProgress(User user, Long examId);
-
-    void sync(User user, Long examId);
-
-    ExamInitVo init(User user, ExamConfigDomain domain);
-
     ExamEntity save(ImportExamDomain exam);
 
     RatioVo updateRatio(Long examId, Double ratio);

+ 22 - 150
src/main/java/cn/com/qmth/scancentral/service/impl/AnswerCardServiceImpl.java

@@ -1,30 +1,11 @@
 package cn.com.qmth.scancentral.service.impl;
 
-import cn.com.qmth.scancentral.bean.User;
-import cn.com.qmth.scancentral.bean.card.CardFile;
-import cn.com.qmth.scancentral.client.MarkingcloudApiClient;
-import cn.com.qmth.scancentral.client.MarkingcloudProperties;
-import cn.com.qmth.scancentral.dao.AnswerCardDao;
-import cn.com.qmth.scancentral.entity.*;
-import cn.com.qmth.scancentral.enums.CardSource;
-import cn.com.qmth.scancentral.enums.ExamMode;
-import cn.com.qmth.scancentral.enums.SystemMode;
-import cn.com.qmth.scancentral.model.AnswerCardInfo;
-import cn.com.qmth.scancentral.service.*;
-import cn.com.qmth.scancentral.vo.AnswerCardVo;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
-import com.qmth.boot.core.exception.ParameterException;
-import com.qmth.boot.core.exception.StatusException;
-import com.qmth.boot.core.fss.store.FileStore;
-import com.qmth.boot.core.retrofit.exception.RetrofitResponseError;
-import com.qmth.boot.core.retrofit.utils.SignatureInfo;
-import com.qmth.boot.core.retrofit.utils.UploadFile;
-import com.qmth.boot.core.security.exception.AuthorizationException;
-import com.qmth.boot.tools.signature.SignatureType;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
@@ -34,11 +15,22 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import com.qmth.boot.core.exception.ParameterException;
+import com.qmth.boot.core.fss.store.FileStore;
+
+import cn.com.qmth.scancentral.bean.User;
+import cn.com.qmth.scancentral.bean.card.CardFile;
+import cn.com.qmth.scancentral.dao.AnswerCardDao;
+import cn.com.qmth.scancentral.entity.*;
+import cn.com.qmth.scancentral.enums.CardSource;
+import cn.com.qmth.scancentral.enums.ExamMode;
+import cn.com.qmth.scancentral.service.*;
+import cn.com.qmth.scancentral.vo.AnswerCardVo;
 
 @Service
 public class AnswerCardServiceImpl extends MppServiceImpl<AnswerCardDao, AnswerCardEntity>
@@ -61,18 +53,12 @@ public class AnswerCardServiceImpl extends MppServiceImpl<AnswerCardDao, AnswerC
     @Autowired
     private SubjectService subjectService;
 
-    @Autowired
-    private MarkingcloudApiClient apiClient;
-
     @Autowired
     private ScannerCardService scannerCardService;
 
     @Autowired
     private SessionService sessionService;
 
-    @Autowired
-    private MarkingcloudProperties properties;
-
     @Autowired
     private PaperService paperService;
 
@@ -139,23 +125,11 @@ public class AnswerCardServiceImpl extends MppServiceImpl<AnswerCardDao, AnswerC
         } catch (IOException e) {
             throw new ParameterException("文件解析失败", e);
         }
-        if (SystemMode.MARKINGCLOUD.equals(SystemMode.current())) {
-            //            log.info("markingcloud card save: account={}, token={}", user.getAccount(), user.getMarkingCloudToken());
-            SignatureInfo signatureInfo = new SignatureInfo(SignatureType.TOKEN, user.getAccount(),
-                    user.getMarkingCloudToken());
-            AnswerCardInfo answerCardInfo = apiClient
-                    .saveAnswerCard(signatureInfo, examId, number, CardSource.CLIENT, subjectCode, parameter, remark,
-                            paperCount, singlePage, false, sliceConfig, md5, dpi,
-                            UploadFile.build("file", "", fileData));
-            number = answerCardInfo.getNumber();
-            entity = this.findByExamAndNumber(examId, number);
-        } else {
             if (number != null) {
                 entity = this.findByExamAndNumber(examId, number);
             } else {
                 number = findMaxCardNumberByExamId(examId) + 1;
             }
-        }
         String filePath;
         try {
             filePath = fileService.uploadAnswerCard(file.getInputStream(), md5, examId, number);
@@ -229,11 +203,6 @@ public class AnswerCardServiceImpl extends MppServiceImpl<AnswerCardDao, AnswerC
         if (count == 0) {
             throw new ParameterException("未找到卡格式");
         }
-        if (SystemMode.MARKINGCLOUD.equals(SystemMode.current())) {
-            SignatureInfo signatureInfo = new SignatureInfo(SignatureType.TOKEN, user.getAccount(),
-                    user.getMarkingCloudToken());
-            apiClient.deleteAnswerCard(signatureInfo, examId, number);
-        }
         answerCardSubjectService.deleteByExamAndNumber(examId, number);
         paperStructureService.deleteByAnswerCard(examId, number);
         scannerCardService.deleteByExamAndCardNumber(examId, number);
@@ -283,103 +252,6 @@ public class AnswerCardServiceImpl extends MppServiceImpl<AnswerCardDao, AnswerC
         return list;
     }
 
-    @Transactional
-    @Override
-    public void sync(User user, Long examId) {
-        if (SystemMode.STANDALONE.equals(SystemMode.current())) {
-            return;
-        }
-        ExamEntity exam = examService.getById(examId);
-        SignatureInfo signatureInfo = new SignatureInfo(SignatureType.TOKEN, user.getAccount(),
-                user.getMarkingCloudToken());
-        try {
-            List<AnswerCardInfo> yun;
-            yun = apiClient.getAnswerCardInfo(signatureInfo, examId, null);
-            Set<Integer> numbers = new HashSet<>();
-            for (AnswerCardInfo answerCardInfo : yun) {
-                log.info("answer card file url: " + properties.getFileServer() + answerCardInfo.getPath());
-                numbers.add(answerCardInfo.getNumber());
-                QueryWrapper<AnswerCardEntity> queryWrapper = new QueryWrapper<>();
-                queryWrapper.lambda().eq(AnswerCardEntity::getExamId, examId);
-                queryWrapper.lambda().eq(AnswerCardEntity::getNumber, answerCardInfo.getNumber());
-                AnswerCardEntity entity = this.getOne(queryWrapper);
-                if (entity == null) {
-                    fileService.downLoadAnswerCard(examId, answerCardInfo.getNumber(), answerCardInfo.getMd5(),
-                            properties.getFileServer() + answerCardInfo.getPath());
-                    entity = new AnswerCardEntity();
-                    entity.setExamId(examId);
-                    entity.setNumber(answerCardInfo.getNumber());
-                    entity.setCode(answerCardInfo.getCode());
-                    entity.setDpi(answerCardInfo.getDpi() == 0 ? null : answerCardInfo.getDpi());
-                    entity.setPaperCount(answerCardInfo.getPaperCount());
-                    entity.setSinglePage(answerCardInfo.getSinglePage());
-                    entity.setParameter(answerCardInfo.getParameter());
-                    entity.setRemark(answerCardInfo.getRemark());
-                    entity.setPath(fileService.getAnswerCardUri(examId, answerCardInfo.getNumber()));
-                    entity.setMd5(answerCardInfo.getMd5());
-                    entity.setSliceConfig(answerCardInfo.getSliceConfig());
-                    entity.setSource(answerCardInfo.getSource());
-                    entity.setNeedAdapte(answerCardInfo.getSource() == CardSource.WEB);
-                    CardFile cardFile = new ObjectMapper().readValue(fileStore.read(entity.getPath()), CardFile.class);
-                    if (ExamMode.CET.equals(exam.getMode())) {
-                        entity.setSliceName(cardFile.getSliceName());
-                    }
-                    this.saveOrUpdateByMultiId(entity);
-                    paperStructureService.updateByAnswerCard(cardFile, examId, entity.getNumber());
-                } else if (!answerCardInfo.getMd5().equals(entity.getMd5())) {
-                    int studentCount = paperService.getCountByExamAndCardNumber(examId, answerCardInfo.getNumber());
-                    if (studentCount == 0) {
-                        if (entity.getSource().equals(CardSource.WEB)) {
-                            adapteFileService.deleteByExamIdAndCardNumber(examId, entity.getNumber());
-                        }
-                        fileService.downLoadAnswerCard(examId, answerCardInfo.getNumber(), answerCardInfo.getMd5(),
-                                properties.getFileServer() + answerCardInfo.getPath());
-                        CardFile cardFile = new ObjectMapper()
-                                .readValue(fileStore.read(entity.getPath()), CardFile.class);
-                        entity.setPaperCount(answerCardInfo.getPaperCount());
-                        entity.setSinglePage(answerCardInfo.getSinglePage());
-                        entity.setMd5(answerCardInfo.getMd5());
-                        entity.setSliceConfig(answerCardInfo.getSliceConfig());
-                        if (ExamMode.CET.equals(exam.getMode())) {
-                            entity.setSliceName(cardFile.getSliceName());
-                        }
-                        entity.setRemark(answerCardInfo.getRemark());
-                        entity.setParameter(answerCardInfo.getParameter());
-                        this.saveOrUpdateByMultiId(entity);
-                        paperStructureService.updateByAnswerCard(cardFile, examId, entity.getNumber());
-                    }
-                }
-                //重置卡格式与科目绑定关系
-                answerCardSubjectService.deleteByExamAndNumber(examId, answerCardInfo.getNumber());
-                for (String subjectCode : answerCardInfo.getSubjectList()) {
-                    AnswerCardSubjectEntity as = new AnswerCardSubjectEntity();
-                    as.setExamId(examId);
-                    as.setCardNumber(answerCardInfo.getNumber());
-                    as.setSubjectCode(subjectCode);
-                    answerCardSubjectService.saveOrUpdateByMultiId(as);
-                }
-            }
-            QueryWrapper<AnswerCardEntity> queryWrapper = new QueryWrapper<>();
-            queryWrapper.lambda().eq(AnswerCardEntity::getExamId, examId);
-            List<AnswerCardEntity> list = this.list(queryWrapper);
-            for (AnswerCardEntity answerCardEntity : list) {
-                if (!numbers.contains(answerCardEntity.getNumber())) {
-                    this.delete(user, examId, answerCardEntity.getNumber());
-                }
-            }
-            examService.updateCardSyncTime(examId);
-        } catch (RetrofitResponseError e) {
-            if (e.getCode() == 401) {
-                sessionService.userLogout(user);
-                throw AuthorizationException.SIGNATURE_INVALID;
-            } else {
-                throw e;
-            }
-        } catch (Exception e) {
-            throw new StatusException("answer card sync error: " + e.getMessage(), e);
-        }
-    }
-
     @Override
     public AnswerCardEntity findByExamAndNumber(Long examId, Integer number) {
         if (examId == null) {

+ 13 - 66
src/main/java/cn/com/qmth/scancentral/service/impl/AuthServiceImpl.java

@@ -1,32 +1,29 @@
 package cn.com.qmth.scancentral.service.impl;
 
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.qmth.boot.core.exception.ParameterException;
+import com.qmth.boot.core.security.annotation.AuthorizationComponent;
+import com.qmth.boot.core.security.service.AuthorizationService;
+import com.qmth.boot.tools.signature.SignatureType;
+
 import cn.com.qmth.scancentral.bean.ScannerLoginInfo;
 import cn.com.qmth.scancentral.bean.User;
-import cn.com.qmth.scancentral.client.MarkingcloudApiClient;
-import cn.com.qmth.scancentral.client.MarkingcloudProperties;
 import cn.com.qmth.scancentral.entity.SystemConfigEntity;
 import cn.com.qmth.scancentral.entity.UserEntity;
 import cn.com.qmth.scancentral.enums.Role;
-import cn.com.qmth.scancentral.enums.SystemMode;
 import cn.com.qmth.scancentral.exception.ForbiddenExceptions;
 import cn.com.qmth.scancentral.exception.UnauthorizedExceptions;
-import cn.com.qmth.scancentral.model.UserInfo;
 import cn.com.qmth.scancentral.service.AuthService;
 import cn.com.qmth.scancentral.service.ScannerService;
 import cn.com.qmth.scancentral.service.SessionService;
 import cn.com.qmth.scancentral.service.UserService;
-import com.qmth.boot.core.exception.ParameterException;
-import com.qmth.boot.core.exception.StatusException;
-import com.qmth.boot.core.security.annotation.AuthorizationComponent;
-import com.qmth.boot.core.security.service.AuthorizationService;
-import com.qmth.boot.tools.signature.SignatureType;
-import org.apache.commons.lang3.RandomStringUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @AuthorizationComponent
@@ -46,12 +43,6 @@ public class AuthServiceImpl implements AuthorizationService<User>, AuthService
     @Autowired
     private SystemConfigServiceImpl systemConfigService;
 
-    @Autowired
-    private MarkingcloudApiClient apiClient;
-
-    @Autowired
-    private MarkingcloudProperties markingcloudProperties;
-
     @Override
     public User findByIdentity(String identity, SignatureType type, String path) {
         return sessionService.getSessionUser(identity);
@@ -95,7 +86,6 @@ public class AuthServiceImpl implements AuthorizationService<User>, AuthService
 
     @Override
     public User adminLogin(String loginName, String password, String device) {
-        if (SystemMode.STANDALONE.equals(SystemMode.current())) {
             UserEntity userEntity = userService.getByLoginName(loginName);
             if (userEntity == null) {
                 throw new ParameterException("用户不存在");
@@ -118,49 +108,6 @@ public class AuthServiceImpl implements AuthorizationService<User>, AuthService
             user.setSchoolId(userEntity.getSchoolId());
             sessionService.userLogin(user);
             return user;
-        } else if (SystemMode.MARKINGCLOUD.equals(SystemMode.current())) {
-            User user = new User();
-            user.setAccount(loginName);
-            user.setAccessToken(RandomStringUtils.randomAlphanumeric(32));
-            UserEntity userEntity = userService.getByLoginName(loginName);
-            if (userEntity != null) {
-                if (!userEntity.getEnable()) {
-                    throw new ParameterException("用户已禁用");
-                }
-                if (!password.equals(userEntity.getPassword())) {
-                    throw new ParameterException("密码错误");
-                }
-                user.setRole(userEntity.getRole());
-                user.buildKey();
-                user.setId(userEntity.getId());
-                user.setName(userEntity.getName());
-                user.setSchoolId(userEntity.getSchoolId());
-                userEntity.setDevice(device);
-                userService.saveOrUpdate(userEntity);
-            } else {
-                try {
-                    UserInfo userInfo = apiClient.login(loginName, password);
-                    user.setRole(userInfo.getRole());
-                    user.buildKey();
-                    //为了避免与本地用户ID重复,云阅卷用户ID统一加10000
-                    user.setId(10000 + userInfo.getId());
-                    user.setName(userInfo.getName());
-                    user.setSchoolId(userInfo.getSchoolId());
-                    user.setMarkingCloudToken(userInfo.getToken());
-//                    log.info("markingcloud user login: account={}, token={}", user.getAccount(),
-//                            user.getMarkingCloudToken());
-                    //登录后更新fileServer属性
-                    markingcloudProperties.setFileServer(userInfo.getFileServer());
-                } catch (Exception e) {
-                    log.error("markingcloud user login error", e);
-                    throw UnauthorizedExceptions.MARKINGCLOUD_LOGIN_ERROR;
-                }
-            }
-            sessionService.userLogin(user);
-            return user;
-        } else {
-            throw new StatusException("系统配置模式错误");
-        }
     }
 
 }

+ 31 - 362
src/main/java/cn/com/qmth/scancentral/service/impl/ExamServiceImpl.java

@@ -1,51 +1,39 @@
 package cn.com.qmth.scancentral.service.impl;
 
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.boot.core.collection.PageResult;
+import com.qmth.boot.core.concurrent.service.ConcurrentService;
+import com.qmth.boot.core.exception.ParameterException;
+import com.qmth.boot.core.security.exception.AuthorizationException;
+
 import cn.com.qmth.scancentral.bean.ExamConfigDomain;
 import cn.com.qmth.scancentral.bean.ImportExamDomain;
 import cn.com.qmth.scancentral.bean.User;
-import cn.com.qmth.scancentral.client.MarkingcloudApiClient;
 import cn.com.qmth.scancentral.dao.ExamDao;
-import cn.com.qmth.scancentral.entity.*;
+import cn.com.qmth.scancentral.entity.ExamEntity;
+import cn.com.qmth.scancentral.entity.ExamSummaryEntity;
+import cn.com.qmth.scancentral.entity.SystemConfigEntity;
 import cn.com.qmth.scancentral.enums.*;
 import cn.com.qmth.scancentral.exception.ParameterExceptions;
-import cn.com.qmth.scancentral.model.ExamInfoDto;
-import cn.com.qmth.scancentral.model.StudentInfo;
 import cn.com.qmth.scancentral.service.*;
 import cn.com.qmth.scancentral.util.PageUtil;
 import cn.com.qmth.scancentral.vo.ExamConfigVo;
-import cn.com.qmth.scancentral.vo.ExamInitVo;
-import cn.com.qmth.scancentral.vo.ExamRemoteVo;
 import cn.com.qmth.scancentral.vo.ExamVo;
 import cn.com.qmth.scancentral.vo.checkimage.RatioVo;
-import cn.com.qmth.scancentral.vo.examinfo.ExamConfig;
 import cn.com.qmth.scancentral.vo.examinfo.ExamInfoVo;
 import cn.com.qmth.scancentral.vo.examinfo.ExamQuery;
 import cn.com.qmth.scancentral.vo.scanexaminfo.ScanExamInfoVo;
 import cn.com.qmth.scancentral.vo.scanexamlist.ScanExamListQuery;
 import cn.com.qmth.scancentral.vo.scanexamlist.ScanExamListVo;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.qmth.boot.core.collection.PageResult;
-import com.qmth.boot.core.concurrent.service.ConcurrentService;
-import com.qmth.boot.core.exception.ParameterException;
-import com.qmth.boot.core.exception.StatusException;
-import com.qmth.boot.core.retrofit.exception.RetrofitResponseError;
-import com.qmth.boot.core.retrofit.utils.SignatureInfo;
-import com.qmth.boot.core.security.exception.AuthorizationException;
-import com.qmth.boot.mybatis.query.BaseQuery;
-import com.qmth.boot.tools.signature.SignatureType;
-import net.sf.json.JSONObject;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 
 @Service
 public class ExamServiceImpl extends ServiceImpl<ExamDao, ExamEntity> implements ExamService {
@@ -80,9 +68,6 @@ public class ExamServiceImpl extends ServiceImpl<ExamDao, ExamEntity> implements
     @Autowired
     private ConcurrentService concurrentService;
 
-    @Autowired
-    private MarkingcloudApiClient apiClient;
-
     @Autowired
     private OmrGroupService omrGroupService;
 
@@ -258,61 +243,6 @@ public class ExamServiceImpl extends ServiceImpl<ExamDao, ExamEntity> implements
         return this.baseMapper.getExamList(query);
     }
 
-    @Transactional
-    @Override
-    public PageResult<ExamRemoteVo> listRemote(BaseQuery<?> query, User user) {
-        if (SystemMode.STANDALONE.equals(SystemMode.current())) {
-            return PageUtil.emptyPage();
-        }
-        SignatureInfo signatureInfo = new SignatureInfo(SignatureType.TOKEN, user.getAccount(),
-                user.getMarkingCloudToken());
-        int pageNumber = 1;
-        int pageSize = 20;
-        List<ExamInfoDto> yunList = new ArrayList<>();
-        try {
-            List<ExamInfoDto> list = apiClient.examQuery(signatureInfo, pageNumber, pageSize);
-            yunList.addAll(list);
-            while (list.size() != 0) {
-                pageNumber++;
-                list = apiClient.examQuery(signatureInfo, pageNumber, pageSize);
-                yunList.addAll(list);
-            }
-        } catch (RetrofitResponseError e) {
-            if (e.getCode() == 401) {
-                sessionService.removeSchoolSession(user.getSchoolId());
-            }
-            log.error("list remote exam error, account=" + user.getAccount() + ", schoolId=" + user.getSchoolId()
-                    + ", token=" + user.getMarkingCloudToken(), e);
-            throw e;
-        } catch (Exception e) {
-            log.error("list remote exam error, account=" + user.getAccount() + ", schoolId=" + user.getSchoolId()
-                    + ", token=" + user.getMarkingCloudToken(), e);
-            throw new StatusException("获取未开启的考试出错", e);
-        }
-        List<ExamInfoDto> remoteList = new ArrayList<>();
-        for (ExamInfoDto infoDto : yunList) {
-            if (this.getById(infoDto.getId()) == null) {
-                remoteList.add(infoDto);
-            }
-        }
-        List<ExamRemoteVo> vos = new ArrayList<>();
-        for (ExamInfoDto examInfoDto : remoteList) {
-            ExamRemoteVo vo = new ExamRemoteVo();
-            vo.setExamTime(examInfoDto.getExamTime());
-            vo.setId(examInfoDto.getId());
-            vo.setName(examInfoDto.getName());
-            vo.setScanConfig(examInfoDto.getConfig());
-            vos.add(vo);
-        }
-        List<ExamRemoteVo> page = PageUtil.startPage(vos, (int) query.getPageNumber(), (int) query.getPageSize());
-        PageResult<ExamRemoteVo> result = new PageResult<>();
-        result.setPageNumber(query.getPageNumber());
-        result.setPageSize(query.getPageSize());
-        result.setResult(page);
-        result.setTotalCount(vos.size());
-        return result;
-    }
-
     @Transactional
     @Override
     public ExamConfigVo config(User user, ExamConfigDomain domain) {
@@ -326,7 +256,6 @@ public class ExamServiceImpl extends ServiceImpl<ExamDao, ExamEntity> implements
         if (!exam.getSchoolId().equals(user.getSchoolId())) {
             throw ParameterExceptions.EXAM_NOT_FOUND;
         }
-        if (SystemMode.STANDALONE.equals(SystemMode.current())) {
             if (domain.getAllowUnexistPaper() != null) {
                 exam.setAllowUnexistPaper(domain.getAllowUnexistPaper());
             }
@@ -354,281 +283,21 @@ public class ExamServiceImpl extends ServiceImpl<ExamDao, ExamEntity> implements
             if (domain.getPaperTypeBarcodeContent() != null) {
                 exam.setPaperTypeBarcodeContent(domain.getPaperTypeBarcodeContent());
             }
-        } else {
-            if (domain.getAllowUnexistPaper() == null) {
-                domain.setAllowUnexistPaper(exam.getAllowUnexistPaper());
-            }
-            if (domain.getEnableSinglePageAnswer() == null) {
-                domain.setEnableSinglePageAnswer(exam.getEnableSinglePageAnswer());
-            }
-            if (domain.getEnableSyncVerify() == null) {
-                domain.setEnableSyncVerify(exam.getEnableSyncVerify());
-            }
-            if (domain.getScanByPackage() == null) {
-                domain.setScanByPackage(exam.getScanByPackage());
-            }
-            if (domain.getAbsentBarcodeContent() == null) {
-                domain.setAbsentBarcodeContent(exam.getAbsentBarcodeContent());
-            }
-            if (domain.getAnswerFrontCardType() == null) {
-                domain.setAnswerFrontCardType(exam.getAnswerFrontCardType());
-            }
-            if (domain.getImageTransferMode() == null) {
-                domain.setImageTransferMode(exam.getImageTransferMode());
-            }
-            if (domain.getMode() == null) {
-                domain.setMode(exam.getMode());
-            }
-            if (domain.getPaperTypeBarcodeContent() == null) {
-                domain.setPaperTypeBarcodeContent(exam.getPaperTypeBarcodeContent());
-            }
-            SignatureInfo signatureInfo = new SignatureInfo(SignatureType.TOKEN, user.getAccount(),
-                    user.getMarkingCloudToken());
-            JSONObject config = JSONObject.fromObject(domain);
-            try {
-                ExamInfoDto examInfo = apiClient
-                        .examConfig(signatureInfo, domain.getId(), config.toString());
-                exam.setId(domain.getId());
-                exam.setName(examInfo.getName());
-                exam.setSchoolId(user.getSchoolId());
-                exam.setSchoolName(examInfo.getSchoolName());
-                exam.setAbsentBarcodeContent(examInfo.getConfig().getAbsentBarcodeContent());
-                exam.setAllowUnexistPaper(examInfo.getConfig().getAllowUnexistPaper());
-                exam.setAnswerFrontCardType(examInfo.getConfig().getAnswerFrontCardType());
-                exam.setImageTransferMode(examInfo.getConfig().getImageTransferMode());
-                exam.setEnableSyncVerify(examInfo.getConfig().getEnableSyncVerify());
-                exam.setEnableSinglePageAnswer(examInfo.getConfig().getEnableSinglePageAnswer());
-                exam.setMode(examInfo.getConfig().getMode());
-                exam.setPaperTypeBarcodeContent(examInfo.getConfig().getPaperTypeBarcodeContent());
-                exam.setScanByPackage(examInfo.getConfig().getScanByPackage());
-            } catch (RetrofitResponseError e) {
-                if (e.getCode() == 401) {
-                    sessionService.userLogout(user);
-                    throw AuthorizationException.SIGNATURE_INVALID;
-                } else {
-                    throw e;
-                }
-            } catch (Exception e) {
-                throw new StatusException("保存考试配置出错examId:" + exam.getId(), e);
-            }
-        }
-        if (exam.getEnableSyncVerify() == false) {
-            batchService.batchVerifyCancel(user, exam.getId());
-        }
-        this.saveOrUpdate(exam);
-        return new ExamConfigVo(exam);
-    }
-
-    @Override
-    public Double syncProgress(User user, Long examId) {
-        if (SystemMode.STANDALONE.equals(SystemMode.current())) {
-            return 0d;
-        }
-        int studentCount = studentService.getCountByExam(examId);
-        SignatureInfo signatureInfo = new SignatureInfo(SignatureType.TOKEN, user.getAccount(),
-                user.getMarkingCloudToken());
-        try {
-            long totalCount = apiClient.studentCount(signatureInfo, examId);
-            return (double) (studentCount * 100 / totalCount);
-        } catch (RetrofitResponseError e) {
-            if (e.getCode() == 401) {
-                sessionService.userLogout(user);
-                throw AuthorizationException.SIGNATURE_INVALID;
-            } else {
-                throw e;
-            }
-        } catch (StatusException e) {
-            throw e;
-        } catch (Exception e) {
-            e.getStackTrace();
-            throw new StatusException("获取同步进度出错examId:" + examId, e);
-        }
-    }
-
-    @Transactional
-    @Override
-    public void sync(User user, Long examId) {
-        if (SystemMode.STANDALONE.equals(SystemMode.current())) {
-            return;
-        }
-        ExamEntity exam = this.getById(examId);
-        if (exam == null) {
-            throw ParameterExceptions.EXAM_NOT_FOUND;
-        }
-        SignatureInfo signatureInfo = new SignatureInfo(SignatureType.TOKEN, user.getAccount(),
-                user.getMarkingCloudToken());
-        long now = System.currentTimeMillis();
-        try {
-            int pageNumber = 1;
-            int pageSize = 100;
-            List<StudentEntity> saveList = new ArrayList<>();
-            List<SubjectEntity> subjectList = new ArrayList<>();
-            Map<String, SubjectEntity> subjectMap = new HashMap<>();
-            List<StudentInfo> students = apiClient.getStudents(signatureInfo, examId, pageNumber, pageSize);
-            while (students.size() != 0) {
-                List<Long> ids = new ArrayList<>();
-                students.forEach((e) -> ids.add(e.getId()));
-                List<StudentEntity> list = studentService.listByIds(ids);
-                Map<Long, StudentEntity> map = new HashMap<>();
-                list.forEach((e) -> map.put(e.getId(), e));
-                for (StudentInfo studentInfo : students) {
-                    StudentEntity student = map.get(studentInfo.getId());
-                    if (student == null) {
-                        student = new StudentEntity();
-                        student.setId(studentInfo.getId());
-                        student.setExamId(examId);
-                        student.setPaperType(studentInfo.getPaperType());
-                        student.setAbsentSuspect(false);
-                        student.setAssigned(false);
-                        student.setIncomplete(false);
-                        student.setOmrAbsent(false);
-                        student.setQuestionFilled(false);
-                        student.setSubjectiveFilled(false);
-                        student.setStatus(ScanStatus.UNEXIST);
-                        student.setCheckMark(false);
-                        student.setAssignedSuspect(false);
-                        student.setAssignedCheckCount(0);
-                    } else {
-                        //考生已存在且未扫描状态下,才同步云端现有试卷类型
-                        //否则需要保留已扫描的试卷类型
-                        if (student.getStatus() == ScanStatus.UNEXIST) {
-                            student.setPaperType(studentInfo.getPaperType());
-                        }
-                    }
-                    //更新必填属性
-                    student.setExamNumber(studentInfo.getExamNumber());
-                    student.setStudentCode(studentInfo.getStudentCode());
-                    student.setName(studentInfo.getName());
-                    student.setSubjectCode(studentInfo.getSubjectCode());
-                    //更新可选属性
-                    student.setExamRoom(studentInfo.getExamRoom() != null && studentInfo.getExamRoom().length() > 0 ?
-                            studentInfo.getExamRoom() :
-                            null);
-                    student.setExamSite(studentInfo.getExamSite() != null && studentInfo.getExamSite().length() > 0 ?
-                            studentInfo.getExamSite() :
-                            null);
-                    student.setPackageCode(
-                            studentInfo.getPackageCode() != null && studentInfo.getPackageCode().length() > 0 ?
-                                    studentInfo.getPackageCode() :
-                                    null);
-                    //更新时间属性
-                    student.setCreatorId(user.getId());
-                    student.setCreateTime(now);
-                    student.setUpdaterId(user.getId());
-                    student.setUpdateTime(now);
-                    saveList.add(student);
-                    SubjectEntity subject = subjectMap.get(studentInfo.getSubjectCode());
-                    if (subject == null) {
-                        subject = new SubjectEntity();
-                        subject.setExamId(examId);
-                        subject.setCode(studentInfo.getSubjectCode());
-                        subject.setName(studentInfo.getSubjectName());
-                        subject.setCreateTime(now);
-                        subject.setCreatorId(user.getId());
-                        subject.setUpdaterId(user.getId());
-                        subject.setUpdateTime(now);
-                        subjectList.add(subject);
-                        subjectMap.put(studentInfo.getSubjectCode(), subject);
-                    }
-                }
-                if (saveList.size() > 1000) {
-                    studentService.saveOrUpdateBatch(saveList);
-                    saveList = new ArrayList<>();
-                }
-                pageNumber++;
-                students = apiClient.getStudents(signatureInfo, examId, pageNumber, pageSize);
-            }
-            for (String subjectCode : subjectMap.keySet()) {
-                List<QuestionEntity> questions = apiClient.getQuestion(signatureInfo, examId, subjectCode);
-                if (!questions.isEmpty()) {
-                    for (QuestionEntity question : questions) {
-                        question.setSubjectCode(subjectCode);
-                        question.setExamId(examId);
-                    }
-                    questionService.deleteByExamIdAndSubjectCode(examId, subjectCode);
-                    questionService.saveBatch(questions);
-                }
-            }
-            studentService.saveOrUpdateBatch(saveList);
-            subjectService.saveOrUpdateBatchByMultiId(subjectList);
-            studentService.deletetByExamIdAndUnCreateTime(examId, now);
-            this.updateDataSyncTime(examId);
-            //一并同步卡格式
-            answerCardService.sync(user, examId);
-        } catch (RetrofitResponseError e) {
-            if (e.getCode() == 401) {
-                sessionService.userLogout(user);
-                throw AuthorizationException.SIGNATURE_INVALID;
-            } else {
-                throw e;
-            }
-        }
-    }
-
-    @Transactional
-    @Override
-    public ExamInitVo init(User user, ExamConfigDomain domain) {
-        if (SystemMode.STANDALONE.equals(SystemMode.current())) {
-            throw new ParameterException("本地模式不支持此功能");
-        }
-        if (ExamMode.CET.equals(domain.getMode())) {
-            throw new ParameterException("云阅卷模式下不支持CET考试");
-        }
-        if (!Role.SCHOOL_ADMIN.equals(user.getRole())) {
-            throw AuthorizationException.NO_PERMISSION;
-        }
-        ExamEntity exam = this.getById(domain.getId());
-        if (exam != null) {
-            throw new ParameterException("考试已经存在");
-        }
-        // if (domain.getAbsentBarcodeContent() == null) {
-        // throw new ParameterException("AbsentBarcodeContent 不能为空");
-        // }
-        // if (domain.getPaperTypeBarcodeContent().isEmpty()) {
-        // throw new ParameterException("PaperTypeBarcodeContent 不能为空");
-        // }
-        exam = new ExamEntity();
-        exam.setEnable(true);
-        //独立模式默认不开启上传
-        exam.setEnableUpload(!SystemMode.STANDALONE.equals(SystemMode.current()));
-        //图片抽查比例默认为0
-        exam.setImageCheckRatio(0d);
-        exam.setMode(domain.getMode());
-        exam.setAllowUnexistPaper(domain.getAllowUnexistPaper());
-        exam.setEnableSinglePageAnswer(domain.getEnableSinglePageAnswer());
-        exam.setEnableSyncVerify(domain.getEnableSyncVerify());
-        exam.setScanByPackage(domain.getScanByPackage());
-        exam.setAnswerFrontCardType(domain.getAnswerFrontCardType());
-        exam.setImageTransferMode(domain.getImageTransferMode());
-        exam.setAbsentBarcodeContent(StringUtils.trimToEmpty(domain.getAbsentBarcodeContent()));
-        exam.setPaperTypeBarcodeContent(
-                domain.getPaperTypeBarcodeContent() != null ? domain.getPaperTypeBarcodeContent() : new ArrayList<>());
-        SignatureInfo signatureInfo = new SignatureInfo(SignatureType.TOKEN, user.getAccount(),
-                user.getMarkingCloudToken());
-        JSONObject config = JSONObject.fromObject(domain);
-        try {
-            ExamInfoDto examInfo = apiClient.examConfig(signatureInfo, domain.getId(), config.toString());
             exam.setId(domain.getId());
-            exam.setName(examInfo.getName());
-            exam.setSchoolId(user.getSchoolId());
-            exam.setSchoolName(examInfo.getSchoolName());
-            this.save(exam);
-            omrGroupService.addFixOmrCondition(user.getId(), exam.getId());
-        } catch (RetrofitResponseError e) {
-            if (e.getCode() == 401) {
-                sessionService.userLogout(user);
-                throw AuthorizationException.SIGNATURE_INVALID;
-            } else {
-                throw e;
+            exam.setAbsentBarcodeContent(domain.getAbsentBarcodeContent());
+            exam.setAllowUnexistPaper(domain.getAllowUnexistPaper());
+            exam.setAnswerFrontCardType(domain.getAnswerFrontCardType());
+            exam.setImageTransferMode(domain.getImageTransferMode());
+            exam.setEnableSyncVerify(domain.getEnableSyncVerify());
+            exam.setEnableSinglePageAnswer(domain.getEnableSinglePageAnswer());
+            exam.setMode(domain.getMode());
+            exam.setPaperTypeBarcodeContent(domain.getPaperTypeBarcodeContent());
+            exam.setScanByPackage(domain.getScanByPackage());
+            if (exam.getEnableSyncVerify() == false) {
+                batchService.batchVerifyCancel(user, exam.getId());
             }
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new StatusException("保存考试配置出错examId:" + exam.getId(), e);
-        }
-        ExamInitVo vo = new ExamInitVo();
-        vo.setExamConfig(new ExamConfig(exam));
-        vo.setSubjectConfig(subjectService.listConfigByExamId(exam.getId()));
-        return vo;
+            this.saveOrUpdate(exam);
+            return new ExamConfigVo(exam);
     }
 
     @Transactional

+ 136 - 141
src/main/java/cn/com/qmth/scancentral/service/impl/StudentServiceImpl.java

@@ -1,5 +1,39 @@
 package cn.com.qmth.scancentral.service.impl;
 
+import java.io.*;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import javax.validation.constraints.NotNull;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.boot.core.collection.PageResult;
+import com.qmth.boot.core.concurrent.service.ConcurrentService;
+import com.qmth.boot.core.exception.ParameterException;
+import com.qmth.boot.core.exception.StatusException;
+import com.qmth.boot.core.fss.store.FileStore;
+import com.qmth.boot.core.retrofit.utils.SignatureInfo;
+import com.qmth.boot.tools.excel.ExcelReader;
+import com.qmth.boot.tools.excel.enums.ExcelType;
+import com.qmth.boot.tools.io.IOUtils;
+import com.qmth.boot.tools.signature.SignatureType;
+
 import cn.com.qmth.scancentral.bean.*;
 import cn.com.qmth.scancentral.bean.answergroup.StudentAnswerGroupCondition;
 import cn.com.qmth.scancentral.bean.answergroup.StudnetAnswerGroupMarkedVo;
@@ -11,16 +45,12 @@ import cn.com.qmth.scancentral.bean.omredit.OmrEditPaper;
 import cn.com.qmth.scancentral.bean.refix.AnswerRefixDomain;
 import cn.com.qmth.scancentral.bean.refix.PageRefixDomain;
 import cn.com.qmth.scancentral.bean.refix.PaperRefixDomain;
-import cn.com.qmth.scancentral.client.MarkingcloudApiClient;
 import cn.com.qmth.scancentral.config.SysProperty;
 import cn.com.qmth.scancentral.dao.StudentDao;
 import cn.com.qmth.scancentral.entity.*;
 import cn.com.qmth.scancentral.enums.*;
 import cn.com.qmth.scancentral.exception.NotFoundExceptions;
 import cn.com.qmth.scancentral.exception.ParameterExceptions;
-import cn.com.qmth.scancentral.model.DataUploadDto;
-import cn.com.qmth.scancentral.model.DataUploadResponse;
-import cn.com.qmth.scancentral.model.FileUploadResponse;
 import cn.com.qmth.scancentral.model.ManualAbsentImportDTO;
 import cn.com.qmth.scancentral.service.*;
 import cn.com.qmth.scancentral.support.TaskLock;
@@ -42,38 +72,6 @@ import cn.com.qmth.scancentral.vo.paper.PaperPageCetVo;
 import cn.com.qmth.scancentral.vo.student.StudentQuery;
 import cn.com.qmth.scancentral.vo.student.StudentVo;
 import cn.com.qmth.scancentral.vo.task.TaskStatusVo;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.qmth.boot.core.collection.PageResult;
-import com.qmth.boot.core.concurrent.service.ConcurrentService;
-import com.qmth.boot.core.exception.ParameterException;
-import com.qmth.boot.core.exception.StatusException;
-import com.qmth.boot.core.fss.store.FileStore;
-import com.qmth.boot.core.retrofit.utils.SignatureInfo;
-import com.qmth.boot.core.retrofit.utils.UploadFile;
-import com.qmth.boot.tools.excel.ExcelReader;
-import com.qmth.boot.tools.excel.enums.ExcelType;
-import com.qmth.boot.tools.io.IOUtils;
-import com.qmth.boot.tools.signature.SignatureType;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.validation.constraints.NotNull;
-import java.io.*;
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.stream.Collectors;
 
 @Service
 public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> implements StudentService {
@@ -122,9 +120,6 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
     @Autowired
     private StudentAnswerTaskService studentAnswerTaskService;
 
-    @Autowired
-    private MarkingcloudApiClient markingcloudApiClient;
-
     @Autowired
     private BatchPaperService batchPaperService;
 
@@ -1561,111 +1556,111 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
     }
 
     private void uploadFile(SignatureInfo signatureInfo, StudentEntity student) throws Exception {
-        List<StudentPaperEntity> sps = studentPaperService.findByStudentId(student.getId());
-        if (CollectionUtils.isEmpty(sps)) {
-            return;
-        }
-        List<String> sheets = new ArrayList<>();
-        List<String> slices = new ArrayList<>();
-        for (StudentPaperEntity sp : sps) {
-            List<PaperPageEntity> pages = paperPageService.listByPaperId(sp.getPaperId());
-            if (CollectionUtils.isNotEmpty(sps)) {
-                for (PaperPageEntity page : pages) {
-                    sheets.add(page.getSheetPath());
-                    if (CollectionUtils.isNotEmpty(page.getSlicePath())) {
-                        slices.addAll(page.getSlicePath());
-                    }
-                }
-            }
-        }
-        if (CollectionUtils.isNotEmpty(sheets)) {
-            int index = 0;
-            for (String s : sheets) {
-                index++;
-                FileUploadResponse res = markingcloudApiClient
-                        .sheetFileUpload(signatureInfo, student.getExamId(), student.getExamNumber(), index,
-                                filePropertyService.getById(s).getMd5(),
-                                UploadFile.build("file", getFileName(s), IOUtils.toByteArray(fileStore.read(s))));
-                if (res == null || !res.getSuccess()) {
-                    throw new StatusException(
-                            "sheet上传失败,Success:false.examId=" + student.getExamId() + ",examNumber=" + student
-                                    .getExamNumber());
-                }
-            }
-        }
-        if (CollectionUtils.isNotEmpty(slices)) {
-            int index = 0;
-            for (String s : slices) {
-                index++;
-                FileUploadResponse res = markingcloudApiClient
-                        .sliceFileUpload(signatureInfo, student.getExamId(), student.getExamNumber(), index,
-                                filePropertyService.getById(s).getMd5(),
-                                UploadFile.build("file", getFileName(s), IOUtils.toByteArray(fileStore.read(s))));
-                if (res == null || !res.getSuccess()) {
-                    throw new StatusException(
-                            "slice上传失败,Success:false.examId=" + student.getExamId() + ",examNumber=" + student
-                                    .getExamNumber());
-                }
-            }
-        }
+//        List<StudentPaperEntity> sps = studentPaperService.findByStudentId(student.getId());
+//        if (CollectionUtils.isEmpty(sps)) {
+//            return;
+//        }
+//        List<String> sheets = new ArrayList<>();
+//        List<String> slices = new ArrayList<>();
+//        for (StudentPaperEntity sp : sps) {
+//            List<PaperPageEntity> pages = paperPageService.listByPaperId(sp.getPaperId());
+//            if (CollectionUtils.isNotEmpty(sps)) {
+//                for (PaperPageEntity page : pages) {
+//                    sheets.add(page.getSheetPath());
+//                    if (CollectionUtils.isNotEmpty(page.getSlicePath())) {
+//                        slices.addAll(page.getSlicePath());
+//                    }
+//                }
+//            }
+//        }
+//        if (CollectionUtils.isNotEmpty(sheets)) {
+//            int index = 0;
+//            for (String s : sheets) {
+//                index++;
+//                FileUploadResponse res = markingcloudApiClient
+//                        .sheetFileUpload(signatureInfo, student.getExamId(), student.getExamNumber(), index,
+//                                filePropertyService.getById(s).getMd5(),
+//                                UploadFile.build("file", getFileName(s), IOUtils.toByteArray(fileStore.read(s))));
+//                if (res == null || !res.getSuccess()) {
+//                    throw new StatusException(
+//                            "sheet上传失败,Success:false.examId=" + student.getExamId() + ",examNumber=" + student
+//                                    .getExamNumber());
+//                }
+//            }
+//        }
+//        if (CollectionUtils.isNotEmpty(slices)) {
+//            int index = 0;
+//            for (String s : slices) {
+//                index++;
+//                FileUploadResponse res = markingcloudApiClient
+//                        .sliceFileUpload(signatureInfo, student.getExamId(), student.getExamNumber(), index,
+//                                filePropertyService.getById(s).getMd5(),
+//                                UploadFile.build("file", getFileName(s), IOUtils.toByteArray(fileStore.read(s))));
+//                if (res == null || !res.getSuccess()) {
+//                    throw new StatusException(
+//                            "slice上传失败,Success:false.examId=" + student.getExamId() + ",examNumber=" + student
+//                                    .getExamNumber());
+//                }
+//            }
+//        }
     }
 
     private void uploadData(SignatureInfo signatureInfo, StudentEntity student) {
-        ExamEntity exam = examService.getById(student.getExamId());
-        List<StudentPaperEntity> sps = studentPaperService.findByStudentId(student.getId());
-        List<String> sheets = new ArrayList<>();
-        List<String> slices = new ArrayList<>();
-        List<PaperPageEntity> pageList = new ArrayList<>();
-        if (CollectionUtils.isNotEmpty(sps)) {
-            for (StudentPaperEntity sp : sps) {
-                List<PaperPageEntity> pages = paperPageService.listByPaperId(sp.getPaperId());
-                if (CollectionUtils.isNotEmpty(sps)) {
-                    pageList.addAll(pages);
-                    for (PaperPageEntity page : pages) {
-                        sheets.add(page.getSheetPath());
-                        if (CollectionUtils.isNotEmpty(page.getSlicePath())) {
-                            slices.addAll(page.getSlicePath());
-                        }
-                    }
-                }
-            }
-        }
-        //未扫描或者没有paper,需要删除考生原有上传状态
-        if (student.getStatus().equals(ScanStatus.UNEXIST) || CollectionUtils.isEmpty(sheets)) {
-            markingcloudApiClient.studentFileDelete(signatureInfo, exam.getId(), student.getExamNumber());
-        }
-        //有扫描结果,正常上传考生状态
-        else {
-            DataUploadDto dto = new DataUploadDto();
-            dto.setSheetCount(sheets.size());
-            dto.setSliceCount(slices.size());
-            dto.setExamNumber(student.getExamNumber());
-            dto.setManual(student.getAssigned());
-            dto.setAbsent(student.getOmrAbsent());
-            dto.setCardNumber(student.getCardNumber());
-            List<String> answers = new ArrayList<String>();
-            int pageIndex = 0;
-            for (PaperPageEntity p : pageList) {
-                pageIndex++;
-                if (pageIndex == 1) {
-                    dto.setPaperType(getPaperType(exam.getPaperTypeBarcodeContent(), p.getPaperType()));
-                    BatchPaperEntity bp = batchPaperService.findByPaperId(p.getPaperId());
-                    dto.setBatchCode(bp != null ? bp.getBatchId().toString() : "");
-                }
-                disposeQuestionMark(p.getQuestion());
-                if (p.getQuestion() != null && CollectionUtils.isNotEmpty(p.getQuestion().getResult())) {
-                    answers.addAll(p.getQuestion().getResult());
-                }
-            }
-            dto.setAnswers(StringUtils.join(answers, ","));
-            List<DataUploadResponse> res = markingcloudApiClient
-                    .dataUpload(signatureInfo, student.getExamId(), Collections.singletonList(dto));
-            if (CollectionUtils.isEmpty(res) || StringUtils.isBlank(res.get(0).getExamNumber())) {
-                throw new StatusException(
-                        "数据上传失败,Success:false.examId=" + student.getExamId() + ",examNumber=" + student
-                                .getExamNumber());
-            }
-        }
+//        ExamEntity exam = examService.getById(student.getExamId());
+//        List<StudentPaperEntity> sps = studentPaperService.findByStudentId(student.getId());
+//        List<String> sheets = new ArrayList<>();
+//        List<String> slices = new ArrayList<>();
+//        List<PaperPageEntity> pageList = new ArrayList<>();
+//        if (CollectionUtils.isNotEmpty(sps)) {
+//            for (StudentPaperEntity sp : sps) {
+//                List<PaperPageEntity> pages = paperPageService.listByPaperId(sp.getPaperId());
+//                if (CollectionUtils.isNotEmpty(sps)) {
+//                    pageList.addAll(pages);
+//                    for (PaperPageEntity page : pages) {
+//                        sheets.add(page.getSheetPath());
+//                        if (CollectionUtils.isNotEmpty(page.getSlicePath())) {
+//                            slices.addAll(page.getSlicePath());
+//                        }
+//                    }
+//                }
+//            }
+//        }
+//        //未扫描或者没有paper,需要删除考生原有上传状态
+//        if (student.getStatus().equals(ScanStatus.UNEXIST) || CollectionUtils.isEmpty(sheets)) {
+//            markingcloudApiClient.studentFileDelete(signatureInfo, exam.getId(), student.getExamNumber());
+//        }
+//        //有扫描结果,正常上传考生状态
+//        else {
+//            DataUploadDto dto = new DataUploadDto();
+//            dto.setSheetCount(sheets.size());
+//            dto.setSliceCount(slices.size());
+//            dto.setExamNumber(student.getExamNumber());
+//            dto.setManual(student.getAssigned());
+//            dto.setAbsent(student.getOmrAbsent());
+//            dto.setCardNumber(student.getCardNumber());
+//            List<String> answers = new ArrayList<String>();
+//            int pageIndex = 0;
+//            for (PaperPageEntity p : pageList) {
+//                pageIndex++;
+//                if (pageIndex == 1) {
+//                    dto.setPaperType(getPaperType(exam.getPaperTypeBarcodeContent(), p.getPaperType()));
+//                    BatchPaperEntity bp = batchPaperService.findByPaperId(p.getPaperId());
+//                    dto.setBatchCode(bp != null ? bp.getBatchId().toString() : "");
+//                }
+//                disposeQuestionMark(p.getQuestion());
+//                if (p.getQuestion() != null && CollectionUtils.isNotEmpty(p.getQuestion().getResult())) {
+//                    answers.addAll(p.getQuestion().getResult());
+//                }
+//            }
+//            dto.setAnswers(StringUtils.join(answers, ","));
+//            List<DataUploadResponse> res = markingcloudApiClient
+//                    .dataUpload(signatureInfo, student.getExamId(), Collections.singletonList(dto));
+//            if (CollectionUtils.isEmpty(res) || StringUtils.isBlank(res.get(0).getExamNumber())) {
+//                throw new StatusException(
+//                        "数据上传失败,Success:false.examId=" + student.getExamId() + ",examNumber=" + student
+//                                .getExamNumber());
+//            }
+//        }
     }
 
     private String getFileName(String path) {

+ 0 - 1
src/main/resources/application.properties

@@ -27,6 +27,5 @@ scancloud.image-transfer.dir=../imagetransfer
 scancloud.thread.count=2
 scancloud.heartbeat-timeout=300
 scancloud.mode=STANDALONE
-scancloud.markingcloud.server=http://localhost:8090
 scancloud.file-uri-prefix=file
 scancloud.swagger.enable=true