Explorar o código

合并dev2.1.0

caozixuan %!s(int64=3) %!d(string=hai) anos
pai
achega
c5536a3d50
Modificáronse 14 ficheiros con 255 adicións e 105 borrados
  1. 3 3
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java
  2. 3 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java
  3. 24 0
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/ReportCommonService.java
  4. 172 33
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/ReportCommonServiceImpl.java
  5. 3 3
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TBExamCourseServiceImpl.java
  6. 3 6
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TBExamStudentServiceImpl.java
  7. 6 6
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/templete/execute/AsyncDataCalculateTempleteService.java
  8. 3 11
      teachcloud-report/src/main/java/com/qmth/teachcloud/report/TeachcloudReportApplication.java
  9. 10 2
      teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/BasicDatasourceController.java
  10. 18 24
      teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/SysController.java
  11. 1 4
      teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/SysOrgController.java
  12. 3 5
      teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/WudaOpenApiController.java
  13. 5 5
      teachcloud-report/src/main/java/com/qmth/teachcloud/report/auth/TeachcloudReportAuthenticationService.java
  14. 1 1
      teachcloud-report/src/test/java/com/qmth/teachcloud/report/AnalyzeForStudentServiceTest.java

+ 3 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java

@@ -72,12 +72,12 @@ public interface SysUserService extends IService<SysUser> {
 
     /**
      * 根据外键查找教师信息
-     *
-     * @param schoolId    学校id
+     * @param schoolId 学校id
      * @param teacherName 教师名称
+     * @param teacherCode 教师编号
      * @return 学院数据
      */
-    SysUser findByForeignKey(Long schoolId, String teacherName);
+    SysUser findByForeignKey(Long schoolId, String teacherName,String teacherCode);
 
     /**
      * 临时-不鉴权保存用户 (默认创建用户角色为该学校管理员)

+ 3 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -452,10 +452,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     }
 
     @Override
-    public SysUser findByForeignKey(Long schoolId, String teacherName) {
+    public SysUser findByForeignKey(Long schoolId, String teacherName, String teacherCode) {
         List<SysUser> tbSchoolTeacherList = this.list(new QueryWrapper<SysUser>().lambda()
                 .eq(SysUser::getSchoolId, schoolId)
-                .eq(SysUser::getRealName, teacherName));
+                .eq(SysUser::getRealName, teacherName)
+                .eq(SysUser::getLoginName,teacherCode));
         SysRole sysRole = sysRoleService.getOne(new QueryWrapper<SysRole>().lambda().eq(SysRole::getType, RoleTypeEnum.TEACHER));
 //        tbSchoolTeacherList = tbSchoolTeacherList.stream().filter(e -> Arrays.asList(e.getRoleIds()).contains(sysRole.getId())).collect(Collectors.toList());
         if (tbSchoolTeacherList.size() != 1) {

+ 24 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/ReportCommonService.java

@@ -1,8 +1,11 @@
 package com.qmth.teachcloud.report.business.service;
 
+import com.qmth.teachcloud.common.entity.BasicAttachment;
+import com.qmth.teachcloud.common.enums.UploadFileEnum;
 import com.qmth.teachcloud.report.business.bean.result.*;
 import com.qmth.teachcloud.report.business.entity.TAExamCourse;
 import com.qmth.teachcloud.report.business.enums.SemesterEnum;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
@@ -116,4 +119,25 @@ public interface ReportCommonService {
      * @return
      */
     TeachCourseSurveyResult getTeachCourseSurveyInfo(SemesterEnum semester, Long examId, String courseCode);
+
+    /**
+     * 保存附件
+     *
+     * @param file file
+     * @param md5 md5
+     * @param type type
+     * @return 返回
+     */
+    public BasicAttachment saveAttachment(MultipartFile file, String md5, UploadFileEnum type);
+
+    /**
+     * 保存附件公用
+     *
+     * @param file file
+     * @param md5 md5
+     * @param type type
+     * @param objId objId
+     * @return 结果
+     */
+    public BasicAttachment saveAttachmentCommon(MultipartFile file, String md5, UploadFileEnum type, Long objId);
 }

+ 172 - 33
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/ReportCommonServiceImpl.java

@@ -1,10 +1,20 @@
 package com.qmth.teachcloud.report.business.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.google.gson.Gson;
+import com.itextpdf.text.pdf.PdfReader;
+import com.qmth.boot.api.exception.ApiException;
+import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicAttachment;
+import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.UploadFileEnum;
+import com.qmth.teachcloud.common.service.BasicAttachmentService;
+import com.qmth.teachcloud.common.util.FileStoreUtil;
 import com.qmth.teachcloud.common.util.JacksonUtil;
+import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.report.business.bean.result.*;
 import com.qmth.teachcloud.report.business.entity.*;
@@ -12,18 +22,24 @@ import com.qmth.teachcloud.report.business.enums.*;
 import com.qmth.teachcloud.report.business.service.*;
 import com.qmth.teachcloud.report.business.utils.AnalyzeScopeUtil;
 import com.qmth.teachcloud.report.business.utils.MathUtil;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.io.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
+import java.io.File;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.net.URLEncoder;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -74,12 +90,21 @@ public class ReportCommonServiceImpl implements ReportCommonService {
     @Resource
     TAExamCourseTeacherCollegeDifficultService taExamCourseTeacherCollegeDifficultService;
 
+    @Resource
+    private FileStoreUtil fileStoreUtil;
+
+    @Resource
+    private DictionaryConfig dictionaryConfig;
+
+    @Resource
+    BasicAttachmentService basicAttachmentService;
+
     /**
      * 学院学科报表查询科目信息
      *
-     * @param examId examId
+     * @param examId     examId
      * @param courseCode courseCode
-     * @param collegeId collegeId
+     * @param collegeId  collegeId
      * @return return
      */
     @Override
@@ -129,9 +154,9 @@ public class ReportCommonServiceImpl implements ReportCommonService {
     /**
      * 学院学科报表科目描述
      *
-     * @param examId examId
+     * @param examId     examId
      * @param courseCode courseCode
-     * @param collegeId collegeId
+     * @param collegeId  collegeId
      * @return return
      */
     @Override
@@ -234,10 +259,10 @@ public class ReportCommonServiceImpl implements ReportCommonService {
     /**
      * 开课学院分数段
      *
-     * @param examId examId
+     * @param examId     examId
      * @param courseCode courseCode
-     * @param collegeId collegeId
-     * @param filter filter
+     * @param collegeId  collegeId
+     * @param filter     filter
      * @return return
      */
     @Override
@@ -327,10 +352,10 @@ public class ReportCommonServiceImpl implements ReportCommonService {
     /**
      * 学院学科报表查询维度
      *
-     * @param examId examId
+     * @param examId     examId
      * @param courseCode courseCode
-     * @param collegeId collegeId
-     * @param teacherId teacherId
+     * @param collegeId  collegeId
+     * @param teacherId  teacherId
      * @return return
      */
     @Override
@@ -353,11 +378,8 @@ public class ReportCommonServiceImpl implements ReportCommonService {
             dimensionInfoDatasource = tbDimensionService.findDimensionByTeacherCollegeInfo(examId, courseCode, teacherId, collegeId);
             teacherLookSelf = true;
         }
-//        if (dimensionInfoDatasource.size() < 1) {
-//            throw ExceptionResultEnum.DATA_ERROR.exception();
-//        }
         List<ModuleDimensionResult> dimensionAnalyzeList = new ArrayList<>();
-        if (dimensionInfoDatasource != null && dimensionInfoDatasource.size() > 0){
+        if (dimensionInfoDatasource != null && dimensionInfoDatasource.size() > 0) {
             Set<String> moduleSet = dimensionInfoDatasource.stream().map(CourseDimensionResult::getModule).collect(Collectors.toSet()); // 考查模块集合
             for (String module : moduleSet) {
                 List<CourseDimensionResult> dimensionInfoList = dimensionInfoDatasource
@@ -380,13 +402,13 @@ public class ReportCommonServiceImpl implements ReportCommonService {
                     String schScoreRate = null;
                     String colScoreRate = null;
                     String teaScoreRate = null;
-                    if (deanLookCollege){
+                    if (deanLookCollege) {
                         schScoreRate = String.valueOf(referenceScoreRate);
                         colScoreRate = String.valueOf(myScoreRate);
-                    }else if (deanLookTeacher){
+                    } else if (deanLookTeacher) {
                         schScoreRate = String.valueOf(referenceScoreRate);
                         teaScoreRate = String.valueOf(myScoreRate);
-                    }else if (teacherLookSelf){
+                    } else if (teacherLookSelf) {
                         colScoreRate = String.valueOf(referenceScoreRate);
                         teaScoreRate = String.valueOf(myScoreRate);
                     }
@@ -401,10 +423,10 @@ public class ReportCommonServiceImpl implements ReportCommonService {
     /**
      * 查找题目相关
      *
-     * @param examId examId
+     * @param examId     examId
      * @param courseCode courseCode
-     * @param collegeId collegeId
-     * @param teacherId teacherId
+     * @param collegeId  collegeId
+     * @param teacherId  teacherId
      * @return return
      */
     @Override
@@ -422,7 +444,7 @@ public class ReportCommonServiceImpl implements ReportCommonService {
             answerDetailDatasource = taExamCourseTeacherCollegeDifficultService.findValidAnswerDetail(examId, courseCode, teacherId, collegeId);
         }
         List<PaperTypeResult> questionInfoList = new ArrayList<>();
-        if (answerDetailDatasource != null && answerDetailDatasource.size() > 0){
+        if (answerDetailDatasource != null && answerDetailDatasource.size() > 0) {
             Set<String> paperTypeList = answerDetailDatasource.stream().map(CellResult::getPaperType).collect(Collectors.toSet());
             for (String paperType : paperTypeList) {
                 questionInfoList.add(new PaperTypeResult(paperType, answerDetailDatasource.stream().filter(e -> Objects.equals(paperType, e.getPaperType())).collect(Collectors.toList())));
@@ -434,9 +456,9 @@ public class ReportCommonServiceImpl implements ReportCommonService {
     /**
      * 查找老师信息
      *
-     * @param examId examId
+     * @param examId     examId
      * @param courseCode courseCode
-     * @param collegeId collegeId
+     * @param collegeId  collegeId
      * @return return
      */
     @Override
@@ -509,7 +531,7 @@ public class ReportCommonServiceImpl implements ReportCommonService {
             for (String dimensionCode : knowledgeDimensionSort) {
                 String dimensionName;
                 List<String> nameTwoList = dimensionDataSource.stream()
-                        .filter(e -> dimensionCode.equals(e.getCodeSecond()))
+                        .filter(e -> dimensionCode.equals(e.getCodeSecond()) && "知识".equals(e.getDimensionType()))
                         .map(TBDimension::getNameSecond).collect(Collectors.toList());
                 if (nameTwoList.size() < 1) {
                     List<String> tmpList = dimensionDataSource.stream()
@@ -533,7 +555,7 @@ public class ReportCommonServiceImpl implements ReportCommonService {
                         .map(TBDimension::getNameSecond).collect(Collectors.toList());
                 if (nameTwoList.size() < 1) {
                     List<String> tmpList = dimensionDataSource.stream()
-                            .filter(e -> dimensionCode.equals(e.getCodePrimary()))
+                            .filter(e -> dimensionCode.equals(e.getCodePrimary()) && "能力".equals(e.getDimensionType()))
                             .map(TBDimension::getNamePrimary).collect(Collectors.toList());
                     if (tmpList.size() == 0) {
                         continue;
@@ -552,10 +574,10 @@ public class ReportCommonServiceImpl implements ReportCommonService {
     /**
      * 取总体平均分
      *
-     * @param schoolId schoolId
+     * @param schoolId   schoolId
      * @param courseCode courseCode
-     * @param examId examId
-     * @param filter filter
+     * @param examId     examId
+     * @param filter     filter
      * @return 结果
      */
     @Override
@@ -573,9 +595,7 @@ public class ReportCommonServiceImpl implements ReportCommonService {
         }
         if (filter) {
             QueryWrapper<TBExamCourse> tbExamCourseQueryWrapper = new QueryWrapper<>();
-            if (Objects.nonNull(schoolId)) {
-                tbExamCourseQueryWrapper.lambda().eq(TBExamCourse::getSchoolId, schoolId);
-            }
+            tbExamCourseQueryWrapper.lambda().eq(TBExamCourse::getSchoolId, schoolId);
             if (Objects.nonNull(examId)) {
                 tbExamCourseQueryWrapper.lambda().eq(TBExamCourse::getExamId, examId);
             }
@@ -616,8 +636,8 @@ public class ReportCommonServiceImpl implements ReportCommonService {
     /**
      * 获取开课课程考试课程总览
      *
-     * @param semester semester
-     * @param examId examId
+     * @param semester   semester
+     * @param examId     examId
      * @param courseCode courseCode
      * @return return
      */
@@ -638,4 +658,123 @@ public class ReportCommonServiceImpl implements ReportCommonService {
         teachCourseSurveyResult.setInspectCollegeNames(taExamCourse.getInspectCollegeNames());
         return teachCourseSurveyResult;
     }
+
+    @Override
+    @Transactional
+    public BasicAttachment saveAttachment(MultipartFile file, String md5, UploadFileEnum type) {
+        return saveAttachmentCommon(file, md5, type, null);
+    }
+
+    /**
+     * 保存附件公用
+     *
+     * @param file
+     * @param md5
+     * @param type
+     * @param objId
+     * @return
+     */
+    @Override
+    public BasicAttachment saveAttachmentCommon(MultipartFile file, String md5, UploadFileEnum type, Long objId) {
+        if (Objects.isNull(type)) {
+            throw ExceptionResultEnum.ATTACHMENT_TYPE_EMPTY.exception();
+        }
+        BasicAttachment basicAttachment = null;
+        try {
+            // TODO: 2022/4/14 临时测试生成user
+//            SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+            SysUser requestUser = new SysUser();
+            requestUser.setId(1L);
+
+
+            int temp = file.getOriginalFilename().lastIndexOf(".");
+            String fileName = file.getOriginalFilename().substring(0, temp);
+            String format = file.getOriginalFilename().substring(temp, file.getOriginalFilename().length());
+            List<String> attachmentTypeList = dictionaryConfig.sysDomain().getAttachmentType();
+            if (Objects.nonNull(format)) {
+                long count = attachmentTypeList.stream().filter(s -> format.equalsIgnoreCase(s)).count();
+                if (count == 0) {
+                    throw ExceptionResultEnum.ERROR.exception("文件格式只能为" + attachmentTypeList.toString());
+                }
+            }
+            int attachmentLength = dictionaryConfig.sysDomain().getAttachmentLength().intValue();
+            if (Objects.nonNull(fileName) && fileName.length() > attachmentLength) {
+                throw ExceptionResultEnum.ERROR.exception("文件名长度不能超过" + attachmentLength + "个字符");
+            }
+            long size = file.getSize();
+            BigDecimal b = new BigDecimal(size);
+            BigDecimal num = new BigDecimal(1024);
+            b = b.divide(num, 2, BigDecimal.ROUND_HALF_UP).divide(num, 2, BigDecimal.ROUND_HALF_UP)
+                    .setScale(2, BigDecimal.ROUND_HALF_UP);
+            double attachmentSize = dictionaryConfig.sysDomain().getAttachmentSize().doubleValue();
+            if (b.doubleValue() > attachmentSize) {
+                throw ExceptionResultEnum.ERROR.exception("文件大小不能超过" + attachmentSize + "MB");
+            }
+            log.info("fileName:{}", fileName);
+            log.info("format:{}", format);
+            log.info("size:{}", b);
+            log.info("getOriginalFilename:{}", file.getOriginalFilename());
+            String fileMd5 = DigestUtils.md5Hex(file.getBytes());
+            log.info("fileMd5:{}", fileMd5);
+            log.info("md5:{}", md5);
+            if (!Objects.equals(fileMd5, md5)) {
+                throw ExceptionResultEnum.MD5_EQUALS_FALSE.exception();
+            }
+            boolean oss = dictionaryConfig.sysDomain().isOss();
+            LocalDateTime nowTime = LocalDateTime.now();
+            StringJoiner stringJoiner = new StringJoiner("");
+            if (!oss) {
+                stringJoiner.add(SystemConstant.TEMP_FILES_DIR).add(File.separator);
+            }
+            stringJoiner.add(type.getTitle()).add(File.separator);
+//            else if (type == UploadFileEnum.PAPER) {//试卷需要单独
+//                stringJoiner.add(type.getTitle()).add(File.separator);
+//            } else if (type == UploadFileEnum.UPLOAD) {
+//                stringJoiner.add(type.getTitle()).add(File.separator);
+//            }
+            stringJoiner.add(String.valueOf(nowTime.getYear())).add(File.separator)
+                    .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
+                    .add(String.format("%02d", nowTime.getDayOfMonth()));
+
+            JSONObject jsonObject = new JSONObject();
+            stringJoiner.add(File.separator).add(SystemConstant.getUuid()).add(format);
+            if (oss) {//上传至oss\
+                String dirName = stringJoiner.toString().replaceAll("\\\\", "/");
+                fileStoreUtil.ossUpload(dirName, file.getInputStream(), md5, type.getFssType());
+
+                jsonObject.put(SystemConstant.TYPE, SystemConstant.OSS);
+                jsonObject.put(SystemConstant.PATH, dirName);
+            } else {//上传至服务器
+                File finalFile = new File(stringJoiner.toString());
+                if (!finalFile.exists()) {
+                    finalFile.getParentFile().mkdirs();
+                    finalFile.createNewFile();
+                }
+                FileUtils.copyInputStreamToFile(file.getInputStream(), finalFile);
+                jsonObject.put(SystemConstant.TYPE, SystemConstant.LOCAL);
+                jsonObject.put(SystemConstant.PATH, stringJoiner.toString());
+            }
+            jsonObject.put(SystemConstant.UPLOAD_TYPE, type);
+
+            basicAttachment = new BasicAttachment(jsonObject.toJSONString(), fileName, format, b, fileMd5, requestUser.getId(), objId);
+            basicAttachmentService.save(basicAttachment);
+
+            // pdf需要读取总页数
+            Integer pages = 0;
+            if (".pdf".equals(format)) {
+                PdfReader pdfReader = new PdfReader(file.getBytes());
+                pages = pdfReader.getNumberOfPages();
+            }
+            basicAttachment.setPages(pages);
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            basicAttachmentService.deleteAttachment(basicAttachment);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return basicAttachment;
+    }
 }

+ 3 - 3
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TBExamCourseServiceImpl.java

@@ -9,7 +9,7 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import com.qmth.teachcloud.common.service.BasicCourseService;
-import com.qmth.teachcloud.common.service.CacheService;
+import com.qmth.teachcloud.common.service.CommonCacheService;
 import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.report.business.bean.result.TBExamCourseResult;
@@ -54,7 +54,7 @@ public class TBExamCourseServiceImpl extends ServiceImpl<TBExamCourseMapper, TBE
     TBExaminationRelationService tbExaminationRelationService;
 
     @Resource
-    CacheService cacheService;
+    CommonCacheService commonCacheService;
 
     @Override
     public boolean verifyExamCourseCantRun(Long examId, Long schoolId, String courseCode, String courseName) {
@@ -127,7 +127,7 @@ public class TBExamCourseServiceImpl extends ServiceImpl<TBExamCourseMapper, TBE
     public List<TBExamCourseResult> findCourseList(Long schoolId, Long examId, boolean inspect, Boolean absent, Boolean current, PublishStatusEnum status) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         List<Long> collegeIds = sysOrgService.findCollegeIds(sysUser.getOrgId());
-        AuthBean authBean = cacheService.userAuthCache(sysUser.getId());
+        AuthBean authBean = commonCacheService.userAuthCache(sysUser.getId());
         //院长开课学院不过滤,学校管理员不过滤,(院长考查学院过滤,教务老师过滤)
         boolean filter = true;
         if (Objects.nonNull(authBean) && Objects.nonNull(authBean.getRoleList()) && authBean.getRoleList().get(0).getType() == RoleTypeEnum.SCHOOL_ADMIN) {

+ 3 - 6
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TBExamStudentServiceImpl.java

@@ -10,14 +10,12 @@ import com.google.common.collect.Lists;
 import com.qmth.teachcloud.common.bean.auth.AuthBean;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicCourse;
-import com.qmth.teachcloud.common.entity.SysRole;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import com.qmth.teachcloud.common.service.BasicCourseService;
-import com.qmth.teachcloud.common.service.CacheService;
+import com.qmth.teachcloud.common.service.CommonCacheService;
 import com.qmth.teachcloud.common.service.SysOrgService;
-import com.qmth.teachcloud.common.service.SysRoleService;
 import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.common.util.excel.ExcelError;
@@ -33,7 +31,6 @@ import com.qmth.teachcloud.report.business.service.TAExamCourseRecordDioService;
 import com.qmth.teachcloud.report.business.service.TBExamStudentService;
 import com.qmth.teachcloud.report.business.utils.EncrypAES;
 import org.apache.commons.lang3.StringUtils;
-import org.checkerframework.checker.units.qual.A;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -94,7 +91,7 @@ public class TBExamStudentServiceImpl extends ServiceImpl<TBExamStudentMapper, T
     SysOrgService sysOrgService;
 
     @Resource
-    CacheService cacheService;
+    CommonCacheService commonCacheService;
 
     @Resource
     TAExamCourseRecordDioService taExamCourseRecordDioService;
@@ -131,7 +128,7 @@ public class TBExamStudentServiceImpl extends ServiceImpl<TBExamStudentMapper, T
     @Override
     public List<TBExamStudentResult> selectInspectCollegeList(Long schoolId, Long examId, String courseCode, Boolean absent, Boolean current, PublishStatusEnum status) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        AuthBean authBean = cacheService.userAuthCache(sysUser.getId());
+        AuthBean authBean = commonCacheService.userAuthCache(sysUser.getId());
         if (Objects.nonNull(authBean) && Objects.nonNull(authBean.getRoleList()) && authBean.getRoleList().get(0).getType() == RoleTypeEnum.TEACHER) {
             List<Long> collegeIds = sysOrgService.findCollegeIds(sysUser.getOrgId());
             if (Objects.nonNull(collegeIds) && collegeIds.size() > 0) {

+ 6 - 6
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/templete/execute/AsyncDataCalculateTempleteService.java

@@ -5,7 +5,7 @@ import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.TBTask;
 import com.qmth.teachcloud.common.enums.TaskResultEnum;
 import com.qmth.teachcloud.common.enums.TaskStatusEnum;
-import com.qmth.teachcloud.common.service.CacheService;
+import com.qmth.teachcloud.common.service.CommonCacheService;
 import com.qmth.teachcloud.common.service.TBTaskService;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
@@ -36,7 +36,7 @@ public class AsyncDataCalculateTempleteService extends AsyncCalculateTaskTemplet
     @Resource
     private AnalyzeForReportService analyzeForReportService;
     @Resource
-    private CacheService cacheService;
+    private CommonCacheService commonCacheService;
     @Resource
     private TBExamCourseService tbExamCourseService;
 
@@ -72,10 +72,10 @@ public class AsyncDataCalculateTempleteService extends AsyncCalculateTaskTemplet
             tbTask.setStatus(TaskStatusEnum.FINISH);
             tbTaskService.updateById(tbTask);
             if (Objects.isNull(exception)){
-                cacheService.removeExamStudentReportCache();
-                cacheService.removeCollegeDeanCache();
-                cacheService.removeCollegeCourseCache();
-                cacheService.removeSurveyTeacherViewCache();
+                commonCacheService.removeExamStudentReportCache();
+                commonCacheService.removeCollegeDeanCache();
+                commonCacheService.removeCollegeCourseCache();
+                commonCacheService.removeSurveyTeacherViewCache();
             }
         }
         return ResultUtil.ok(map);

+ 3 - 11
teachcloud-report/src/main/java/com/qmth/teachcloud/report/TeachcloudReportApplication.java

@@ -1,7 +1,6 @@
 package com.qmth.teachcloud.report;
 
 import com.qmth.boot.core.security.service.CustomizeAuthorizationService;
-import com.qmth.teachcloud.common.threadPool.MyThreadPool;
 import com.qmth.teachcloud.report.auth.TeachcloudReportAuthenticationService;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
@@ -9,17 +8,15 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Primary;
-import org.springframework.core.task.TaskExecutor;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 import javax.annotation.Resource;
 
 @SpringBootApplication(scanBasePackages = "com.qmth.*")
-@MapperScan({"com.qmth.distributed.print.business.mapper", "com.qmth.teachcloud.report.business.mapper", "com.qmth.teachcloud.common.mapper"})
+@MapperScan({"com.qmth.distributed.print.business.mapper","com.qmth.teachcloud.report.business.mapper","com.qmth.teachcloud.common.mapper"})
 //主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中,做过web开发的同学一定都有用过@Controller,@Service,@Repository注解,查看其源码你会发现,他们中有一个共同的注解@Component,没错@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中
-@EntityScan(basePackages = {"com.qmth.distributed.print.business.entity", "com.qmth.teachcloud.report.business.entity", "com.qmth.teachcloud.common.entity"})
+@EntityScan(basePackages = {"com.qmth.distributed.print.business.entity","com.qmth.teachcloud.report.business.entity","com.qmth.teachcloud.common.entity"}) // 用来扫描和发现指定包及其子包中的Entity定义
 // 用来扫描和发现指定包及其子包中的Entity定义
 @EnableTransactionManagement // spring开启事务支持
 @EnableAsync // 开启异步任务
@@ -39,10 +36,5 @@ public class TeachcloudReportApplication {
             registration.setDefault(teachcloudReportAuthenticationService);
         };
     }
-
-    @Primary
-    @Bean
-    public TaskExecutor primaryTaskExecutor() {
-        return new MyThreadPool();
-    }
 }
+

+ 10 - 2
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/BasicDatasourceController.java

@@ -526,6 +526,8 @@ public class BasicDatasourceController {
                     return Stream.of(map);
                 }).distinct().collect(Collectors.toList());
 
+        Map<String,String> teacherUserMap = new HashMap<>();
+
         for (Map<String, String> teacherPackage : teacherList) {
 
             String teacherInfo = teacherPackage.get("teacherInfo");
@@ -561,7 +563,7 @@ public class BasicDatasourceController {
                     .filter(e -> teacherName.equals(e.getTeacherName()))
                     .distinct().collect(Collectors.toList());
 
-            // TODO: 2021/7/26 研究下面臃肿且被考务数据限制死的的教师机构获取方式是否可以使用上面的替代 
+            // TODO: 2021/7/26 研究下面臃肿且被考务数据限制死的的教师机构获取方式是否可以使用上面的替代
             Long orgId = null;
             if (tbExaminationRelations.size() == 0) {
                 if (!SystemConstant.strNotNull(teacherCode)) {
@@ -590,6 +592,9 @@ public class BasicDatasourceController {
                 }
                 orgId = sysOrgList.get(0).getId();
             }
+            if (!teacherUserMap.containsKey(teacherName)){
+                teacherUserMap.put(teacherName,teacherCode);
+            }
 
             TBSchoolTeacherDto tbSchoolTeacherDto = new TBSchoolTeacherDto();
             tbSchoolTeacherDto.setSchoolId(schoolId);
@@ -635,6 +640,9 @@ public class BasicDatasourceController {
             Map<String, String> teacherMap = this.disposeTeacherInfo(teacher);
             String teacherName = teacherMap.get("teacherName");
             String teacherCode = teacherMap.get("teacherCode");
+            if (!SystemConstant.strNotNull(teacherCode)){
+                teacherCode = teacherUserMap.get(teacherName);
+            }
             // 缺考状态 2 -> 缺考 ; 3 -> 违纪
             int status = (int) map.get(ExamCloudDataEnum.STATUS.getName()); //学生考试状态
             String totalScore = String.valueOf(map.get(ExamCloudDataEnum.TOTAL_SCORE.getName())); //考生总分
@@ -695,7 +703,7 @@ public class BasicDatasourceController {
                 // 获取关联的基础表主键
                 SysOrg tbSchoolCollege = sysOrgService.findByForeignKey(schoolId, college, college);
                 TBSchoolClazz tbSchoolClazz = tbSchoolClazzService.findByForeignKey(schoolId, className, className);
-                SysUser tbSchoolTeacher = sysUserService.findByForeignKey(schoolId, teacherName);
+                SysUser tbSchoolTeacher = sysUserService.findByForeignKey(schoolId, teacherName,teacherCode);
 
                 TBExamStudent tbExamStudent = new TBExamStudent();
                 Long examStudentId = SystemConstant.getDbUuid();

+ 18 - 24
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/SysController.java

@@ -5,13 +5,7 @@ import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.exception.ApiException;
-import com.qmth.distributed.print.business.bean.params.LoginParam;
-import com.qmth.distributed.print.business.bean.result.EditResult;
-import com.qmth.distributed.print.business.entity.BasicVerifyCode;
-import com.qmth.distributed.print.business.service.BasicVerifyCodeService;
-import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.teachcloud.common.bean.auth.AuthBean;
-import com.qmth.teachcloud.common.bean.dto.MenuDto;
 import com.qmth.teachcloud.common.bean.result.LoginResult;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -22,11 +16,13 @@ import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.report.business.bean.params.LoginParam;
+import com.qmth.teachcloud.report.business.bean.result.EditResult;
+import com.qmth.teachcloud.report.business.service.ReportCommonService;
 import io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
@@ -47,17 +43,17 @@ import java.util.stream.Collectors;
 public class SysController {
     private final static Logger log = LoggerFactory.getLogger(SysController.class);
 
-    @Autowired
+    @Resource
     private SysUserService sysUserService;
 
-    @Autowired
+    @Resource
     private BasicVerifyCodeService basicVerifyCodeService;
 
-    @Autowired
+    @Resource
     private DictionaryConfig dictionaryConfig;
 
     @Resource
-    CacheService cacheService;
+    CommonCacheService commonCacheService;
 
     @Resource
     TBSessionService tbSessionService;
@@ -66,7 +62,7 @@ public class SysController {
     RedisUtil redisUtil;
 
     @Resource
-    PrintCommonService printCommonService;
+    ReportCommonService reportCommonService;
 
     @Resource
     TBTaskService tbTaskService;
@@ -74,7 +70,7 @@ public class SysController {
     @Resource
     BasicAttachmentService basicAttachmentService;
 
-    @Autowired
+    @Resource
     private SysUserRoleService sysUserRoleService;
 
     @Resource
@@ -100,7 +96,7 @@ public class SysController {
 
         BasicSchool basicSchool = null;
         if (!Objects.equals(login.getSchoolCode().toUpperCase(), RoleTypeEnum.ADMIN.name())) {
-            basicSchool = cacheService.schoolCache(login.getSchoolCode());
+            basicSchool = commonCacheService.schoolCache(login.getSchoolCode());
             if (Objects.isNull(basicSchool)) {
                 throw ExceptionResultEnum.SCHOOL_NO_DATA.exception();
             }
@@ -170,14 +166,14 @@ public class SysController {
     public Result logout() {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         TBSession tbSession = (TBSession) ServletUtil.getRequestSession();
-        AuthBean authBean = cacheService.userAuthCache(sysUser.getId());
+        AuthBean authBean = commonCacheService.userAuthCache(sysUser.getId());
         if (Objects.isNull(authBean)) {
             throw ExceptionResultEnum.NOT_LOGIN.exception();
         }
         tbSessionService.removeById(tbSession.getId());
         redisUtil.deleteUserSession(tbSession.getId());
-        cacheService.removeUserCache(sysUser.getId());
-        cacheService.removeUserAuthCache(sysUser.getId());
+        commonCacheService.removeUserCache(sysUser.getId());
+        commonCacheService.removeUserAuthCache(sysUser.getId());
         return ResultUtil.ok(new EditResult(sysUser.getId()));
     }
 
@@ -195,7 +191,7 @@ public class SysController {
         String password = loginParam.getPassword();
         QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
         if (StringUtils.isNotBlank(loginParam.getSchoolCode())) {
-            BasicSchool basicSchool = cacheService.schoolCache(loginParam.getSchoolCode());
+            BasicSchool basicSchool = commonCacheService.schoolCache(loginParam.getSchoolCode());
             wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId());
         }
         wrapper.lambda().eq(SysUser::getLoginName, loginName);
@@ -211,7 +207,7 @@ public class SysController {
         if (Objects.isNull(mobileNumber)) {
             throw ExceptionResultEnum.ERROR.exception("用户未绑定手机号码");
         }
-        basicVerifyCodeService.sendVeirfyCode(mobileNumber, user.getId());
+        basicVerifyCodeService.sendVeirfyCode(mobileNumber, user);
         return ResultUtil.ok(mobileNumber, "");
     }
 
@@ -221,7 +217,7 @@ public class SysController {
     @Aac(auth = BOOL.FALSE)
     public Result queryBySchoolCode(@ApiParam(value = "机构code", required = true) @RequestParam String code) {
         if (!Objects.equals(code.toUpperCase(), RoleTypeEnum.ADMIN.name())) {
-            BasicSchool basicSchool = cacheService.schoolCache(code);
+            BasicSchool basicSchool = commonCacheService.schoolCache(code);
             if (Objects.isNull(basicSchool)) {
                 throw ExceptionResultEnum.SCHOOL_NO_DATA.exception();
             }
@@ -245,7 +241,7 @@ public class SysController {
                              @ApiParam(value = "上传文件类型", required = true) @RequestParam UploadFileEnum type) {
         BasicAttachment basicAttachment = null;
         try {
-            basicAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), type);
+            basicAttachment = reportCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), type);
             if (Objects.isNull(basicAttachment)) {
                 throw ExceptionResultEnum.ATTACHMENT_ERROR.exception();
             }
@@ -306,8 +302,7 @@ public class SysController {
     @ApiOperation(value = "查询用户权限")
     @RequestMapping(value = "/get_menu", method = RequestMethod.POST)
     public Result getMenu() {
-        List<MenuDto> list = sysUserRoleService.listByUserId();
-        return ResultUtil.ok(list);
+        return ResultUtil.ok(sysUserRoleService.listByUserId());
     }
 
     @ApiOperation(value = "获取服务器时间")
@@ -316,5 +311,4 @@ public class SysController {
     public Result getSystemTime() {
         return ResultUtil.ok(System.currentTimeMillis());
     }
-
 }

+ 1 - 4
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/SysOrgController.java

@@ -34,9 +34,6 @@ public class SysOrgController {
     @Resource
     SysOrgService sysOrgService;
 
-    @Resource
-    BasicCourseService basicCourseService;
-
     /**
      * 查询机构树
      *
@@ -45,7 +42,7 @@ public class SysOrgController {
     @ApiOperation(value = "查询")
     @RequestMapping(value = "/list", method = RequestMethod.POST)
     public Result list() {
-        List<OrgDto> orgDtoList = sysOrgService.listOrgTree();
+        List<OrgDto> orgDtoList = sysOrgService.listOrgTree(null);
         return ResultUtil.ok(orgDtoList);
     }
 

+ 3 - 5
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/WudaOpenApiController.java

@@ -14,7 +14,7 @@ import com.qmth.teachcloud.common.entity.BasicSchool;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.AppSourceEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.common.service.CacheService;
+import com.qmth.teachcloud.common.service.CommonCacheService;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.util.JacksonUtil;
@@ -22,7 +22,6 @@ import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.report.business.cache.WhuUserAuthCacheUtil;
 import com.qmth.teachcloud.report.business.service.ReportCommonService;
-import com.qmth.teachcloud.report.business.utils.AesUtil;
 import com.qmth.teachcloud.report.business.utils.EncrypAES;
 import io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
@@ -44,7 +43,6 @@ import java.net.URLEncoder;
 import java.security.NoSuchAlgorithmException;
 import java.security.Principal;
 import java.text.MessageFormat;
-import java.util.Base64;
 import java.util.Map;
 import java.util.Objects;
 
@@ -58,7 +56,7 @@ public class WudaOpenApiController {
     DictionaryConfig dictionaryConfig;
 
     @Resource
-    CacheService cacheService;
+    CommonCacheService commonCacheService;
 
     @Resource
     SysUserService sysUserService;
@@ -92,7 +90,7 @@ public class WudaOpenApiController {
             log.info("test-stu-map:{}", JSON.toJSONString(map));
             log.info("test-stu-cn:{}", cn);
         }
-        BasicSchool basicSchool = cacheService.schoolCache(SystemConstant.SCHOOL_CODE);
+        BasicSchool basicSchool = commonCacheService.schoolCache(SystemConstant.SCHOOL_CODE);
         String testUrl = dictionaryConfig.sysDomain().getReportUrl() + basicSchool.getId() + "/" + uid + "/" + cn;
         log.info("test-stu-testUrl:{}", testUrl);
         String encoderUid = EncrypAES.encrypt(uid);

+ 5 - 5
teachcloud-report/src/main/java/com/qmth/teachcloud/report/auth/TeachcloudReportAuthenticationService.java

@@ -12,7 +12,7 @@ import com.qmth.teachcloud.common.entity.TBSession;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.PrivilegePropertyEnum;
 import com.qmth.teachcloud.common.enums.RoleTypeEnum;
-import com.qmth.teachcloud.common.service.CacheService;
+import com.qmth.teachcloud.common.service.CommonCacheService;
 import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.slf4j.Logger;
@@ -31,7 +31,7 @@ public class TeachcloudReportAuthenticationService implements AuthorizationServi
     private final static Logger log = LoggerFactory.getLogger(TeachcloudReportAuthenticationService.class);
 
     @Resource
-    CacheService cacheService;
+    CommonCacheService commonCacheService;
 
     @Resource
     RedisUtil redisUtil;
@@ -67,7 +67,7 @@ public class TeachcloudReportAuthenticationService implements AuthorizationServi
                 throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
             }
             Long userId = Long.parseLong(tbSession.getIdentity());
-            SysUser sysUser = cacheService.userCache(userId);
+            SysUser sysUser = commonCacheService.userCache(userId);
             HttpServletRequest request = ServletUtil.getRequest();
             HttpServletResponse response = ServletUtil.getResponse();
             request.setAttribute(SystemConstant.SESSION, tbSession);
@@ -105,7 +105,7 @@ public class TeachcloudReportAuthenticationService implements AuthorizationServi
                                   HttpServletRequest request,
                                   HttpServletResponse response) {
         //验证权限
-        AuthBean authBean = type.contains(SystemConstant.USER_OAUTH_CACHE) ? authBean = cacheService.userAuthCache(userId) : null;
+        AuthBean authBean = type.contains(SystemConstant.USER_OAUTH_CACHE) ? authBean = commonCacheService.userAuthCache(userId) : null;
         if (Objects.isNull(authBean)) {
             throw ExceptionResultEnum.ROLE_ENABLE_AUTHORIZATION.exception();
         }
@@ -118,7 +118,7 @@ public class TeachcloudReportAuthenticationService implements AuthorizationServi
             return true;
         }
         //系统公用接口不拦截
-        List<String> sysUrls = cacheService.privilegeUrlCache(PrivilegePropertyEnum.SYS);
+        Set<String> sysUrls = commonCacheService.privilegeUrlCache(PrivilegePropertyEnum.SYS);
         int sysCount = Objects.nonNull(sysUrls) ? (int) sysUrls.stream().filter(s -> s.equalsIgnoreCase(path)).count() : 0;
         if (sysCount > 0) {
             return true;

+ 1 - 1
teachcloud-report/src/test/java/com/qmth/teachcloud/report/AnalyzeForStudentServiceTest.java

@@ -52,7 +52,7 @@ public class AnalyzeForStudentServiceTest {
     public void analyzePointScoreRate() throws Exception {
         Long examId = 1L;
         String courseCode = "1013";
-        analyzeForReportService.AnalyzePointScoreRate(examId,courseCode);
+        analyzeForReportService.buildAnalyzePointScoreRate(examId,courseCode);
     }
 
     @Test