浏览代码

成绩同步

wangliang 3 年之前
父节点
当前提交
3017a2b608

+ 56 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TSyncExamStudentScore.java

@@ -1,13 +1,18 @@
 package com.qmth.distributed.print.business.entity;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.contant.SystemConstant;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.File;
 import java.io.Serializable;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * <p>
@@ -108,12 +113,62 @@ public class TSyncExamStudentScore implements Serializable {
     @TableField(exist = false)
     private File trajectoryFile;
 
-    public void setErrorInfo(){
+    public void setErrorInfo() {
         this.trajectoryFile = null;
         this.trajectoryUrls = null;
         this.path = null;
     }
 
+    public TSyncExamStudentScore() {
+
+    }
+
+    public TSyncExamStudentScore(Map map) {
+        this.id = SystemConstant.getDbUuid();
+        this.schoolId = (Long) map.get(SystemConstant.SCHOOL_ID);
+        this.orgId = (Long) map.get("orgId");
+        this.semesterId = (Long) map.get("semesterId");
+        this.examId = Long.parseLong(String.valueOf(map.get("examId")));
+        this.examCode = (String) map.get("examCode");
+        this.examNumber = (String) map.get("examNumber");
+        this.studentCode = (String) map.get("studentCode");
+        this.name = (String) map.get("name");
+        this.subjectCode = (String) map.get("subjectCode");
+        this.subjectName = (String) map.get("subjectName");
+        this.paperType = (String) map.get("paperType");
+        this.college = (String) map.get("college");
+        this.clazzName = (String) map.get("className");
+        this.teacher = (String) map.get("teacher");
+        this.status = (Integer) map.get("status");
+        JSONArray jsonArray = (JSONArray) map.get("sheetUrls");
+        if (Objects.nonNull(jsonArray) && jsonArray.size() > 0) {
+            this.sheetUrls = jsonArray.get(0).toString();
+        }
+        this.totalScore = Double.parseDouble(String.valueOf(map.get("totalScore")));
+        this.objectiveScore = Double.parseDouble(String.valueOf(map.get("objectiveScore")));
+        this.subjectiveScore = Double.parseDouble(String.valueOf(map.get("subjectiveScore")));
+        this.createId = (Long) map.get("userId");
+        this.createTime = System.currentTimeMillis();
+
+        JSONObject jsonObject = new JSONObject();
+        JSONArray objectiveScoreDetailJsonArray = (JSONArray) map.get("objectiveScoreDetail");
+        JSONArray subjectiveScoreDetailJsonArray = (JSONArray) map.get("subjectiveScoreDetail");
+        JSONArray markTagsJsonArray = (JSONArray) map.get("markTags");
+        if (Objects.nonNull(objectiveScoreDetailJsonArray) && objectiveScoreDetailJsonArray.size() > 0) {
+            jsonObject.put("objectiveScoreDetail", objectiveScoreDetailJsonArray.toJSONString());
+        }
+        if (Objects.nonNull(subjectiveScoreDetailJsonArray) && subjectiveScoreDetailJsonArray.size() > 0) {
+            jsonObject.put("subjectiveScoreDetail", subjectiveScoreDetailJsonArray.toJSONString());
+        }
+        if (Objects.nonNull(markTagsJsonArray) && markTagsJsonArray.size() > 0) {
+            jsonObject.put("markTags", markTagsJsonArray.toJSONString());
+            System.out.println("studentCode markTags:" + this.studentCode);
+        }
+        if (!jsonObject.isEmpty()) {
+            this.syncData = jsonObject.toJSONString();
+        }
+    }
+
     public String getPath() {
         return path;
     }

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

@@ -8,7 +8,6 @@ import com.qmth.distributed.print.business.mapper.TBSyncTaskMapper;
 import com.qmth.distributed.print.business.service.TBSyncTaskService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
-import com.qmth.teachcloud.common.entity.TBTask;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.PushTypeEnum;
 import com.qmth.teachcloud.common.enums.TaskStatusEnum;
@@ -52,7 +51,9 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
     @Override
     public TBSyncTask savePushCommon(PushTypeEnum pushTypeEnum, Map map, SysUser sysUser) {
         SysUser requestUser = Objects.nonNull(sysUser) ? sysUser : (SysUser) ServletUtil.getRequestUser();
-
+//        SysUser requestUser = new SysUser();
+//        requestUser.setId(187219022012481536L);
+//        requestUser.setSchoolId(2L);
         TBSyncTask tbSyncTask = new TBSyncTask(pushTypeEnum,
                 TaskStatusEnum.INIT,
                 requestUser.getId(),

+ 3 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/push/AsyncPushTaskTemplate.java

@@ -51,9 +51,9 @@ public abstract class AsyncPushTaskTemplate {
     public static final String BEGIN_TITLE = "->开始准备处理同步的";
     public static final String EXCEPTION_TITLE = "->数据处理发生异常!";
     public static final String EXCEPTION_DATA = "错误信息:";
-    public static final String FINISH_TITLE = "->数据处理结束,共处理";
-    public static final String SUCCESS_TITLE = "->其中成功处理了";
-    public static final String FINISH_SIZE = "条数据";
+    public static final String FINISH_TITLE = "->数据处理结束,共处理";
+    public static final String SUCCESS_TITLE = "条数据,其中成功处理了";
+    public static final String FINISH_SIZE = "条数据";
     public static final String TXT_PREFIX = ".txt";
     public static final String EXCEPTION_CREATE_TXT_TITLE = "->创建导出日志时发生异常!";
 

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

@@ -2,28 +2,32 @@ package com.qmth.distributed.print.business.templete.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.qmth.distributed.print.business.service.DataSyncService;
-import com.qmth.distributed.print.business.service.impl.DataSyncServiceImpl;
+import com.qmth.distributed.print.business.entity.ExamPrintPlan;
+import com.qmth.distributed.print.business.entity.TSyncExamStudentScore;
+import com.qmth.distributed.print.business.service.ExamPrintPlanService;
+import com.qmth.distributed.print.business.service.TSyncExamStudentScoreService;
 import com.qmth.distributed.print.business.templete.service.PushLogicService;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.bean.params.PushBeforeRoleParam;
 import com.qmth.teachcloud.common.bean.params.UserPushParam;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicClazz;
+import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.userPush.BeforeJudgeEnum;
 import com.qmth.teachcloud.common.enums.userPush.SyncStatusEnum;
+import com.qmth.teachcloud.common.service.BasicClazzService;
+import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.service.SysUserRoleService;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.sync.StmmsUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -44,6 +48,18 @@ public class PushLogicServiceImpl implements PushLogicService {
     @Resource
     StmmsUtils stmmsUtils;
 
+    @Resource
+    SysOrgService sysOrgService;
+
+    @Resource
+    BasicClazzService basicClazzService;
+
+    @Resource
+    ExamPrintPlanService examPrintPlanService;
+
+    @Resource
+    TSyncExamStudentScoreService tSyncExamStudentScoreService;
+
     @Override
     public Map<String, Object> executeUserPushLogic(Map<String, Object> map) throws IllegalAccessException {
         int correct = 0;
@@ -80,38 +96,71 @@ public class PushLogicServiceImpl implements PushLogicService {
      * @throws IllegalAccessException
      */
     @Override
+    @Transactional
     public Map<String, Object> executeScorePushLogic(Map<String, Object> map) throws Exception {
-        SysUser sysUser = (SysUser) map.get(SystemConstant.SYS_USER);
+//        SysUser sysUser = (SysUser) map.get(SystemConstant.SYS_USER);
+        Long schoolId = 2L;
         Integer examId = (Integer) map.get("examId");
         String examCode = (String) map.get("examCode");
+        Long examIdLong = Long.parseLong(String.valueOf(examId));
+        List<TSyncExamStudentScore> tSyncExamStudentScoreList = null;
         try {
-            int totalCount = stmmsUtils.getStudentCount(sysUser.getSchoolId(), examId, examCode, null, null, null, null, null, null);
+            int totalCount = stmmsUtils.getStudentCount(schoolId, examId, examCode, null, null, null, null, null, null);
             log.info("云阅卷:考试成绩考生数量查询接口调用,返回数量:{}", totalCount);
-//            List<Map> paramList = new ArrayList<>();
             if (totalCount > 0) {
                 int pageSize = stmmsUtils.getDefaultPageSize();
                 int mod = totalCount % pageSize;
                 int pageNos = mod == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
-                for (int i = 1; i <= pageNos; i++) {
-                    List<Map> students = stmmsUtils.getStudentScore(sysUser.getSchoolId(), examId, examCode, null, null, null, null, null, null, i, pageSize);
+                Map<String, SysOrg> orgMap = new HashMap<>();
+                Map<String, BasicClazz> clazzMap = new HashMap<>();
+                Long semesterId = examPrintPlanService.getOne(new QueryWrapper<ExamPrintPlan>().lambda().eq(ExamPrintPlan::getThirdRelateId, examIdLong)).getId();
+                tSyncExamStudentScoreList = new ArrayList<>();
+                for (int i = 1; i <= 1; i++) {
+                    List<Map> students = stmmsUtils.getStudentScore(schoolId, examId, examCode, null, null, null, null, null, null, i, pageSize);
                     for (Map student : students) {
-                        String jxbId = String.valueOf(student.get("className"));
-                        String xhId = String.valueOf(student.get("studentCode"));
-                        String xmcj = String.valueOf(student.get("totalScore"));
-//                        Map<String, String> stringMap = new HashMap<>();
-//                        stringMap.put("jxb_id", jxbId);
-//                        stringMap.put("xh_id", xhId);
-//                        stringMap.put("xmcj", xmcj);
-//                        paramList.add(stringMap);
+                        //查学院id
+                        Long orgId = null;
+                        if (!orgMap.containsKey(student.get("college"))) {
+                            SysOrg sysOrg = sysOrgService.getOne(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getSchoolId, schoolId).eq(SysOrg::getName, student.get("college")));
+                            if (Objects.nonNull(sysOrg)) {
+                                orgId = sysOrg.getId();
+                                orgMap.put(sysOrg.getName(), sysOrg);
+                            }
+                        } else {
+                            orgId = orgMap.get(student.get("college")).getId();
+                        }
+
+                        //查班级和专业id
+                        Long clazzId = null, majorId = null;
+                        if (!clazzMap.containsKey(student.get("className"))) {
+                            BasicClazz basicClazz = basicClazzService.getOne(new QueryWrapper<BasicClazz>().lambda().eq(BasicClazz::getSchoolId, schoolId).eq(BasicClazz::getClazzName, student.get("className")));
+                            if (Objects.nonNull(basicClazz)) {
+                                clazzId = basicClazz.getId();
+                                majorId = basicClazz.getMajorId();
+                                clazzMap.put(basicClazz.getClazzName(), basicClazz);
+                            }
+                        } else {
+                            clazzId = clazzMap.get(student.get("className")).getId();
+                            majorId = clazzMap.get(student.get("className")).getMajorId();
+                        }
+                        student.put(SystemConstant.SCHOOL_ID, schoolId);
+                        student.put("semesterId", semesterId);
+                        student.put("orgId", orgId);
+                        student.put("clazzId", clazzId);
+                        student.put("userId", 2L);
+                        tSyncExamStudentScoreList.add(new TSyncExamStudentScore(student));
                     }
                 }
+                tSyncExamStudentScoreService.remove(new QueryWrapper<TSyncExamStudentScore>().lambda().eq(TSyncExamStudentScore::getSchoolId, schoolId).eq(TSyncExamStudentScore::getExamId, examIdLong));
+                tSyncExamStudentScoreService.saveOrUpdateBatch(tSyncExamStudentScoreList);
             }
             map.computeIfAbsent("count", v -> totalCount);
-            map.computeIfAbsent("correct", v -> totalCount);
+            List<TSyncExamStudentScore> finalTSyncExamStudentScoreList = tSyncExamStudentScoreList;
+            map.computeIfAbsent("correct", v -> finalTSyncExamStudentScoreList.size());
         } catch (Exception e) {
             log.info("云阅卷:接口调用失败:{}", e.getMessage());
             throw new RuntimeException("云阅卷:接口调用失败:" + e.getMessage());
         }
         return map;
     }
-}
+}

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

@@ -54,7 +54,7 @@ import java.util.Optional;
 @Api(tags = "成绩归档Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.sync}")
-//@Aac(auth = BOOL.FALSE, strict = BOOL.FALSE)
+@Aac(auth = BOOL.FALSE, strict = BOOL.FALSE)
 @Validated
 public class TSyncExamStudentScoreController {
 

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

@@ -78,7 +78,7 @@ public class StmmsUtils {
         }
     }
 
-    public boolean syncUser(UserPushParam userPushParam,Long schoolId) {
+    public boolean syncUser(UserPushParam userPushParam, Long schoolId) {
         String account = userPushParam.getAccount();
         String name = userPushParam.getName();
         String password = userPushParam.getPassword();
@@ -273,10 +273,11 @@ public class StmmsUtils {
 
     /**
      * 试卷结构查询接口
-     * @param schoolId 学校ID
-     * @param examId 考试ID
+     *
+     * @param schoolId    学校ID
+     * @param examId      考试ID
      * @param subjectCode 科目代码
-     * @param paperType 试卷编号
+     * @param paperType   试卷编号
      */
     public List<Map> queryPaperStructure(Long schoolId, String examId, String subjectCode, String paperType) {
         String hostUrl = dictionaryConfig.syncDataDomain().getHostUrl();
@@ -458,13 +459,13 @@ public class StmmsUtils {
     public int getStudentCount(Long schoolId, Integer examId, String examCode, String examNumber, String studentCode, String subjectCode, String college, String className, String teacher) {
         Map<String, Object> map = new HashMap<>();
         map.put("examId", validParam(String.valueOf(examId), null, true, "考试ID"));
-        map.put("examCode", validParam(examCode, null, false, "考试编码"));
-        map.put("examNumber", validParam(examNumber, null, false, "准考证号"));
-        map.put("studentCode", validParam(studentCode, null, false, "学号"));
-        map.put("subjectCode", validParam(subjectCode, null, false, "课程编码"));
-        map.put("college", validParam(college, null, false, "学院"));
-        map.put("className", validParam(className, null, false, "班级"));
-        map.put("teacher", validParam(teacher, null, false, "教师"));
+//        map.put("examCode", validParam(examCode, null, false, "考试编码"));
+//        map.put("examNumber", validParam(examNumber, null, false, "准考证号"));
+//        map.put("studentCode", validParam(studentCode, null, false, "学号"));
+//        map.put("subjectCode", validParam(subjectCode, null, false, "课程编码"));
+//        map.put("college", validParam(college, null, false, "学院"));
+//        map.put("className", validParam(className, null, false, "班级"));
+//        map.put("teacher", validParam(teacher, null, false, "教师"));
 
         String hostUrl = dictionaryConfig.syncDataDomain().getHostUrl();
         String studentCountUrl = dictionaryConfig.syncDataDomain().getStudentCountUrl();
@@ -506,15 +507,15 @@ public class StmmsUtils {
     public List<Map> getStudentScore(Long schoolId, Integer examId, String examCode, String examNumber, String studentCode, String subjectCode, String college, String className, String teacher, int pageNo, int pageSize) {
         Map<String, Object> map = new HashMap<>();
         map.put("examId", validParam(String.valueOf(examId), null, true, "考试ID"));
-        map.put("examCode", validParam(examCode, null, false, "考试编码"));
-        map.put("examNumber", validParam(examNumber, null, false, "准考证号"));
-        map.put("studentCode", validParam(studentCode, null, false, "学号"));
-        map.put("subjectCode", validParam(subjectCode, null, false, "课程编码"));
-        map.put("college", validParam(college, null, false, "学院"));
-        map.put("className", validParam(className, null, false, "班级"));
-        map.put("teacher", validParam(teacher, null, false, "教师"));
-        map.put("pageNumber", validParam(teacher, null, true, "页码"));
-        map.put("pageSize", validParam(teacher, null, true, "数量"));
+//        map.put("examCode", validParam(examCode, null, false, "考试编码"));
+//        map.put("examNumber", validParam(examNumber, null, false, "准考证号"));
+//        map.put("studentCode", validParam(studentCode, null, false, "学号"));
+//        map.put("subjectCode", validParam(subjectCode, null, false, "课程编码"));
+//        map.put("college", validParam(college, null, false, "学院"));
+//        map.put("className", validParam(className, null, false, "班级"));
+//        map.put("teacher", validParam(teacher, null, false, "教师"));
+        map.put("pageNumber", validParam(String.valueOf(pageNo), null, true, "页码"));
+        map.put("pageSize", validParam(String.valueOf(pageSize), null, true, "数量"));
 
         String hostUrl = dictionaryConfig.syncDataDomain().getHostUrl();
         String studentScoreUrl = dictionaryConfig.syncDataDomain().getStudentScoreUrl();