Pārlūkot izejas kodu

导入excel考勤信息

cuidi 1 gadu atpakaļ
vecāks
revīzija
43f5b7374c
81 mainītis faili ar 638 papildinājumiem un 481 dzēšanām
  1. 1 1
      common/pom.xml
  2. 73 0
      common/src/main/java/com/koobietech/eas/common/constant/ArchiveFileType.java
  3. 1 0
      common/src/main/java/com/koobietech/eas/common/constant/FileType.java
  4. 3 1
      common/src/main/java/com/koobietech/eas/common/pojo/JwtUserDto.java
  5. 33 17
      common/src/main/java/com/koobietech/eas/common/utils/FileManager.java
  6. 1 1
      common/src/main/java/com/koobietech/eas/common/utils/JwtManager.java
  7. 25 0
      common/src/main/java/com/koobietech/eas/common/utils/PasswordManager.java
  8. 46 2
      common/src/main/java/com/koobietech/eas/common/utils/SecurityUtils.java
  9. 3 2
      controller/pom.xml
  10. 84 0
      controller/src/main/java/com/koobietech/eas/config/CaptchaConfig.java
  11. 4 11
      controller/src/main/java/com/koobietech/eas/config/ExceptionAdvice.java
  12. 1 2
      controller/src/main/java/com/koobietech/eas/controller/AdminLoginController.java
  13. 5 2
      controller/src/main/java/com/koobietech/eas/controller/EasArcTlsAttendanceController.java
  14. 4 1
      controller/src/main/java/com/koobietech/eas/controller/EasArcTlsScoresController.java
  15. 41 0
      controller/src/main/java/com/koobietech/eas/controller/EasArchiveFileDownload.java
  16. 4 1
      controller/src/main/java/com/koobietech/eas/controller/EasStuProfileController.java
  17. 0 6
      controller/src/main/java/com/koobietech/eas/controller/LoginController.java
  18. 4 31
      controller/src/main/java/com/koobietech/eas/controller/StudentLoginController.java
  19. 0 17
      controller/src/main/resources/application.yaml
  20. 0 0
      controller/src/main/resources/images/jigsaw/original/bg1.png
  21. 0 0
      controller/src/main/resources/images/jigsaw/original/bg10.png
  22. 0 0
      controller/src/main/resources/images/jigsaw/original/bg11.png
  23. 0 0
      controller/src/main/resources/images/jigsaw/original/bg12.png
  24. 0 0
      controller/src/main/resources/images/jigsaw/original/bg13.png
  25. 0 0
      controller/src/main/resources/images/jigsaw/original/bg14.png
  26. 0 0
      controller/src/main/resources/images/jigsaw/original/bg15.png
  27. 0 0
      controller/src/main/resources/images/jigsaw/original/bg16.png
  28. 0 0
      controller/src/main/resources/images/jigsaw/original/bg17.png
  29. 0 0
      controller/src/main/resources/images/jigsaw/original/bg18.png
  30. 0 0
      controller/src/main/resources/images/jigsaw/original/bg19.png
  31. 0 0
      controller/src/main/resources/images/jigsaw/original/bg2.png
  32. 0 0
      controller/src/main/resources/images/jigsaw/original/bg20.png
  33. 0 0
      controller/src/main/resources/images/jigsaw/original/bg3.png
  34. 0 0
      controller/src/main/resources/images/jigsaw/original/bg4.png
  35. 0 0
      controller/src/main/resources/images/jigsaw/original/bg5.png
  36. 0 0
      controller/src/main/resources/images/jigsaw/original/bg6.png
  37. 0 0
      controller/src/main/resources/images/jigsaw/original/bg7.png
  38. 0 0
      controller/src/main/resources/images/jigsaw/original/bg8.png
  39. 0 0
      controller/src/main/resources/images/jigsaw/original/bg9.png
  40. BIN
      controller/src/main/resources/images/jigsaw/slidingBlock/1.png
  41. BIN
      controller/src/main/resources/images/jigsaw/slidingBlock/10.png
  42. BIN
      controller/src/main/resources/images/jigsaw/slidingBlock/11.png
  43. BIN
      controller/src/main/resources/images/jigsaw/slidingBlock/12.png
  44. BIN
      controller/src/main/resources/images/jigsaw/slidingBlock/2.png
  45. BIN
      controller/src/main/resources/images/jigsaw/slidingBlock/3.png
  46. BIN
      controller/src/main/resources/images/jigsaw/slidingBlock/4.png
  47. BIN
      controller/src/main/resources/images/jigsaw/slidingBlock/5.png
  48. BIN
      controller/src/main/resources/images/jigsaw/slidingBlock/6.png
  49. BIN
      controller/src/main/resources/images/jigsaw/slidingBlock/7.png
  50. BIN
      controller/src/main/resources/images/jigsaw/slidingBlock/8.png
  51. BIN
      controller/src/main/resources/images/jigsaw/slidingBlock/9.png
  52. 0 23
      controller/src/test/java/com/koobietech/eas/controller/ControllerApplicationTests.java
  53. 1 1
      dao/pom.xml
  54. 0 6
      dao/src/main/java/com/koobietech/eas/dao/attendancePojo.java
  55. 1 1
      dao/src/main/java/com/koobietech/eas/dao/constant/UserType.java
  56. 1 1
      dao/src/main/java/com/koobietech/eas/dao/login/pojo/Department.java
  57. 1 1
      dao/src/main/java/com/koobietech/eas/dao/login/pojo/Permission.java
  58. 6 2
      dao/src/main/java/com/koobietech/eas/dao/login/pojo/UserDetail.java
  59. 6 3
      dao/src/main/java/com/koobietech/eas/dao/mapper/AdminLoginMapper.java
  60. 4 1
      dao/src/main/java/com/koobietech/eas/dao/pojo/AdminPojo.java
  61. 1 4
      dao/src/main/java/com/koobietech/eas/dao/pojo/EasArcTlsAttendancePojo.java
  62. 1 1
      dao/src/main/java/com/koobietech/eas/dao/pojo/EasArcTlsScoresPojo.java
  63. 6 31
      dao/src/main/resources/com/koobietech/eas/dao/mapper/AdminLoginMapper.xml
  64. 10 9
      pom.xml
  65. 2 2
      security/src/main/java/com/koobietech/eas/security/filter/EasSecurityFilter.java
  66. 0 82
      security/src/main/java/com/koobietech/eas/security/filter/EasStudentFilter.java
  67. 7 2
      service/pom.xml
  68. 2 2
      service/src/main/java/com/koobietech/eas/service/AdminLoginService.java
  69. 7 0
      service/src/main/java/com/koobietech/eas/service/ArchiveRedisService.java
  70. 11 0
      service/src/main/java/com/koobietech/eas/service/EasArchiveFileDownloadService.java
  71. 1 1
      service/src/main/java/com/koobietech/eas/service/LoginRedisService.java
  72. 0 19
      service/src/main/java/com/koobietech/eas/service/StudentLoginRedisService.java
  73. 4 9
      service/src/main/java/com/koobietech/eas/service/StudentLoginService.java
  74. 26 27
      service/src/main/java/com/koobietech/eas/service/impl/AdminLoginServiceImpl.java
  75. 31 0
      service/src/main/java/com/koobietech/eas/service/impl/ArchiveRedisServiceImpl.java
  76. 2 2
      service/src/main/java/com/koobietech/eas/service/impl/EasArcTlsAttendanceServiceImpl.java
  77. 7 7
      service/src/main/java/com/koobietech/eas/service/impl/EasArcTlsScoresServiceImpl.java
  78. 150 0
      service/src/main/java/com/koobietech/eas/service/impl/EasArchiveFileDownloadServiceImpl.java
  79. 4 3
      service/src/main/java/com/koobietech/eas/service/impl/LoginRedisServiceImpl.java
  80. 0 57
      service/src/main/java/com/koobietech/eas/service/impl/StudentLoginRedisServiceImpl.java
  81. 13 89
      service/src/main/java/com/koobietech/eas/service/impl/StudentLoginServiceImpl.java

+ 1 - 1
common/pom.xml

@@ -16,7 +16,7 @@
     <dependencies>
         <dependency>
             <groupId>cn.afterturn</groupId>
-            <artifactId>easypoi-spring-boot-starter</artifactId>
+            <artifactId>easypoi-base</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 73 - 0
common/src/main/java/com/koobietech/eas/common/constant/ArchiveFileType.java

@@ -0,0 +1,73 @@
+package com.koobietech.eas.common.constant;
+
+
+public enum ArchiveFileType {
+    //OFFICE 文件
+    DOC(".doc", 11, "application/msword"),
+    XLS(".xls", 12, "application/vnd.ms-excel"),
+    PPT(".ppt", 13, "application/vnd.ms-powerpoint"),
+    XLSX(".xlsx", 14, "application/vnd.openxmlformats-office, document.spreadsheetml.sheet"),
+    DOCX(".docx", 15, "application/vnd.openxmlformats-office, document.wordprocessingml.document"),
+    PDF(".pdf", 16, "application/pdf"),
+    //文本文件
+    TXT(".txt", 21, "text/plain"),
+    HTML(".html", 22, "text/html"),
+    CSS(".css", 23, "text/css"),
+    JS(".js", 24, "application/x-javascript"),
+    //媒体文件
+    JPG(".jpg", 31, "image/jpeg"),
+    JPEG(".jpeg", 36, "image/jpeg"),
+    GIF(".gif", 32, "image/gif"),
+    MP4(".mp4", 33, "video/mp4"),
+    MP3(".mp3", 34, "audio/mp3"),
+    PNG(".png", 35, "image/png"),
+    //压缩文件
+    GZ(".gz", 41, "application/x-gzip"),
+    ZIP(".zip", 42, "application/zip"),
+    RAR(".rar", 43, "application/x-rar-compressed"),
+    //其他文件
+    FILE(".file", 51, "application/octet-stream");
+
+    private final String suffix;
+    private final int value;
+    private final String contentType;
+
+    ArchiveFileType(String suffix, int value, String contentType) {
+        this.suffix = suffix;
+        this.value = value;
+        this.contentType = contentType;
+    }
+
+    public static String getSuffix(int fileTypeCode) {
+        for (FileType fileType : FileType.values()) {
+            if (fileType.getValue() == fileTypeCode) {
+                return fileType.getSuffix();
+            }
+        }
+        return null;
+    }
+
+    public String getSuffix() {
+        return suffix;
+    }
+
+    public static String getContentType(String suffix) {
+        //根据后缀名获取文件类型
+        for (ArchiveFileType fileType : ArchiveFileType.values()) {
+            if (fileType.getSuffix().equalsIgnoreCase(suffix)) {
+                return fileType.getContentType();
+            }
+        }
+        return null;
+    }
+
+    public String getContentType() {
+        return contentType;
+    }
+
+
+    public int getValue() {
+        return value;
+    }
+}
+

+ 1 - 0
common/src/main/java/com/koobietech/eas/common/constant/FileType.java

@@ -55,4 +55,5 @@ public enum FileType {
     public int getValue() {
         return value;
     }
+
 }

+ 3 - 1
common/src/main/java/com/koobietech/eas/common/pojo/JwtUserDto.java

@@ -1,8 +1,10 @@
 package com.koobietech.eas.common.pojo;
 
-import com.koobietech.eas.common.constant.UserType;
 import lombok.Data;
 
+/**
+ * @author lc
+ */
 @Data
 public class JwtUserDto {
     String username;

+ 33 - 17
common/src/main/java/com/koobietech/eas/common/utils/FileManager.java

@@ -60,6 +60,7 @@ public class FileManager {
      * @param newPath 目标文件夹路径
      */
     public boolean moveFolder(String oldPath, String newPath) {
+        boolean result = true;
         File sourceFolder = new File(oldPath);
         //把源文件转移到目标文件夹下
         File targetFolder = new File(newPath, sourceFolder.getName());
@@ -68,36 +69,52 @@ public class FileManager {
         }
         if (sourceFolder.isDirectory()) {
             if (!targetFolder.exists()) {
-                targetFolder.mkdir();
+                result = targetFolder.mkdir();
             }
             File[] files = sourceFolder.listFiles();
             if (files != null) {
                 for (File file : files) {
                     if ( file.isFile() ) {
                         FileChannel sourceChannel = null;
+                        FileInputStream fileInputStream = null;
+                        FileOutputStream fileOutputStream = null;
                         FileChannel destChannel = null;
                         try {
-                            sourceChannel = new FileInputStream(file).getChannel();
-                            destChannel = new FileOutputStream(new File(targetFolder.getPath(), file.getName())).getChannel();
+                            fileInputStream = new FileInputStream(file);
+                            fileOutputStream = new FileOutputStream(new File(targetFolder.getPath(), file.getName()));
+                            sourceChannel = fileInputStream.getChannel();
+                            destChannel = fileOutputStream.getChannel();
                             destChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
                             sourceChannel.close();
-                            file.delete();
-                        } catch (IOException e) {}finally {
+                            result = file.delete();
+                        } catch (IOException e) {
+                            result = false;
+                        }finally {
                             try {
-                                if (Objects.nonNull(sourceChannel))
+                                if (Objects.nonNull(sourceChannel)) {
                                     sourceChannel.close();
-                                if (Objects.nonNull(destChannel))
+                                }
+                                if (Objects.nonNull(destChannel)) {
                                     destChannel.close();
-                            } catch (IOException e) {}
+                                }
+                                if (Objects.nonNull(fileInputStream)) {
+                                    fileInputStream.close();
+                                }
+                                if (Objects.nonNull(fileOutputStream)) {
+                                    fileOutputStream.close();
+                                }
+                            } catch (IOException e) {
+                                result = false;
+                            }
                         }
                     } else {
                         moveFolder(file.getPath(), new File(targetFolder.getPath(), file.getName()).getPath());
                     }
                 }
             }
-            sourceFolder.delete();
+            result = sourceFolder.delete();
         }
-        return true;
+        return result;
     }
 
     /**
@@ -159,23 +176,22 @@ public class FileManager {
      * @return
      */
     public boolean deleteFolder(String folderPath){
+        boolean ret = true;
         File fileFolder = new File(folderPath);
         if ( fileFolder != null && fileFolder.exists() ){
             if ( fileFolder.isDirectory() ){
                 File[] files = fileFolder.listFiles();
                 for (File file : files) {
                     if ( file.isDirectory() ){
-                        deleteFolder(file.getAbsolutePath());
+                        ret = deleteFolder(file.getAbsolutePath());
                     } else {
-                        file.delete();
+                        ret = file.delete();
                     }
                 }
             }
-            fileFolder.delete();
-        } else {
-            return false;
+            ret = fileFolder.delete();
         }
-        return true;
+        return ret;
     }
 
 
@@ -336,7 +352,7 @@ public class FileManager {
             if (replaceFile) {
                 Files.move(srcFile, destFile, StandardCopyOption.REPLACE_EXISTING);
             } else {
-                Files.move(srcFile, destFile, StandardCopyOption.REPLACE_EXISTING);
+                Files.move(srcFile, destFile, StandardCopyOption.COPY_ATTRIBUTES);
             }
         } catch (IOException e) {
             return false;

+ 1 - 1
common/src/main/java/com/koobietech/eas/common/utils/JwtManager.java

@@ -5,7 +5,7 @@ import com.auth0.jwt.algorithms.Algorithm;
 import com.auth0.jwt.exceptions.JWTVerificationException;
 import com.auth0.jwt.interfaces.DecodedJWT;
 import com.auth0.jwt.interfaces.JWTVerifier;
-import com.koobietech.eas.common.constant.UserType;
+import com.koobietech.eas.dao.constant.UserType;
 import com.koobietech.eas.common.exception.EasException;
 import com.koobietech.eas.common.pojo.JwtUserDto;
 import org.springframework.beans.factory.annotation.Value;

+ 25 - 0
common/src/main/java/com/koobietech/eas/common/utils/PasswordManager.java

@@ -7,7 +7,10 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
 import java.nio.charset.StandardCharsets;
+import java.util.Base64;
 
 /**
  * @author lc
@@ -33,5 +36,27 @@ public class PasswordManager {
         return decryptPassword;
     }
 
+    public String archiveEncryptPassword(String data) {
+        SecureUtil.disableBouncyCastle();
+        AES aes = new AES(passwordSignKey.getBytes(StandardCharsets.UTF_8));
+        String encryptStr;
+        try {
+            encryptStr = aes.encryptHex(data);
+        } catch (Exception e) {
+            throw new EasException("AES加密错误", e);
+        }
+        return encryptStr;
+    }
 
+    public String archiveDecryptPassword(String encryptedData) {
+        SecureUtil.disableBouncyCastle();
+        AES aes = new AES(passwordSignKey.getBytes(StandardCharsets.UTF_8));
+        String decryptedStr;
+        try {
+            decryptedStr = aes.decryptStr(encryptedData);
+        } catch (Exception e) {
+            throw new EasException("AES解密错误", e);
+        }
+        return decryptedStr;
+    }
 }

+ 46 - 2
common/src/main/java/com/koobietech/eas/common/utils/SecurityUtils.java

@@ -1,6 +1,7 @@
 package com.koobietech.eas.common.utils;
 
-import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
+import com.koobietech.eas.dao.constant.UserType;
+import com.koobietech.eas.dao.login.pojo.UserDetail;
 import org.springframework.security.core.context.SecurityContextHolder;
 
 import java.util.Objects;
@@ -10,6 +11,10 @@ import java.util.Objects;
  */
 public class SecurityUtils {
 
+    /**
+     * 取登录名
+     * @return
+     */
     public static String getLoginUserName() {
         UserDetail principal = getPrincipal();
         if (Objects.nonNull(principal)) {
@@ -18,14 +23,53 @@ public class SecurityUtils {
         return "anonymousUser";
     }
 
+    /**
+     * 取用户ID
+     * @return
+     */
     public static Long getLoginUid() {
         UserDetail principal = getPrincipal();
         if (Objects.nonNull(principal)) {
-            return principal.getId();
+            if ( !isStudentUser() ) {
+                return principal.getId();
+            }
+        }
+        return 0L;
+    }
+
+    /**
+     * 判断是否是学员
+     * @return
+     */
+    public static boolean isStudentUser() {
+        boolean isStudent = false;
+        UserDetail principal = getPrincipal();
+        if (Objects.nonNull(principal)) {
+            if ( principal.getUserType().equals(UserType.MEMBER) ) {
+                isStudent = true;
+            }
+        }
+        return isStudent;
+    }
+
+    /**
+     * 取学员登录ID
+     * @return
+     */
+    public static Long getLoginSid() {
+        UserDetail principal = getPrincipal();
+        if (Objects.nonNull(principal)) {
+            if ( isStudentUser() ) {
+                return principal.getId();
+            }
         }
         return 0L;
     }
 
+    /**
+     * 是否登录
+     * @return
+     */
     public static boolean isLogged() {
         UserDetail principal = getPrincipal();
         return Objects.nonNull(principal);

+ 3 - 2
controller/pom.xml

@@ -20,11 +20,12 @@
         </dependency>
         <dependency>
             <groupId>com.anji-plus</groupId>
-            <artifactId>spring-boot-starter-captcha</artifactId>
+            <artifactId>captcha</artifactId>
         </dependency>
         <dependency>
             <groupId>cn.afterturn</groupId>
-            <artifactId>easypoi-spring-boot-starter</artifactId>
+            <artifactId>easypoi-base</artifactId>
+            <version>4.3.0</version>
         </dependency>
         <dependency>
             <groupId>com.github.xiaoymin</groupId>

+ 84 - 0
controller/src/main/java/com/koobietech/eas/config/CaptchaConfig.java

@@ -0,0 +1,84 @@
+package com.koobietech.eas.config;
+
+import com.anji.captcha.model.common.Const;
+import com.anji.captcha.service.CaptchaCacheService;
+import com.anji.captcha.service.CaptchaService;
+import com.anji.captcha.service.impl.CaptchaServiceFactory;
+import com.anji.captcha.util.ImageUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.DependsOn;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
+import org.springframework.util.Base64Utils;
+import org.springframework.util.FileCopyUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * @author lc
+ */
+@Configuration
+public class CaptchaConfig {
+
+    @Bean(name = "AjCaptchaCacheService")
+    public CaptchaCacheService captchaCacheService() {
+        return CaptchaServiceFactory.getCache("local");
+    }
+
+    @Bean
+    @DependsOn("AjCaptchaCacheService")
+    public CaptchaService captchaService() {
+        Properties config = new Properties();
+        config.put(Const.CAPTCHA_CACHETYPE, "local");
+        config.put(Const.CAPTCHA_WATER_MARK, "爱扣钉");
+        config.put(Const.CAPTCHA_FONT_TYPE, "宋体");
+        config.put(Const.CAPTCHA_TYPE, "default");
+        config.put(Const.CAPTCHA_INTERFERENCE_OPTIONS, "0");
+        config.put(Const.ORIGINAL_PATH_JIGSAW, "classpath:images/jigsaw");
+        config.put(Const.ORIGINAL_PATH_PIC_CLICK, "classpath:images/pic-click");
+        config.put(Const.CAPTCHA_SLIP_OFFSET, "5");
+        config.put(Const.CAPTCHA_AES_STATUS, "true");
+        config.put(Const.CAPTCHA_WATER_FONT, "宋体");
+        config.put(Const.CAPTCHA_CACAHE_MAX_NUMBER, "1000");
+        config.put(Const.CAPTCHA_TIMING_CLEAR_SECOND, "180");
+        if ((StringUtils.isNotBlank(config.getProperty(Const.ORIGINAL_PATH_JIGSAW))
+                && config.getProperty(Const.ORIGINAL_PATH_JIGSAW).startsWith("classpath:"))
+                || (StringUtils.isNotBlank(config.getProperty(Const.ORIGINAL_PATH_PIC_CLICK))
+                && config.getProperty(Const.ORIGINAL_PATH_PIC_CLICK).startsWith("classpath:"))) {
+            config.put(Const.CAPTCHA_INIT_ORIGINAL, "true");
+            initializeBaseMap(config.getProperty(Const.ORIGINAL_PATH_JIGSAW),
+                    config.getProperty(Const.ORIGINAL_PATH_PIC_CLICK));
+        }
+        CaptchaService s = CaptchaServiceFactory.getInstance(config);
+        return s;
+    }
+
+    private static void initializeBaseMap(String jigsaw, String picClick) {
+        ImageUtils.cacheBootImage(getResourcesImagesFile(jigsaw + "/original/*.png"),
+                getResourcesImagesFile(jigsaw + "/slidingBlock/*.png"),
+                getResourcesImagesFile(picClick + "/*.png"));
+    }
+
+    public static Map<String, String> getResourcesImagesFile(String path) {
+        Map<String, String> imgMap = new HashMap<>();
+        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+        try {
+            Resource[] resources = resolver.getResources(path);
+            for (Resource resource : resources) {
+                byte[] bytes = FileCopyUtils.copyToByteArray(resource.getInputStream());
+                String string = Base64Utils.encodeToString(bytes);
+                String filename = resource.getFilename();
+                imgMap.put(filename, string);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return imgMap;
+    }
+
+}

+ 4 - 11
controller/src/main/java/com/koobietech/eas/config/ExceptionAdvice.java

@@ -11,7 +11,6 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 
 @RestControllerAdvice
-
 public class ExceptionAdvice {
 
     private static final Logger logger = LoggerFactory.getLogger(ExceptionAdvice.class);
@@ -21,14 +20,11 @@ public class ExceptionAdvice {
     @ExceptionHandler(Exception.class)
     public JsonResult exceptionHandler(Exception e){
         StackTraceElement[] stackTrace = e.getStackTrace();
-        e.printStackTrace();
-        logger.error("运行异常提醒:");
-        logger.error(e.getMessage());
-        logger.error("异常堆栈信息:");
+        logger.error("<<<<<<<<<<<<<");
         for (StackTraceElement element : stackTrace) {
             logger.error(element.toString());
         }
-        logger.error("-------------");
+        logger.error(">>>>>>>>>>>>>>");
         return JsonResult.fail(e.getMessage(), 500);
     }
 
@@ -37,14 +33,11 @@ public class ExceptionAdvice {
     @ExceptionHandler(EasException.class)
     public JsonResult exceptionHandler(EasException e){
         StackTraceElement[] stackTrace = e.getStackTrace();
-        e.printStackTrace();
-        logger.error("运行异常提醒:");
-        logger.error(e.getMessage());
-        logger.error("异常堆栈信息:");
+        logger.error("||||||||||||||||");
         for (StackTraceElement element : stackTrace) {
             logger.error(element.toString());
         }
-        logger.error("-------------");
+        logger.error("&&&&&&&&&&&&&&&&&");
         return JsonResult.fail(e.getMessage(), e.getCode());
     }
 }

+ 1 - 2
controller/src/main/java/com/koobietech/eas/controller/AdminLoginController.java

@@ -1,13 +1,12 @@
 package com.koobietech.eas.controller;
 
 
-import com.anji.captcha.model.common.RepCodeEnum;
 import com.anji.captcha.model.common.ResponseModel;
 import com.anji.captcha.model.vo.CaptchaVO;
 import com.anji.captcha.service.CaptchaService;
 import com.koobietech.eas.common.exception.EasException;
 import com.koobietech.eas.common.result.JsonResult;
-import com.koobietech.eas.dao.Pojo.AdminPojo;
+import com.koobietech.eas.dao.pojo.AdminPojo;
 import com.koobietech.eas.dao.dto.LoginToken;
 import com.koobietech.eas.service.AdminLoginService;
 import io.swagger.v3.oas.annotations.Operation;

+ 5 - 2
controller/src/main/java/com/koobietech/eas/controller/EasArcTlsAttendanceController.java

@@ -8,6 +8,7 @@ import com.koobietech.eas.mbg.model.EasArcTlsAttendance;
 import com.koobietech.eas.mbg.model.EasEduClassroom;
 import com.koobietech.eas.service.EasArcTlsAttendanceService;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -15,6 +16,7 @@ import javax.annotation.Resource;
 import java.io.IOException;
 import java.io.InputStream;
 
+@Tag(name = "签到模块")
 @RestController
 @RequestMapping("/attendance")
 public class EasArcTlsAttendanceController {
@@ -23,7 +25,7 @@ public class EasArcTlsAttendanceController {
     private EasArcTlsAttendanceService easArcTlsAttendanceService;
 
     @GetMapping("/getStudentList")
-    @Operation(summary = "获取学生列表", description = "签到的时候会根据班级来获取学生列表(class_id)")
+    @Operation(summary = "获取学生列表", description = "签到的时候会根据课表ID来获取学生列表(scheduleId)")
     public JsonResult getStudentList(@RequestParam Long scheduleId) {
         return JsonResult.data(easArcTlsAttendanceService.getStudentList(scheduleId));
     }
@@ -57,8 +59,9 @@ public class EasArcTlsAttendanceController {
     }
 
 
+
     @DeleteMapping("/delete")
-    @Operation(summary = "删除签到记录", description = "删除签到记录数据根据时间和学员ID")
+    @Operation(summary = "删除签到记录", description = "删除签到记录数据根据时间和学员student_number")
     public JsonResult delete(@RequestBody EasArcTlsAttendance attendance) {
         Boolean ret = easArcTlsAttendanceService.delete(attendance);
         if (ret) {

+ 4 - 1
controller/src/main/java/com/koobietech/eas/controller/EasArcTlsScoresController.java

@@ -17,6 +17,7 @@ import javax.annotation.Resource;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
+import java.util.Objects;
 
 @RestController
 @Tag(name = "成绩控制器")
@@ -93,7 +94,9 @@ public class EasArcTlsScoresController {
             aBoolean = false;
         } finally {
             try {
-                inputStream.close();
+                if (Objects.nonNull(inputStream) ) {
+                    inputStream.close();
+                }
             } catch (IOException e) {}
         }
         if (aBoolean == true){

+ 41 - 0
controller/src/main/java/com/koobietech/eas/controller/EasArchiveFileDownload.java

@@ -0,0 +1,41 @@
+package com.koobietech.eas.controller;
+
+import com.koobietech.eas.common.result.JsonResult;
+import com.koobietech.eas.service.EasArchiveFileDownloadService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+@Tag(name = "下载文件模块")
+@RestController
+public class EasArchiveFileDownload {
+
+    @Resource
+    EasArchiveFileDownloadService easArchiveFileDownloadService;
+
+    @GetMapping("/getArchiveFile")
+    @Operation(summary = "获取下载token", description = "前端传入archiveId,后端返回下载token")
+    public JsonResult getFile(Integer archiveId) {
+
+        String archiveToken = easArchiveFileDownloadService.getArchiveToken(archiveId);
+
+        return JsonResult.data(archiveToken);
+    }
+
+    @GetMapping("/getFileByToken")
+    @Operation(summary = "获取文件流", description = "前端把token传入请求头,后端返回文件流")
+    public void getFileByToken(@RequestParam String archiveToken, HttpServletResponse response) {
+
+        //加if判断,如果返回的是false,说明token已经过期,返回null
+        easArchiveFileDownloadService.downloadFileByToken(archiveToken, response);
+    }
+
+
+
+
+}

+ 4 - 1
controller/src/main/java/com/koobietech/eas/controller/EasStuProfileController.java

@@ -4,11 +4,14 @@ package com.koobietech.eas.controller;
 import com.koobietech.eas.common.result.JsonResult;
 import com.koobietech.eas.mbg.model.EasArcTlsStudents;
 import com.koobietech.eas.service.EasStuProfileService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.io.FileNotFoundException;
 
+@Tag(name = "学生档案下载模块")
 @RestController
 public class EasStuProfileController {
 
@@ -16,7 +19,7 @@ public class EasStuProfileController {
     private EasStuProfileService easStuProfileService;
 
     @PostMapping("/StuProfileDownload")
-
+    @Operation(summary = "保存学生档案为word文档到本地或者服务器中", description = "根据学生档案信息和管理员ID保存学生档案为word文档到本地或者服务器中,注意manager_id要传在url中")
     public JsonResult StuProfileDownload(@RequestBody EasArcTlsStudents easArcTlsStudents, @RequestParam Integer manager_id) throws FileNotFoundException {
         //StuProfileDownload返回值是boolean,这里用JsonResult包装一下 加上if判断
         if (easStuProfileService.StuProfileDownload(easArcTlsStudents, manager_id)) {

+ 0 - 6
controller/src/main/java/com/koobietech/eas/controller/LoginController.java

@@ -1,6 +0,0 @@
-package com.koobietech.eas.controller;
-
-public class LoginController {
-
-
-}

+ 4 - 31
controller/src/main/java/com/koobietech/eas/controller/StudentLoginController.java

@@ -5,9 +5,8 @@ import com.anji.captcha.model.vo.CaptchaVO;
 import com.anji.captcha.service.CaptchaService;
 import com.koobietech.eas.common.exception.EasException;
 import com.koobietech.eas.common.result.JsonResult;
-import com.koobietech.eas.dao.Pojo.AdminPojo;
-import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
 import com.koobietech.eas.dao.dto.LoginToken;
+import com.koobietech.eas.dao.pojo.AdminPojo;
 import com.koobietech.eas.service.StudentLoginService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -15,6 +14,9 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 
+/**
+ * @author lc
+ */
 @RestController
 @Tag(name = "学生登陆模块")
 public class StudentLoginController {
@@ -40,33 +42,4 @@ public class StudentLoginController {
         LoginToken ret = studentLoginService.studentLogin(adminPojo);
         return JsonResult.data(ret);
     }
-
-    @GetMapping("/getStudentInfo")
-    @Operation(summary = "获取学生信息", description = "根据Token获取学生信息")
-    public JsonResult getStudentInfo(@RequestHeader("Authorization") String token) {
-        UserDetail ret = studentLoginService.getStudentInfo(token);
-        return JsonResult.data(ret);
-    }
-
-    @PostMapping("/studentRefreshToken")
-    @Operation(summary = "刷新token", description = "当token过期,在请求头中携带refresh token,若刷新成功,返回新的token和refresh token")
-    public JsonResult refreshToken(@RequestHeader("AUthorization") String refreshToken) {
-        LoginToken ret = studentLoginService.refreshToken(refreshToken);
-        return JsonResult.data(ret);
-    }
-
-    @PostMapping("/studentVerifyGet")
-    @Operation(summary = "获取验证码", description = "前端发起获取验证码请求,后端访问静态资源返回滑动图片")
-    public JsonResult verifyGet(@RequestBody CaptchaVO captchaVO) {
-        JsonResult ret = studentLoginService.verifyToJsonResult(captchaService.get(captchaVO));
-        return JsonResult.data(ret);
-    }
-
-    @PostMapping("/studentVerifyCheck")
-    @Operation(summary = "核对验证码轨迹", description = "前端把用户的滑动轨迹转化成字符串传入后端,通过算法判断轨迹是否为真人")
-    public JsonResult verifyCheck(@RequestBody CaptchaVO captchaVO) {
-        JsonResult ret = studentLoginService.verifyToJsonResult(captchaService.check(captchaVO));
-        return JsonResult.data(ret);
-    }
-
 }

+ 0 - 17
controller/src/main/resources/application.yaml

@@ -34,22 +34,5 @@ eas:
   jwt-secret-key: 123456
   jwt-expires-date: 2
   password-sign-key: eas-key-password
-aj:
-  captcha:
-    cache-type: local
-    type: default
-    water-mark: "\u7231\u6263\u9489"
-    slip-offset: 5
-    aes-status: true
-    interference-options: 2
-    font-style: 1
-    font-size: 25
-    history-data-clear-enable: false
-    req-frequency-limit-enable: false
-    req-get-lock-limit: 5
-    req-get-lock-seconds: 360
-    req-get-minute-limit: 30
-    req-check-minute-limit: 60
-    req-verify-minute-limit: 60
 project:
   path: ${user.home}/archivesFiles

+ 0 - 0
controller/src/main/resources/images/jigsaw/bg1.png → controller/src/main/resources/images/jigsaw/original/bg1.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg10.png → controller/src/main/resources/images/jigsaw/original/bg10.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg11.png → controller/src/main/resources/images/jigsaw/original/bg11.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg12.png → controller/src/main/resources/images/jigsaw/original/bg12.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg13.png → controller/src/main/resources/images/jigsaw/original/bg13.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg14.png → controller/src/main/resources/images/jigsaw/original/bg14.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg15.png → controller/src/main/resources/images/jigsaw/original/bg15.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg16.png → controller/src/main/resources/images/jigsaw/original/bg16.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg17.png → controller/src/main/resources/images/jigsaw/original/bg17.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg18.png → controller/src/main/resources/images/jigsaw/original/bg18.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg19.png → controller/src/main/resources/images/jigsaw/original/bg19.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg2.png → controller/src/main/resources/images/jigsaw/original/bg2.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg20.png → controller/src/main/resources/images/jigsaw/original/bg20.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg3.png → controller/src/main/resources/images/jigsaw/original/bg3.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg4.png → controller/src/main/resources/images/jigsaw/original/bg4.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg5.png → controller/src/main/resources/images/jigsaw/original/bg5.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg6.png → controller/src/main/resources/images/jigsaw/original/bg6.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg7.png → controller/src/main/resources/images/jigsaw/original/bg7.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg8.png → controller/src/main/resources/images/jigsaw/original/bg8.png


+ 0 - 0
controller/src/main/resources/images/jigsaw/bg9.png → controller/src/main/resources/images/jigsaw/original/bg9.png


BIN
controller/src/main/resources/images/jigsaw/slidingBlock/1.png


BIN
controller/src/main/resources/images/jigsaw/slidingBlock/10.png


BIN
controller/src/main/resources/images/jigsaw/slidingBlock/11.png


BIN
controller/src/main/resources/images/jigsaw/slidingBlock/12.png


BIN
controller/src/main/resources/images/jigsaw/slidingBlock/2.png


BIN
controller/src/main/resources/images/jigsaw/slidingBlock/3.png


BIN
controller/src/main/resources/images/jigsaw/slidingBlock/4.png


BIN
controller/src/main/resources/images/jigsaw/slidingBlock/5.png


BIN
controller/src/main/resources/images/jigsaw/slidingBlock/6.png


BIN
controller/src/main/resources/images/jigsaw/slidingBlock/7.png


BIN
controller/src/main/resources/images/jigsaw/slidingBlock/8.png


BIN
controller/src/main/resources/images/jigsaw/slidingBlock/9.png


+ 0 - 23
controller/src/test/java/com/koobietech/eas/controller/ControllerApplicationTests.java

@@ -1,32 +1,9 @@
 package com.koobietech.eas.controller;
 
-import cn.afterturn.easypoi.excel.ExcelExportUtil;
-import cn.afterturn.easypoi.excel.ExcelImportUtil;
-import cn.afterturn.easypoi.excel.entity.ExportParams;
-import cn.afterturn.easypoi.excel.entity.ImportParams;
-import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
-import cn.afterturn.easypoi.handler.inter.IReadHandler;
-import cn.afterturn.easypoi.handler.inter.IWriter;
-import com.koobietech.eas.common.constant.UserType;
-import com.koobietech.eas.common.pojo.JwtUserDto;
-import com.koobietech.eas.common.service.RedisService;
-import com.koobietech.eas.common.utils.JwtManager;
-import com.koobietech.eas.common.utils.PasswordManager;
-import com.koobietech.eas.common.utils.StudentArchiveGenerator;
-import com.koobietech.eas.mbg.model.EasArcTlsScores;
-import com.koobietech.eas.mbg.model.EasSysLogs;
-import org.apache.poi.ss.usermodel.Workbook;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.test.context.SpringBootTest;
 
-import javax.annotation.Resource;
-import java.io.*;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.*;
-
 
 @SpringBootTest
 class ControllerApplicationTests {

+ 1 - 1
dao/pom.xml

@@ -10,7 +10,7 @@
     <dependencies>
         <dependency>
             <groupId>cn.afterturn</groupId>
-            <artifactId>easypoi-wps</artifactId>
+            <artifactId>easypoi-annotation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.github.xiaoymin</groupId>

+ 0 - 6
dao/src/main/java/com/koobietech/eas/dao/attendancePojo.java

@@ -1,6 +0,0 @@
-package com.koobietech.eas.dao;
-
-public class attendancePojo {
-    private String student_name;
-
-}

+ 1 - 1
common/src/main/java/com/koobietech/eas/common/constant/UserType.java → dao/src/main/java/com/koobietech/eas/dao/constant/UserType.java

@@ -1,4 +1,4 @@
-package com.koobietech.eas.common.constant;
+package com.koobietech.eas.dao.constant;
 
 public enum UserType {
     TEACHER, MEMBER, ADMIN

+ 1 - 1
dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/Department.java → dao/src/main/java/com/koobietech/eas/dao/login/pojo/Department.java

@@ -1,4 +1,4 @@
-package com.koobietech.eas.dao.adminLoginPojo;
+package com.koobietech.eas.dao.login.pojo;
 
 import lombok.Data;
 import java.util.Date;

+ 1 - 1
dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/Permission.java → dao/src/main/java/com/koobietech/eas/dao/login/pojo/Permission.java

@@ -1,4 +1,4 @@
-package com.koobietech.eas.dao.adminLoginPojo;
+package com.koobietech.eas.dao.login.pojo;
 
 import lombok.Data;
 import java.util.Date;

+ 6 - 2
dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/UserDetail.java → dao/src/main/java/com/koobietech/eas/dao/login/pojo/UserDetail.java

@@ -1,15 +1,19 @@
-package com.koobietech.eas.dao.adminLoginPojo;
+package com.koobietech.eas.dao.login.pojo;
 
+import com.koobietech.eas.dao.constant.UserType;
 import lombok.Data;
 
 import java.util.List;
-
+/**
+ * @author lc
+ */
 @Data
 public class UserDetail {
     private Long id;
     private String username;
     private String phone;
     private String email;
+    private UserType userType;
     private List<Permission> permissions;
     private List<Department> departments;
 

+ 6 - 3
dao/src/main/java/com/koobietech/eas/dao/mapper/AdminLoginMapper.java

@@ -1,11 +1,14 @@
 package com.koobietech.eas.dao.mapper;
 
-import com.koobietech.eas.dao.adminLoginPojo.Department;
-import com.koobietech.eas.dao.adminLoginPojo.Permission;
-import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
+import com.koobietech.eas.dao.login.pojo.Department;
+import com.koobietech.eas.dao.login.pojo.Permission;
+import com.koobietech.eas.dao.login.pojo.UserDetail;
 
 import java.util.List;
 
+/**
+ * @author lc
+ */
 public interface AdminLoginMapper {
     List<Permission> getUserPermissionsById(Long adminId);
 

+ 4 - 1
dao/src/main/java/com/koobietech/eas/dao/Pojo/AdminPojo.java → dao/src/main/java/com/koobietech/eas/dao/pojo/AdminPojo.java

@@ -1,7 +1,10 @@
-package com.koobietech.eas.dao.Pojo;
+package com.koobietech.eas.dao.pojo;
 
 import lombok.Data;
 
+/**
+ * @author lc
+ */
 @Data
 public class AdminPojo {
     private String username;

+ 1 - 4
dao/src/main/java/com/koobietech/eas/dao/Pojo/EasArcTlsAttendancePojo.java → dao/src/main/java/com/koobietech/eas/dao/pojo/EasArcTlsAttendancePojo.java

@@ -1,13 +1,10 @@
-package com.koobietech.eas.dao.Pojo;
+package com.koobietech.eas.dao.pojo;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
-import cn.afterturn.easypoi.excel.annotation.ExcelIgnore;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.io.Serializable;
-import java.math.BigDecimal;
 import java.util.Date;
 
 /**

+ 1 - 1
dao/src/main/java/com/koobietech/eas/dao/Pojo/EasArcTlsScoresPojo.java → dao/src/main/java/com/koobietech/eas/dao/pojo/EasArcTlsScoresPojo.java

@@ -1,4 +1,4 @@
-package com.koobietech.eas.dao.Pojo;
+package com.koobietech.eas.dao.pojo;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
 import lombok.Data;

+ 6 - 31
dao/src/main/resources/com/koobietech/eas/dao/mapper/AdminLoginMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.koobietech.eas.dao.mapper.AdminLoginMapper">
-    <resultMap id="permissionResultMap" type="com.koobietech.eas.dao.adminLoginPojo.Permission">
+    <resultMap id="permissionResultMap" type="com.koobietech.eas.dao.login.pojo.Permission">
         <!-- 映射查询结果到实体类属性 -->
         <id column="id" property="id"/>
         <result column="name" property="name"/>
@@ -12,7 +12,7 @@
         <result column="description" property="description"/>
     </resultMap>
 
-    <resultMap id="departmentResultMap" type="com.koobietech.eas.dao.adminLoginPojo.Department">
+    <resultMap id="departmentResultMap" type="com.koobietech.eas.dao.login.pojo.Department">
         <!-- 映射查询结果到实体类属性 -->
         <id column="id" property="id"/>
         <result column="depname" property="depname"/>
@@ -25,7 +25,7 @@
         <result column="create_uid" property="createUid"/>
     </resultMap>
 
-    <resultMap id="userDetailResultMap" type="com.koobietech.eas.dao.adminLoginPojo.UserDetail">
+    <resultMap id="userDetailResultMap" type="com.koobietech.eas.dao.login.pojo.UserDetail">
         <!-- 映射查询结果到实体类属性 -->
         <result column="id" property="id"/>
         <result column="username" property="username"/>
@@ -33,7 +33,7 @@
         <result column="email" property="email"/>
     </resultMap>
 
-    <resultMap id="permissionResult" type="com.koobietech.eas.dao.adminLoginPojo.Permission">
+    <resultMap id="permissionResult" type="com.koobietech.eas.dao.login.pojo.Permission">
         <!-- 映射查询结果到实体类属性 -->
         <id column="id" property="id"/>
         <result column="name" property="name"/>
@@ -44,7 +44,7 @@
         <result column="description" property="description"/>
     </resultMap>
 
-    <resultMap id="departmentResult" type="com.koobietech.eas.dao.adminLoginPojo.Department">
+    <resultMap id="departmentResult" type="com.koobietech.eas.dao.login.pojo.Department">
         <!-- 映射查询结果到实体类属性 -->
         <id column="id" property="id"/>
         <result column="depname" property="depname"/>
@@ -57,7 +57,7 @@
         <result column="create_uid" property="createUid"/>
     </resultMap>
 
-    <resultMap id="studentDetailResult" type="com.koobietech.eas.dao.adminLoginPojo.UserDetail">
+    <resultMap id="studentDetailResult" type="com.koobietech.eas.dao.login.pojo.UserDetail">
         <!-- 映射查询结果到实体类属性 -->
         <result column="id" property="id"/>
         <result column="student_name" property="username"/>
@@ -65,31 +65,6 @@
         <result column="email" property="email"/>
     </resultMap>
 
-
-
-<!--    <resultMap id="userDetailResultMap" type="com.koobietech.eas.dao.adminLoginPojo.UserDetail">-->
-<!--        &lt;!&ndash; 映射查询结果到实体类属性 &ndash;&gt;-->
-<!--        <result column="id" property="id" />-->
-<!--        <result column="username" property="username" />-->
-<!--        <result column="phone" property="phone" />-->
-<!--        <result column="email" property="email" />-->
-<!--        <collection property="departments" ofType="com.koobietech.eas.dao.adminLoginPojo.Department">-->
-<!--            <id column="dep_id" property="id" />-->
-<!--            <result column="depname" property="depname" />-->
-<!--            &lt;!&ndash; 其他部门属性的映射 &ndash;&gt;-->
-<!--        </collection>-->
-<!--        <collection property="permissions" ofType="com.koobietech.eas.dao.adminLoginPojo.Permission">-->
-<!--            <id column="per_id" property="id" />-->
-<!--            <result column="name" property="name" />-->
-<!--            &lt;!&ndash; 其他权限属性的映射 &ndash;&gt;-->
-<!--        </collection>-->
-<!--    </resultMap>-->
-
-
-
-
-
-
     <select id="getUserPermissionsById" resultMap="permissionResultMap">
         SELECT p.id, p.name, p.is_active, p.create_time, p.modify_time, p.create_uid, p.description
         FROM eas_sys_userinfo u

+ 10 - 9
pom.xml

@@ -35,6 +35,7 @@
         <knife4j.version>4.1.0</knife4j.version>
         <easypoi.version>4.4.0</easypoi.version>
         <pagehelper.starter.version>1.3.1</pagehelper.starter.version>
+        <pagehelper.version>5.2.1</pagehelper.version>
         <maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
         <captcha.version>1.3.0</captcha.version>
         <xerces.version>2.9.1</xerces.version>
@@ -52,19 +53,19 @@
                 <artifactId>xercesImpl</artifactId>
                 <version>${xerces.version}</version>
             </dependency>
-            <dependency>
-                <groupId>cn.afterturn</groupId>
-                <artifactId>easypoi-wps</artifactId>
-                <version>${easypoi.version}</version>
-            </dependency>
             <dependency>
                 <groupId>com.anji-plus</groupId>
-                <artifactId>spring-boot-starter-captcha</artifactId>
+                <artifactId>captcha</artifactId>
                 <version>${captcha.version}</version>
             </dependency>
             <dependency>
                 <groupId>cn.afterturn</groupId>
-                <artifactId>easypoi-spring-boot-starter</artifactId>
+                <artifactId>easypoi-base</artifactId>
+                <version>${easypoi.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>cn.afterturn</groupId>
+                <artifactId>easypoi-annotation</artifactId>
                 <version>${easypoi.version}</version>
             </dependency>
             <dependency>
@@ -74,8 +75,8 @@
             </dependency>
             <dependency>
                 <groupId>com.github.pagehelper</groupId>
-                <artifactId>pagehelper-spring-boot-starter</artifactId>
-                <version>${pagehelper.starter.version}</version>
+                <artifactId>pagehelper</artifactId>
+                <version>${pagehelper.version}</version>
             </dependency>
             <dependency>
                 <groupId>com.github.xiaoymin</groupId>

+ 2 - 2
security/src/main/java/com/koobietech/eas/security/filter/EasSecurityFilter.java

@@ -3,8 +3,8 @@ package com.koobietech.eas.security.filter;
 import com.koobietech.eas.common.exception.EasException;
 import com.koobietech.eas.common.pojo.JwtUserDto;
 import com.koobietech.eas.common.utils.JwtManager;
-import com.koobietech.eas.dao.adminLoginPojo.Permission;
-import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
+import com.koobietech.eas.dao.login.pojo.Permission;
+import com.koobietech.eas.dao.login.pojo.UserDetail;
 import com.koobietech.eas.service.LoginRedisService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

+ 0 - 82
security/src/main/java/com/koobietech/eas/security/filter/EasStudentFilter.java

@@ -1,82 +0,0 @@
-package com.koobietech.eas.security.filter;
-
-import com.koobietech.eas.common.exception.EasException;
-import com.koobietech.eas.common.pojo.JwtUserDto;
-import com.koobietech.eas.common.utils.JwtManager;
-import com.koobietech.eas.dao.adminLoginPojo.Permission;
-import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
-import com.koobietech.eas.service.StudentLoginRedisService;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-import org.springframework.web.filter.OncePerRequestFilter;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import javax.annotation.Resource;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-@Component
-public class EasStudentFilter extends OncePerRequestFilter {
-
-    @Resource
-    private StudentLoginRedisService studentLoginRedisService;
-
-    @Resource
-    JwtManager jwtManager;
-
-    @Override
-    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
-
-        //从请求里面拿到token
-        String token = request.getHeader("Authorization");
-        //判断token是否存在
-        if (StringUtils.hasText(token)) {
-            //解析token成JwtUserDto
-            JwtUserDto jwtUserDto = null;
-            try {
-                //过滤器 允许 Token 不正确, 后面Security 会拦截处理
-                jwtUserDto = jwtManager.decodeJwt(token);
-            } catch ( EasException e) {}
-            if ( Objects.nonNull(jwtUserDto) ) {
-                //判断token是否有效
-                UserDetail userDetail = studentLoginRedisService.checkToken(jwtUserDto);
-
-                // 获取当前的 SecurityContext 对象,用于保存当前用户的安全上下文信息
-                SecurityContext context = SecurityContextHolder.getContext();
-
-                // 如果获取到了有效的用户对象
-                if (Objects.nonNull(userDetail)) {
-
-                    // 获取用户的权限列表
-                    List<Permission> permissions = userDetail.getPermissions();
-                    // 创建一个 ArrayList 集合,用于存储用户权限对应的 SimpleGrantedAuthority 权限对象
-                    ArrayList<SimpleGrantedAuthority> objects = new ArrayList<>();
-
-                    // 遍历学生的权限
-                    for (Permission studentPermission : permissions) {
-                        // 创建一个 SimpleGrantedAuthority 权限对象,并添加到集合中
-                        SimpleGrantedAuthority authority = new SimpleGrantedAuthority(studentPermission.getDescription());
-                        objects.add(authority);
-                    }
-
-                    // 使用用户的用户名、空凭证参数和权限对象集合创建一个 UsernamePasswordAuthenticationToken 身份验证令牌
-                    UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(userDetail.getUsername(), null, objects);
-
-                    // 将身份验证令牌设置到当前的 SecurityContext 中
-                    context.setAuthentication(authenticationToken);
-                }
-            }
-        }
-        filterChain.doFilter(request, response);
-    }
-
-}

+ 7 - 2
service/pom.xml

@@ -14,11 +14,12 @@
         </dependency>
         <dependency>
             <groupId>cn.afterturn</groupId>
-            <artifactId>easypoi-spring-boot-starter</artifactId>
+            <artifactId>easypoi-base</artifactId>
+            <version>4.3.0</version>
         </dependency>
         <dependency>
             <groupId>com.github.pagehelper</groupId>
-            <artifactId>pagehelper-spring-boot-starter</artifactId>
+            <artifactId>pagehelper</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
@@ -56,6 +57,10 @@
             <version>1.3.0</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+        </dependency>
     </dependencies>
 
     <parent>

+ 2 - 2
service/src/main/java/com/koobietech/eas/service/AdminLoginService.java

@@ -2,8 +2,8 @@ package com.koobietech.eas.service;
 
 import com.anji.captcha.model.common.ResponseModel;
 import com.koobietech.eas.common.result.JsonResult;
-import com.koobietech.eas.dao.Pojo.AdminPojo;
-import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
+import com.koobietech.eas.dao.pojo.AdminPojo;
+import com.koobietech.eas.dao.login.pojo.UserDetail;
 import com.koobietech.eas.dao.dto.LoginToken;
 
 public interface AdminLoginService {

+ 7 - 0
service/src/main/java/com/koobietech/eas/service/ArchiveRedisService.java

@@ -0,0 +1,7 @@
+package com.koobietech.eas.service;
+
+public interface ArchiveRedisService {
+    void saveArchiveToken(String token, String filePath);
+
+    String getFilePathByToken(String token);
+}

+ 11 - 0
service/src/main/java/com/koobietech/eas/service/EasArchiveFileDownloadService.java

@@ -0,0 +1,11 @@
+package com.koobietech.eas.service;
+
+import javax.servlet.http.HttpServletResponse;
+
+public interface EasArchiveFileDownloadService {
+    String getArchiveToken(Integer archiveId);
+
+    String getFilePathByToken(String archiveToken);
+
+    boolean downloadFileByToken(String archiveToken, HttpServletResponse response);
+}

+ 1 - 1
service/src/main/java/com/koobietech/eas/service/LoginRedisService.java

@@ -1,7 +1,7 @@
 package com.koobietech.eas.service;
 
 import com.koobietech.eas.common.pojo.JwtUserDto;
-import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
+import com.koobietech.eas.dao.login.pojo.UserDetail;
 
 
 public interface LoginRedisService {

+ 0 - 19
service/src/main/java/com/koobietech/eas/service/StudentLoginRedisService.java

@@ -1,19 +0,0 @@
-package com.koobietech.eas.service;
-
-import com.koobietech.eas.common.pojo.JwtUserDto;
-import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
-
-public interface StudentLoginRedisService {
-
-    String createJwtTokenKey(JwtUserDto jwtUserDto);
-
-    String createJwtRefreshTokenKey(JwtUserDto jwtUserDto);
-
-    void loginSavaCache(String redisTokenKey, UserDetail userDetail, Integer token_expires);
-
-    UserDetail loginGetCache(String newRedisTokenKey);
-
-    UserDetail checkToken(JwtUserDto jwtUserDto);
-
-    Boolean loginDeleteCache(String newRedisRefreshTokenKey);
-}

+ 4 - 9
service/src/main/java/com/koobietech/eas/service/StudentLoginService.java

@@ -2,18 +2,13 @@ package com.koobietech.eas.service;
 
 import com.anji.captcha.model.common.ResponseModel;
 import com.koobietech.eas.common.result.JsonResult;
-import com.koobietech.eas.dao.Pojo.AdminPojo;
-import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
 import com.koobietech.eas.dao.dto.LoginToken;
+import com.koobietech.eas.dao.pojo.AdminPojo;
 
 
+/**
+ * @author lc
+ */
 public interface StudentLoginService {
     LoginToken studentLogin(AdminPojo adminPojo);
-
-    LoginToken refreshToken(String refreshToken);
-
-    //将ResponseModel返回值类型转成JsonResult返回类型
-    JsonResult verifyToJsonResult(ResponseModel response);
-
-    UserDetail getStudentInfo(String token);
 }

+ 26 - 27
service/src/main/java/com/koobietech/eas/service/impl/AdminLoginServiceImpl.java

@@ -1,14 +1,13 @@
 package com.koobietech.eas.service.impl;
 
 import com.anji.captcha.model.common.ResponseModel;
-import com.koobietech.eas.common.constant.UserType;
+import com.koobietech.eas.dao.constant.UserType;
 import com.koobietech.eas.common.exception.EasException;
 import com.koobietech.eas.common.pojo.JwtUserDto;
 import com.koobietech.eas.common.result.JsonResult;
 import com.koobietech.eas.common.utils.JwtManager;
 import com.koobietech.eas.common.utils.PasswordManager;
-import com.koobietech.eas.dao.Pojo.AdminPojo;
-import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
+import com.koobietech.eas.dao.login.pojo.UserDetail;
 import com.koobietech.eas.dao.dto.LoginToken;
 import com.koobietech.eas.dao.mapper.AdminLoginMapper;
 import com.koobietech.eas.mbg.mapper.EasSysUserinfoMapper;
@@ -16,12 +15,12 @@ import com.koobietech.eas.mbg.model.EasSysUserinfo;
 import com.koobietech.eas.mbg.model.EasSysUserinfoExample;
 import com.koobietech.eas.service.AdminLoginService;
 import com.koobietech.eas.service.LoginRedisService;
+import com.koobietech.eas.dao.pojo.AdminPojo;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.List;
-import java.util.Objects;
 import java.util.Optional;
 
 @Service
@@ -63,29 +62,29 @@ public class AdminLoginServiceImpl implements AdminLoginService {
         userDetailInRedis.setPermissions(adminLoginMapper.getUserPermissionsById(id));
         System.out.println("接收后" + userDetailInRedis);
 
-            // 先调用自定义sql查询用户详细信息、部门信息 和 权限信息
-            UserType userType = UserType.TEACHER;
-            if (userDetailInRedis.getUsername().equals("admin")) {
-                userType = UserType.ADMIN;
-            }
-
-            // 生成token
-            JwtUserDto jwtUserDto = new JwtUserDto(userDetailInRedis.getUsername(), userDetailInRedis.getId(), userType);
-            String token = jwtManager.createJwt(jwtUserDto, token_expires);
-            String refreshToken = jwtManager.createJwt(jwtUserDto, refreshToken_expires);
-            System.out.println("token:" + token);
-            System.out.println("refreshToken:" + refreshToken);
-
-            // 生成redis key
-            String redisTokenKey = loginRedisService.createJwtTokenKey(jwtUserDto);
-            String redisRefreshTokenKey = loginRedisService.createJwtRefreshTokenKey(jwtUserDto);
-
-            // 将token存入redis
-            loginRedisService.loginSaveCache(redisTokenKey, userDetailInRedis, token_expires);
-            loginRedisService.loginSaveCache(redisRefreshTokenKey, userDetailInRedis, refreshToken_expires);
-
-            // 登录成功
-            return new LoginToken(token, refreshToken);
+        // 先调用自定义sql查询用户详细信息、部门信息 和 权限信息
+        UserType userType = UserType.TEACHER;
+        if (userDetailInRedis.getUsername().equals("admin")) {
+            userType = UserType.ADMIN;
+        }
+        userDetailInRedis.setUserType(userType);
+        // 生成token
+        JwtUserDto jwtUserDto = new JwtUserDto(userDetailInRedis.getUsername(), userDetailInRedis.getId(), userType);
+        String token = jwtManager.createJwt(jwtUserDto, token_expires);
+        String refreshToken = jwtManager.createJwt(jwtUserDto, refreshToken_expires);
+        System.out.println("token:" + token);
+        System.out.println("refreshToken:" + refreshToken);
+
+        // 生成redis key
+        String redisTokenKey = loginRedisService.createJwtTokenKey(jwtUserDto);
+        String redisRefreshTokenKey = loginRedisService.createJwtRefreshTokenKey(jwtUserDto);
+
+        // 将token存入redis
+        loginRedisService.loginSaveCache(redisTokenKey, userDetailInRedis, token_expires);
+        loginRedisService.loginSaveCache(redisRefreshTokenKey, userDetailInRedis, refreshToken_expires);
+
+        // 登录成功
+        return new LoginToken(token, refreshToken);
     }
 
     @Override

+ 31 - 0
service/src/main/java/com/koobietech/eas/service/impl/ArchiveRedisServiceImpl.java

@@ -0,0 +1,31 @@
+package com.koobietech.eas.service.impl;
+
+import com.koobietech.eas.common.exception.EasException;
+import com.koobietech.eas.common.service.RedisService;
+import com.koobietech.eas.service.ArchiveRedisService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+
+@Service
+public class ArchiveRedisServiceImpl implements ArchiveRedisService {
+    @Resource
+    private RedisService redisService;
+
+    private final int ARCHIVE_EXPIRE_TIME = 60*3;
+
+    @Override
+    public void saveArchiveToken(String token, String filePath) {
+        //将token和filePath存入redis,时间设置成三分钟
+        redisService.set(token, filePath, ARCHIVE_EXPIRE_TIME);
+    }
+
+    @Override
+    public String getFilePathByToken(String token) {
+        // 如果取出的值为空,说明token已经过期,返回null
+        // 如果取出的值不为空,说明token没有过期,返回v值
+        return (String) redisService.get(token);
+    }
+
+}

+ 2 - 2
service/src/main/java/com/koobietech/eas/service/impl/EasArcTlsAttendanceServiceImpl.java

@@ -9,8 +9,8 @@ import com.koobietech.eas.common.constant.FileType;
 import com.koobietech.eas.common.exception.EasException;
 import com.koobietech.eas.common.result.PageData;
 import com.koobietech.eas.common.utils.SecurityUtils;
-import com.koobietech.eas.dao.Pojo.EasArcTlsAttendancePojo;
-import com.koobietech.eas.dao.Pojo.EasArcTlsScoresPojo;
+import com.koobietech.eas.dao.pojo.EasArcTlsAttendancePojo;
+import com.koobietech.eas.dao.pojo.EasArcTlsScoresPojo;
 import com.koobietech.eas.dao.dto.ArchivesDto;
 import com.koobietech.eas.dao.mapper.AttendanceQueryMapper;
 import com.koobietech.eas.mbg.mapper.*;

+ 7 - 7
service/src/main/java/com/koobietech/eas/service/impl/EasArcTlsScoresServiceImpl.java

@@ -4,15 +4,12 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil;
 import cn.afterturn.easypoi.excel.ExcelImportUtil;
 import cn.afterturn.easypoi.excel.entity.ExportParams;
 import cn.afterturn.easypoi.excel.entity.ImportParams;
-import cn.afterturn.easypoi.handler.inter.IExcelExportServer;
 import cn.hutool.core.bean.BeanUtil;
 import com.koobietech.eas.common.constant.FileType;
 import com.koobietech.eas.common.exception.EasException;
 import com.koobietech.eas.common.result.PageData;
-import com.koobietech.eas.common.utils.FileManager;
 import com.koobietech.eas.common.utils.SecurityUtils;
-import com.koobietech.eas.common.utils.StudentArchiveGenerator;
-import com.koobietech.eas.dao.Pojo.EasArcTlsScoresPojo;
+import com.koobietech.eas.dao.pojo.EasArcTlsScoresPojo;
 import com.koobietech.eas.dao.dto.ArchivesDto;
 import com.koobietech.eas.mbg.mapper.EasArcArchivesMapper;
 import com.koobietech.eas.mbg.mapper.EasArcTlsScoresMapper;
@@ -137,15 +134,18 @@ public class EasArcTlsScoresServiceImpl implements EasArcTlsScoresService {
         try {
             List<EasArcTlsScoresPojo> score = ExcelImportUtil.importExcel(
                     inputStream, EasArcTlsScoresPojo.class, params);
+            EasArcTlsScores easArcTlsScores = null;
             for ( EasArcTlsScoresPojo easArcTlsScoresPojo : score) {
-                if ( easArcTlsScoresPojo.getScore() == null
-                        || easArcTlsScoresPojo.getScore().equals("") ) {
+                if ( Objects.isNull(easArcTlsScoresPojo.getStudentNumber())
+                        || !StringUtils.hasText(easArcTlsScoresPojo.getStudentNumber()) ) {
                     continue;
                 }
                 easArcTlsScoresPojo.setCreateTime(new Date());
-                EasArcTlsScores easArcTlsScores = new EasArcTlsScores();
+                easArcTlsScores = new EasArcTlsScores();
                 BeanUtil.copyProperties(easArcTlsScoresPojo, easArcTlsScores);
                 easArcTlsScoresMapper.insert(easArcTlsScores);
+            }
+            if ( Objects.nonNull(easArcTlsScores) ) {
                 saveStudentScoreArchive(easArcTlsScores);
             }
         } catch (FileNotFoundException e) {

+ 150 - 0
service/src/main/java/com/koobietech/eas/service/impl/EasArchiveFileDownloadServiceImpl.java

@@ -0,0 +1,150 @@
+package com.koobietech.eas.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.koobietech.eas.common.constant.ArchiveFileType;
+import com.koobietech.eas.common.exception.EasException;
+import com.koobietech.eas.common.utils.PasswordManager;
+import com.koobietech.eas.mbg.mapper.EasArcArchivesMapper;
+import com.koobietech.eas.mbg.model.EasArcArchives;
+import com.koobietech.eas.service.ArchiveRedisService;
+import com.koobietech.eas.service.EasArchiveFileDownloadService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Objects;
+
+@Service
+public class EasArchiveFileDownloadServiceImpl implements EasArchiveFileDownloadService {
+    @Resource
+    private PasswordManager passwordManager;
+
+    @Resource
+    private ArchiveRedisService archiveRedisService;
+
+    @Resource
+    private EasArcArchivesMapper archivesMapper;
+
+
+    @Override
+    public String getArchiveToken(Integer archiveId) {
+        //在getArchiveToken中,使用UUID随机生成字符串作为k键,
+        // 为了保证每次生成的字符串不同,在生成的时候加上时间戳
+        // 使用根据id查询到的所需文件在本机上的地址file_path作为v值
+        // 存入redis,时间设置成三分钟
+        // 获取当前时间戳
+        long timestamp = System.currentTimeMillis();
+        // 使用UUID生成一个唯一标识
+        String uniqueId = UUID.randomUUID().toString();
+        // 将用户传入的ID与时间戳和唯一标识拼接起来
+        String token = archiveId + "_" + timestamp + "_" + uniqueId;
+        System.out.println("生成的file token 拼接版:"+token);
+        EasArcArchives easArcArchives = archivesMapper.selectByPrimaryKey(archiveId);
+        // 获取文件路径
+        String filePath = easArcArchives.getFilePath();
+
+        archiveRedisService.saveArchiveToken(token,filePath);
+        // 将token返回给用户
+        String archiveToken = passwordManager.archiveEncryptPassword(token);
+        System.out.println("加密生成的file token 加密版:"+archiveToken);
+        return archiveToken;
+
+    }
+
+    @Override
+    public String getFilePathByToken(String archiveToken) {
+        //在getFilePathByToken中,使用token作为k键,从redis中取出v值
+        // 如果取出的值为空,说明token已经过期,返回null
+        // 如果取出的值不为空,说明token没有过期,返回v值
+        String token = passwordManager.archiveDecryptPassword(archiveToken);
+        System.out.println("解密后的file token:"+token);
+        return archiveRedisService.getFilePathByToken(token);
+    }
+
+
+
+    @Override
+    public boolean downloadFileByToken(String archiveToken, HttpServletResponse response) {
+        //加入判断
+
+        String filePath = getFilePathByToken(archiveToken);
+
+        //加一个判断,如果filePath为空,说明token已经过期,抛出异常
+        if (filePath == null) {
+            throw new EasException("获取文件超时,请重新获取token", 4003);
+        }
+        String fileExtension = getFileExtension(filePath);
+        String archiveFileType = ArchiveFileType.getContentType(fileExtension);
+
+
+        if (archiveFileType != null) {
+            response.addHeader("Content-Type", archiveFileType);
+            response.addHeader("Content-Disposition", "attachment; filename=" + getFileSaveName(filePath) );
+        } else {
+            throw new EasException("文件类型未知", 4000);
+        }
+        OutputStream outputStream = null;
+        FileInputStream fileInputStream = null;
+        try {
+            outputStream = response.getOutputStream();
+            fileInputStream = new FileInputStream(filePath);
+            byte[] buffer = new byte[1024];
+            int bytesRead;
+            while ((bytesRead = fileInputStream.read(buffer)) != -1) {
+                outputStream.write(buffer, 0, bytesRead);
+            }
+            outputStream.flush();
+        } catch (IOException e) {
+            throw new EasException("文件传输失败", 4001);
+        } finally {
+            try {
+                if (Objects.nonNull(outputStream)) {
+                    outputStream.close();
+                }
+                if (Objects.nonNull(fileInputStream)) {
+                    fileInputStream.close();
+                }
+            } catch (IOException e) {}
+        }
+        return true;
+    }
+
+    private String getFileExtension(String filePath) {
+        // 获取文件后缀名逻辑,请根据实际情况实现
+        if (filePath == null || filePath.isEmpty()) {
+            return "";
+        }
+
+        int dotIndex = filePath.lastIndexOf(".");
+        if (dotIndex == -1 || dotIndex == filePath.length() - 1) {
+            return "";
+        }
+
+        String extension = filePath.substring(dotIndex);
+        System.out.println("文件后缀名:" + extension);
+
+        return extension;
+    }
+
+    private String getFileSaveName(String filePath) {
+        // 获取文件后缀名逻辑,请根据实际情况实现
+        if (filePath == null || filePath.isEmpty()) {
+            return "";
+        }
+
+        int dotIndex = filePath.lastIndexOf(File.separator );
+        if (dotIndex == -1 || dotIndex == filePath.length() - 1) {
+            return "";
+        }
+
+        String filename = filePath.substring(dotIndex + 1);
+        System.out.println("文件名:" + filename);
+
+        return filename;
+    }
+
+}

+ 4 - 3
service/src/main/java/com/koobietech/eas/service/impl/LoginRedisServiceImpl.java

@@ -3,14 +3,15 @@ package com.koobietech.eas.service.impl;
 import com.koobietech.eas.common.exception.EasException;
 import com.koobietech.eas.common.pojo.JwtUserDto;
 import com.koobietech.eas.common.service.RedisService;
-import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
+import com.koobietech.eas.dao.login.pojo.UserDetail;
 import com.koobietech.eas.service.LoginRedisService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 
+/**
+ * @author lc
+ */
 @Service
 public class LoginRedisServiceImpl implements LoginRedisService {
 

+ 0 - 57
service/src/main/java/com/koobietech/eas/service/impl/StudentLoginRedisServiceImpl.java

@@ -1,57 +0,0 @@
-package com.koobietech.eas.service.impl;
-
-import com.koobietech.eas.common.exception.EasException;
-import com.koobietech.eas.common.pojo.JwtUserDto;
-import com.koobietech.eas.common.service.RedisService;
-import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
-import com.koobietech.eas.service.StudentLoginRedisService;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-
-@Service
-public class StudentLoginRedisServiceImpl implements StudentLoginRedisService {
-
-    @Resource
-    RedisService redisService;
-
-
-    @Override
-    public UserDetail checkToken(JwtUserDto jwtUserDto) {
-        String jwtKey = createJwtTokenKey(jwtUserDto);
-        //判断redis里面是否有这个key
-        if (!redisService.hasKey(jwtKey)) {
-            throw new EasException("token已过期");
-        }
-        return (UserDetail) redisService.get(jwtKey);
-    }
-
-    @Override
-    public Boolean loginDeleteCache(String newRedisRefreshTokenKey) {
-        return redisService.del(newRedisRefreshTokenKey);
-    }
-
-    public String createJwtTokenKey(JwtUserDto jwtUserDto) {
-        //根据jwtUserDto 生成jwtKey,格式为:eas_token_{id}_{username}_{type}
-        return "eas_token" + "_" + jwtUserDto.getId() + "_" + jwtUserDto.getUsername() + "_" + jwtUserDto.getType();
-    }
-
-    public String createJwtRefreshTokenKey(JwtUserDto jwtUserDto) {
-        //根据jwtUserDto 生成jwtKey,格式为:eas_refresh_{id}_{username}_{type}
-        return "eas_refresh" + "_" + jwtUserDto.getId() + "_" + jwtUserDto.getUsername() + "_" + jwtUserDto.getType();
-    }
-
-    public void loginSavaCache(String redisTokenKey, UserDetail userDetail, Integer token_expires) {
-        redisService.set(redisTokenKey, userDetail, token_expires);
-    }
-
-    public UserDetail loginGetCache(String newRedisTokenKey) {
-        //看看redis里面有没有这个key
-        if (redisService.hasKey(newRedisTokenKey)) {
-            //有的话,就从redis里面取出来
-            return (UserDetail) redisService.get(newRedisTokenKey);
-        }
-        return null;
-    }
-
-}

+ 13 - 89
service/src/main/java/com/koobietech/eas/service/impl/StudentLoginServiceImpl.java

@@ -1,20 +1,18 @@
 package com.koobietech.eas.service.impl;
 
-import com.anji.captcha.model.common.ResponseModel;
-import com.koobietech.eas.common.constant.UserType;
 import com.koobietech.eas.common.exception.EasException;
 import com.koobietech.eas.common.pojo.JwtUserDto;
-import com.koobietech.eas.common.result.JsonResult;
 import com.koobietech.eas.common.utils.JwtManager;
 import com.koobietech.eas.common.utils.PasswordManager;
-import com.koobietech.eas.dao.Pojo.AdminPojo;
-import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
+import com.koobietech.eas.dao.constant.UserType;
 import com.koobietech.eas.dao.dto.LoginToken;
+import com.koobietech.eas.dao.login.pojo.UserDetail;
 import com.koobietech.eas.dao.mapper.AdminLoginMapper;
+import com.koobietech.eas.dao.pojo.AdminPojo;
 import com.koobietech.eas.mbg.mapper.EasSysStudentMapper;
 import com.koobietech.eas.mbg.model.EasSysStudent;
 import com.koobietech.eas.mbg.model.EasSysStudentExample;
-import com.koobietech.eas.service.StudentLoginRedisService;
+import com.koobietech.eas.service.LoginRedisService;
 import com.koobietech.eas.service.StudentLoginService;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
@@ -40,128 +38,57 @@ public class StudentLoginServiceImpl implements StudentLoginService {
     AdminLoginMapper adminLoginMapper;
 
     @Resource
-    StudentLoginRedisService studentLoginRedisService;
+    LoginRedisService studentLoginRedisService;
 
     @Resource
     JwtManager jwtManager;
 
     // token过期时间 单位:s
-    private final Integer token_expires = 60 * 3;
+    private final Integer token_expires = 24 * 60 * 60;
 
-    private final Integer refreshToken_expires = 60 * 7;
+    private final Integer refreshToken_expires = 48 * 60 * 60;
 
     @Override
     public LoginToken studentLogin(AdminPojo adminPojo) {
-        if (adminPojo.getUsername() == null || adminPojo.getPasswd() == null || adminPojo.getUsername().equals("") || adminPojo.getPasswd().equals("")) {
+        if (adminPojo.getUsername() == null || adminPojo.getPasswd() == null
+                || adminPojo.getUsername().equals("") || adminPojo.getPasswd().equals("")) {
             throw new EasException("用户不存在", 412);
         }
         EasSysStudent easSysStudent = findStudentByUsername(adminPojo.getUsername(), adminPojo.getPasswd());
 
-        // 接收到对象,根据这个信息去查询数据库,然后自定义sql查用户信息,存在redis里面当做token
-        System.out.println(easSysStudent);
-
         Long adminId = easSysStudent.getId();
 
         //先调用自定义sql查询detail类中的数据 最后把这个类封装到redis里面
         UserDetail userDetail = adminLoginMapper.getStudentDetailById(adminId);
-        System.out.println("接收前" + userDetail);
         userDetail.setDepartments(adminLoginMapper.getStudentDepartmentsById(adminId));
         userDetail.setPermissions(adminLoginMapper.getStudentPermissionsById(adminId));
-        System.out.println("接收后" + userDetail);
-
-        // 先调用自定义sql查询学生详细信息、部门信息 和 权限信息
-        UserType student = UserType.MEMBER;
 
+        userDetail.setUserType(UserType.MEMBER);
         // 生成token
-        JwtUserDto jwtUserDto = new JwtUserDto(userDetail.getUsername(), userDetail.getId(), student);
+        JwtUserDto jwtUserDto = new JwtUserDto(userDetail.getUsername(), userDetail.getId(), UserType.MEMBER);
 
         String token = jwtManager.createJwt(jwtUserDto, token_expires);
 
         String refreshToken = jwtManager.createJwt(jwtUserDto, refreshToken_expires);
 
-        System.out.println("token" + token);
-
-        System.out.println("refreshToken" + refreshToken);
-
         // 生成redis key
         String jwtTokenKey = studentLoginRedisService.createJwtTokenKey(jwtUserDto);
 
         String jwtRefreshTokenKey = studentLoginRedisService.createJwtRefreshTokenKey(jwtUserDto);
 
         // 将token存入redis
-        studentLoginRedisService.loginSavaCache(jwtTokenKey, userDetail, token_expires);
+        studentLoginRedisService.loginSaveCache(jwtTokenKey, userDetail, token_expires);
 
-        studentLoginRedisService.loginSavaCache(jwtRefreshTokenKey, userDetail, refreshToken_expires);
+        studentLoginRedisService.loginSaveCache(jwtRefreshTokenKey, userDetail, refreshToken_expires);
 
         // 登录成功
         return new LoginToken(token, refreshToken);
     }
 
-    @Override
-    public LoginToken refreshToken(String refreshToken) {
-        // 解析refresh token
-        JwtUserDto jwtUserDto = jwtManager.decodeJwt(refreshToken);
-
-        //生成新的 刷新k值 (refresh_token)
-        String newRedisRefreshTokenKey = studentLoginRedisService.createJwtRefreshTokenKey(jwtUserDto);
-
-        //查询redis里面有没有这个k值
-        UserDetail userDetail = studentLoginRedisService.loginGetCache(newRedisRefreshTokenKey);
-
-        if (userDetail == null) {
-            throw new EasException("token已过期", 412);
-        }
-
-        //如果不为空 那UserDetail里面就封装了用户的信息 生成新的token和refresh token
-        String newToken = jwtManager.createJwt(jwtUserDto, token_expires);
-        String newRefreshToken = jwtManager.createJwt(jwtUserDto, refreshToken_expires);
-
-        //生成新的k值 (token)
-        String newRedisTokenKey = studentLoginRedisService.createJwtTokenKey(jwtUserDto);
-
-        // 更新Redis中的token和refresh token
-        studentLoginRedisService.loginSavaCache(newRedisTokenKey, userDetail, token_expires);
-        studentLoginRedisService.loginSavaCache(newRedisRefreshTokenKey, userDetail, refreshToken_expires);
-        return new LoginToken(newToken, newRefreshToken);
-    }
-
-    @Override
-    public JsonResult verifyToJsonResult(ResponseModel response) {
-        JsonResult result = new JsonResult();
-
-        if (response != null) {
-            result.setMsg(response.getRepMsg());
-            result.setCode(Integer.parseInt(response.getRepCode()));
-            result.setStatus(response.isSuccess());
-            result.setData(response.getRepData());
-        } else {
-            throw new EasException("ResponseModel参数为空", 9000);
-        }
-
-        return result;
-    }
-
-    @Override
-    public UserDetail getStudentInfo(String token) {
-
-        try {
-            // 解析token
-            JwtUserDto jwtUserDto = jwtManager.decodeJwt(token);
-            // 封装成字符以便在redis中查找
-            String jwtTokenKey = studentLoginRedisService.createJwtTokenKey(jwtUserDto);
-            UserDetail userDetail = studentLoginRedisService.loginGetCache(jwtTokenKey);
-            return userDetail;
-        } catch (EasException e) {
-            throw new EasException("Token获取学生信息失败", e);
-        }
-
-    }
-
     private EasSysStudent findStudentByUsername(String username, String password) {
         EasSysStudentExample easSysStudentExample = new EasSysStudentExample();
         easSysStudentExample.createCriteria().andStudentNameEqualTo(username);
         List<EasSysStudent> studentList = easSysStudentMapper.selectByExample(easSysStudentExample);
-        // 使用Optional简化判断
         Optional<EasSysStudent> optionalStudent = studentList.stream().findFirst();
 
         if (optionalStudent.isEmpty()) {
@@ -170,7 +97,6 @@ public class StudentLoginServiceImpl implements StudentLoginService {
         if (studentList.size() > 1) {
             throw new EasException("用户数据异常", 9902);
         }
-
         EasSysStudent easSysStudent = optionalStudent.get();
         // 验证密码 这个方法里面有解密 如果解密失败会抛出异常
         validatePassword(password, easSysStudent.getPasswd());
@@ -179,8 +105,6 @@ public class StudentLoginServiceImpl implements StudentLoginService {
 
     private void validatePassword(String inputPassword, String encryptedPassword) {
         String decryptedPassword = passwordManager.decryptPassword(inputPassword);
-        System.out.println("aes解密密码decryptedPassword: " + decryptedPassword);
-        System.out.println("数据库里的加密密码easSysUserinfo.getPasswd(): " + encryptedPassword);
         if (!passwordEncoder.matches(decryptedPassword, encryptedPassword)) {
             throw new EasException("密码不正确", 9901);
         }