xiaofei před 6 měsíci
rodič
revize
6535d0b18a

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

@@ -2185,10 +2185,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Override
     public List<TaskPrintHouseDto> listPrintHouse() {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        QueryWrapper<SysOrg> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(SysOrg::getSchoolId, schoolId)
-                .eq(SysOrg::getType, OrgTypeEnum.PRINTING_HOUSE);
-        List<SysOrg> sysOrgList = sysOrgService.list(queryWrapper);
+        List<SysOrg> sysOrgList = sysOrgService.listPrintHouse(schoolId, OrgTypeEnum.PRINTING_HOUSE);
         return sysOrgList.stream().map(m -> {
             TaskPrintHouseDto taskPrintHouseDto = new TaskPrintHouseDto();
             taskPrintHouseDto.setPrintHouseId(m.getId());

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.common.bean.dto.OrgDto;
 import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.OrgTypeEnum;
 import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -181,4 +182,6 @@ public interface SysOrgService extends IService<SysOrg> {
     List<SysOrg> getSecondOrg(Long schoolId, String name);
 
     boolean delete(Long id);
+
+    List<SysOrg> listPrintHouse(Long schoolId, OrgTypeEnum type);
 }

+ 8 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -578,6 +578,14 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         return this.removeById(id);
     }
 
+    @Override
+    public List<SysOrg> listPrintHouse(Long schoolId, OrgTypeEnum type) {
+        QueryWrapper<SysOrg> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(SysOrg::getSchoolId, schoolId)
+                .eq(SysOrg::getType, OrgTypeEnum.PRINTING_HOUSE);
+        return this.list(queryWrapper);
+    }
+
     /**
      * 根据子机构id深度优先搜索其父机构们
      *

+ 17 - 11
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -206,7 +206,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Transactional
     @Override
     public LoginResult updatePassword(SysUser user) throws NoSuchAlgorithmException {
-        SysUser sysUser = this.getById(user.getId());
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         if (sysUser == null) {
             throw ExceptionResultEnum.ERROR.exception("用户不存在");
         }
@@ -959,18 +959,24 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         if (userExportDtos.isEmpty()) {
             throw ExceptionResultEnum.ERROR.exception("没有可导出数据");
         }
+
+        // 机构Map
+        Map<Long, String> orgMap = new HashMap<>();
+        SysOrg rootOrg = sysOrgService.findRootOrg(schoolId);
+        // 顶级机构
+        orgMap.put(rootOrg.getId(), rootOrg.getName());
+        // 印刷室
+        List<SysOrg> printHouse = sysOrgService.listPrintHouse(schoolId, OrgTypeEnum.PRINTING_HOUSE);
+        printHouse.forEach(m -> orgMap.put(m.getId(), m.getName()));
         userExportDtos.forEach(m -> {
-            List<SysOrg> byConnectByParentIdList = sysOrgService.findByConnectByParentId(m.getOrgId(), true, false);
-            if (CollectionUtils.isNotEmpty(byConnectByParentIdList)) {
-                m.setOrgName(byConnectByParentIdList.stream().map(SysOrg::getName).collect(Collectors.joining("/")));
-            }
-            //角色
-            List<SysRole> roles = sysRoleService.listRolesByUserId(Long.valueOf(m.getId()));
-            if (roles.isEmpty()) {
-                m.setRoleName("");
+            if (orgMap.containsKey(m.getOrgId())) {
+                m.setOrgName(orgMap.get(m.getOrgId()));
             } else {
-                List<String> roleList = roles.stream().map(SysRole::getName).collect(Collectors.toList());
-                m.setRoleName(String.join(",", roleList));
+                List<SysOrg> byConnectByParentIdList = sysOrgService.findByConnectByParentId(m.getOrgId(), true, false);
+                if (CollectionUtils.isNotEmpty(byConnectByParentIdList)) {
+                    m.setOrgName(byConnectByParentIdList.stream().map(SysOrg::getName).collect(Collectors.joining("/")));
+                    orgMap.put(m.getOrgId(), m.getOrgName());
+                }
             }
             m.setEnableName(m.getEnable() ? "启用" : "禁用");
         });

+ 46 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/AesECBUtil.java

@@ -0,0 +1,46 @@
+package com.qmth.teachcloud.common.util;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.Base64;
+
+/**
+ * @Description: AES对称加密
+ * @Param:
+ * @return:
+ * @Date: 2019/10/11
+ */
+public class AesECBUtil {
+    private final static Logger log = LoggerFactory.getLogger(AesECBUtil.class);
+
+    private final static String KEY_SIMPLE = "Qmth87863577qmth";
+
+    public static String encryptSimple(String data) throws Exception {
+        SecretKeySpec secretKeySpec = new SecretKeySpec(KEY_SIMPLE.getBytes(), "AES");
+        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
+        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
+        byte[] encryptedBytes = cipher.doFinal(data.getBytes());
+        return Base64.getEncoder().encodeToString(encryptedBytes);
+    }
+
+    public static String decryptSimple(String encryptedData) throws Exception {
+        SecretKeySpec secretKeySpec = new SecretKeySpec(KEY_SIMPLE.getBytes(), "AES");
+        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
+        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
+        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
+        return new String(decryptedBytes);
+    }
+
+
+    public static void main(String[] args) throws Exception {
+        String password = "a1234567";
+        System.out.println("原始密码:" + password);
+        String encryptSimple = encryptSimple(password);
+        System.out.println("加密值:" + encryptSimple);
+        String passwordDe = decryptSimple(encryptSimple);
+        System.out.println("解密值:" + passwordDe);
+    }
+}

+ 2 - 2
teachcloud-common/src/main/resources/mapper/SysUserMapper.xml

@@ -344,11 +344,11 @@
             a.remark,
             a.org_id orgId,
             a.code code,
-            b.name orgName
+            t.role_name roleName
         FROM
         sys_user a
         left join
-        sys_org b on a.org_id = b.id
+        (select sur.user_id, group_concat(sr.name) role_name from sys_user_role sur join sys_role sr on sur.role_id = sr.id group by sur.user_id) t on a.id = t.user_id
         <where>
             <if test="schoolId != null and schoolId != ''">
                 and a.school_id = #{schoolId}

+ 93 - 6
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/archivescore/ArchiveStudentVo.java

@@ -4,6 +4,7 @@ import java.util.LinkedList;
 import java.util.List;
 
 import com.qmth.teachcloud.common.enums.BasicExamStudentStatusEnum;
+import com.qmth.teachcloud.common.enums.ScanStatus;
 import org.apache.commons.lang3.StringUtils;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@@ -40,8 +41,6 @@ public class ArchiveStudentVo {
     @ExcelProperty(name = "成绩", width = 20, index = 9)
     private Double totalScore;
     private BasicExamStudentStatusEnum status;
-    @ExcelProperty(name = "状态", width = 20, index = 10)
-    private String statusDisplay;
 
     private String subjectiveScoreList;
 
@@ -53,6 +52,22 @@ public class ArchiveStudentVo {
     private Long examStartTime;
     private Long examEndTime;
 
+    private ScanStatus scanStatus;
+    private BasicExamStudentStatusEnum studentStatus;
+
+    @ExcelProperty(name = "状态", width = 20, index = 10)
+    private String studentStatusDisplay;
+    private Boolean absent;
+    private Boolean omrAbsent;
+    private Boolean manualAbsent;
+
+    private Boolean breach;
+    private Boolean omrBreach;
+    private Boolean manualBreach;
+
+    @ExcelProperty(name = "违纪状态", width = 20, index = 11)
+    private String breachDisplay;
+
     public String getCourseCode() {
         return courseCode;
     }
@@ -213,12 +228,84 @@ public class ArchiveStudentVo {
         this.status = status;
     }
 
-    public String getStatusDisplay() {
-        return this.status != null ? this.status.getName() : "";
+    public BasicExamStudentStatusEnum getStudentStatus() {
+        return studentStatus;
+    }
+
+    public void setStudentStatus(BasicExamStudentStatusEnum studentStatus) {
+        this.studentStatus = studentStatus;
+    }
+
+    public Boolean getAbsent() {
+        return absent;
+    }
+
+    public void setAbsent(Boolean absent) {
+        this.absent = absent;
+    }
+
+    public Boolean getOmrAbsent() {
+        return omrAbsent;
+    }
+
+    public void setOmrAbsent(Boolean omrAbsent) {
+        this.omrAbsent = omrAbsent;
+    }
+
+    public Boolean getManualAbsent() {
+        return manualAbsent;
+    }
+
+    public void setManualAbsent(Boolean manualAbsent) {
+        this.manualAbsent = manualAbsent;
+    }
+
+    public Boolean getBreach() {
+        return breach;
+    }
+
+    public void setBreach(Boolean breach) {
+        this.breach = breach;
+    }
+
+    public Boolean getOmrBreach() {
+        return omrBreach;
+    }
+
+    public void setOmrBreach(Boolean omrBreach) {
+        this.omrBreach = omrBreach;
+    }
+
+    public Boolean getManualBreach() {
+        return manualBreach;
+    }
+
+    public void setManualBreach(Boolean manualBreach) {
+        this.manualBreach = manualBreach;
+    }
+
+    public String getBreachDisplay() {
+        return breachDisplay;
+    }
+
+    public void setBreachDisplay(String breachDisplay) {
+        this.breachDisplay = breachDisplay;
+    }
+
+    public String getStudentStatusDisplay() {
+        return studentStatusDisplay;
+    }
+
+    public void setStudentStatusDisplay(String studentStatusDisplay) {
+        this.studentStatusDisplay = studentStatusDisplay;
+    }
+
+    public ScanStatus getScanStatus() {
+        return scanStatus;
     }
 
-    public void setStatusDisplay(String statusDisplay) {
-        this.statusDisplay = statusDisplay;
+    public void setScanStatus(ScanStatus scanStatus) {
+        this.scanStatus = scanStatus;
     }
 
     public List<ScoreItem> getScoreList(boolean objective) {

+ 36 - 4
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -1235,6 +1235,20 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         Page<ArchiveStudentVo> page = new Page<>(query.getPageNumber(), query.getPageSize());
         IPage<ArchiveStudentVo> ret = baseMapper.studentList(page, sysUser.getSchoolId(), query, dpr);
         for (ArchiveStudentVo record : ret.getRecords()) {
+            // 扫描状态
+            if (BasicExamStudentStatusEnum.M.equals(record.getStudentStatus()) || record.getAbsent() || record.getOmrAbsent() || record.getManualAbsent()) {
+                record.setStudentStatusDisplay("缺考");
+            } else if (ScanStatus.UNEXIST.equals(record.getScanStatus())) {
+                record.setStudentStatusDisplay(ScanStatus.UNEXIST.getName());
+            } else {
+                record.setStudentStatusDisplay("正常");
+            }
+
+            // 违纪状态
+            if (BasicExamStudentStatusEnum.B.equals(record.getStudentStatus()) || record.getBreach() || record.getOmrBreach() || record.getManualBreach()) {
+                record.setBreachDisplay("违纪");
+            }
+
             List<String> list = new ArrayList<>();
             List<FilePathVo> vos = JSON.parseArray(StringUtils.trimToNull(record.getSheetPath()), FilePathVo.class);
             if (CollectionUtils.isEmpty(vos)) {
@@ -1254,7 +1268,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         BasicCourse basicCourse = basicCourseService.getById(markPaper.getCourseId());
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         //生成表头
-        String[] columnName = new String[]{"学生姓名", "学号", "学院", "教学班", "行政班", "课程代码", "课程名称", "状态", "客观分", "主观分", "成绩"};
+        String[] columnName = new String[]{"学生姓名", "学号", "学院", "教学班", "行政班", "课程代码", "课程名称", "状态", "违纪状态", "客观分", "主观分", "成绩"};
         List<MarkQuestion> oQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(query.getExamId(), query.getPaperNumber(), null, true);
         List<MarkQuestion> sQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(query.getExamId(), query.getPaperNumber(), null, false);
         List<String> columnNameList = new ArrayList<>(Arrays.asList(columnName));
@@ -1283,7 +1297,26 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             valueList.add(CellValue.of(s.getClassName()));
             valueList.add(CellValue.of(s.getCourseCode()));
             valueList.add(CellValue.of(s.getCourseName()));
-            valueList.add(CellValue.of(Objects.nonNull(s.getStatus()) ? s.getStatus().getName() : ""));
+            String studentStatusDisplay = "";
+            // 扫描状态
+            if (BasicExamStudentStatusEnum.M.equals(s.getStudentStatus()) || s.getAbsent() || s.getOmrAbsent() || s.getManualAbsent()) {
+                studentStatusDisplay = "缺考";
+            } else if (ScanStatus.UNEXIST.equals(s.getScanStatus())) {
+                studentStatusDisplay = ScanStatus.UNEXIST.getName();
+            } else {
+                studentStatusDisplay = "正常";
+            }
+            s.setStudentStatusDisplay(studentStatusDisplay);
+            valueList.add(CellValue.of(studentStatusDisplay));
+
+            String breachDisplay = "";
+            // 违纪状态
+            if (BasicExamStudentStatusEnum.B.equals(s.getStudentStatus()) || s.getBreach() || s.getOmrBreach() || s.getManualBreach()) {
+                breachDisplay = "违纪";
+            }
+            s.setBreachDisplay(breachDisplay);
+            valueList.add(CellValue.of(breachDisplay));
+
             valueList.add(s.getObjectiveScore() == null ? CellValue.of("") : CellValue.of(s.getObjectiveScore()));
             valueList.add(s.getSubjectiveScore() == null ? CellValue.of("") : CellValue.of(s.getSubjectiveScore()));
             valueList.add(s.getTotalScore() == null ? CellValue.of("") : CellValue.of(s.getTotalScore()));
@@ -2336,8 +2369,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         UpdateWrapper<MarkStudent> markStudentUpdateWrapper = new UpdateWrapper<>();
         markStudentUpdateWrapper.lambda().eq(MarkStudent::getId, studentId).set(MarkStudent::getManualBreach, breach)
                 .set(MarkStudent::getOmrBreach, false)
-                .set(MarkStudent::getBreach, breach)
-                .set(MarkStudent::getPaperTypeCheckStatus, PaperTypeCheckStatus.PROCESSED);
+                .set(MarkStudent::getBreach, breach);
         this.update(markStudentUpdateWrapper);
         return UpdateTimeVo.create();
     }

+ 21 - 5
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -428,8 +428,26 @@
     </select>
     <select id="studentList"
             resultType="com.qmth.teachcloud.mark.bean.archivescore.ArchiveStudentVo">
-        select s.*,
-               s.id studentId,
+        select s.id studentId,
+               s.paper_type paperType,
+               s.objective_score objectiveScore,
+                s.subjective_score subjectiveScore,
+                ifnull(s.objective_score, 0) + ifnull(s.subjective_score, 0) totalScore,
+                s.objective_score_list objectiveScoreList,
+                s.subjective_score_list subjectiveScoreList,
+                s.check_user_id checkUserId,
+                s.check_time checkTime,
+                s.sheet_path sheetPath,
+                s.scan_status scanStatus,
+                s.subjective_status subjectiveStatus,
+                s.is_absent absent,
+                s.omr_absent omrAbsent,
+                ifnull(s.is_manual_absent,0) manualAbsent,
+                s.is_upload upload,
+                bes.status studentStatus,
+                s.is_breach breach,
+                s.omr_breach omrBreach,
+                ifnull(s.is_manual_breach,0) manualBreach,
                bes.student_code studentCode,
                bes.student_name studentName,
                bes.college_name collegeName,
@@ -439,9 +457,7 @@
                bc.code courseCode,
                bc.name courseName,
                bes.exam_start_time examStartTime,
-               bes.exam_end_time examEndTime,
-               bes.status,
-               ifnull(s.objective_score,0)+ifnull(s.subjective_score,0) totalScore
+               bes.exam_end_time examEndTime
         from mark_student s
             left join basic_exam_student bes on s.basic_student_id = bes.id
             left join sys_user su on bes.teacher_id = su.id