1
0

15 Commits 09f4300500 ... b9d637e0f7

Autor SHA1 Mensagem Data
  常忠宇 b9d637e0f7 class há 1 ano atrás
  wuheng 082dde9184 Merge branch 'wheng' of wuheng/eas-system into master há 1 ano atrás
  wuheng 334ecd1bcd bug há 1 ano atrás
  wuheng ae0826449d Merge branch 'wheng' of wuheng/eas-system into master há 1 ano atrás
  wuheng 0e36db4cbc merge code execel há 1 ano atrás
  wuheng 8f787d4f68 Merge branch 'superb' of wuheng/eas-system into master há 1 ano atrás
  wuheng 7453c5c2a3 处理遗产该信息 há 1 ano atrás
  wuheng c20c5eb410 Merge branch 'superb' of wuheng/eas-system into master há 1 ano atrás
  wuheng c96fa97788 解决循环依赖 há 1 ano atrás
  wuheng d20aa5320f Merge branch 'superb' of wuheng/eas-system into master há 1 ano atrás
  wuheng 272c53a9be merge code há 1 ano atrás
  wuheng 4f11eecff7 Merge branch 'Yolo' of wuheng/eas-system into master há 1 ano atrás
  wuheng 51b9a39a12 execel há 1 ano atrás
  superb 6398648a58 merge code há 1 ano atrás
  superb 71c6eb17a9 login há 1 ano atrás
30 ficheiros alterados com 826 adições e 21 exclusões
  1. 11 0
      common/src/main/java/com/koobietech/eas/common/pojo/JwtUserDto.java
  2. 17 0
      common/src/main/java/com/koobietech/eas/common/utils/JwtManager.java
  3. 2 0
      common/src/main/java/com/koobietech/eas/common/utils/PasswordManager.java
  4. 4 0
      controller/pom.xml
  5. 1 1
      controller/src/main/java/com/koobietech/eas/ControllerApplication.java
  6. 28 0
      controller/src/main/java/com/koobietech/eas/controller/AdminLoginController.java
  7. 114 0
      controller/src/main/java/com/koobietech/eas/controller/EasEduClassController.java
  8. 2 1
      controller/src/main/java/com/koobietech/eas/controller/EasUserController.java
  9. 6 0
      controller/src/main/java/com/koobietech/eas/controller/LoginController.java
  10. 0 1
      controller/src/main/resources/application-local.yaml
  11. 43 17
      controller/src/test/java/com/koobietech/eas/controller/ControllerApplicationTests.java
  12. 10 0
      dao/src/main/java/com/koobietech/eas/dao/Pojo/AdminPojo.java
  13. 17 0
      dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/Department.java
  14. 15 0
      dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/Permission.java
  15. 16 0
      dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/UserDetail.java
  16. 13 0
      dao/src/main/java/com/koobietech/eas/dao/dto/LoginToken.java
  17. 18 0
      dao/src/main/java/com/koobietech/eas/dao/mapper/AdminLoginMapper.java
  18. 84 0
      dao/src/main/resources/com/koobietech/eas/dao/mapper/AdminLoginMapper.xml
  19. 0 0
      git
  20. 11 0
      pom.xml
  21. 6 1
      security/pom.xml
  22. 7 0
      security/src/main/java/com/koobietech/eas/security/config/SecurityConfig.java
  23. 58 0
      security/src/main/java/com/koobietech/eas/security/filter/EasSecurityFilter.java
  24. 4 0
      service/pom.xml
  25. 9 0
      service/src/main/java/com/koobietech/eas/service/AdminLoginService.java
  26. 23 0
      service/src/main/java/com/koobietech/eas/service/EasEduClassService.java
  27. 17 0
      service/src/main/java/com/koobietech/eas/service/LoginRedisService.java
  28. 114 0
      service/src/main/java/com/koobietech/eas/service/impl/AdminLoginServiceImpl.java
  29. 125 0
      service/src/main/java/com/koobietech/eas/service/impl/EasEduClassServiceImpl.java
  30. 51 0
      service/src/main/java/com/koobietech/eas/service/impl/LoginRedisServiceImpl.java

+ 11 - 0
common/src/main/java/com/koobietech/eas/common/pojo/JwtUserDto.java

@@ -1,5 +1,6 @@
 package com.koobietech.eas.common.pojo;
 
+import com.koobietech.eas.common.constant.UserType;
 import lombok.Data;
 
 @Data
@@ -7,4 +8,14 @@ public class JwtUserDto {
     String username;
     Long id;
     Enum type;
+
+    public JwtUserDto(String username, Long id, Enum type) {
+        this.username = username;
+        this.id = id;
+        this.type = type;
+    }
+
+    public JwtUserDto() {
+
+    }
 }

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

@@ -39,6 +39,23 @@ public class JwtManager {
         return sign;
     }
 
+    /**
+     * 创建 token
+     * @param userDto
+     * @return
+     */
+    public String createJwt(JwtUserDto userDto, Integer expires){
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(calendar.DATE, expires);
+        String sign = JWT.create()
+                .withClaim("user", userDto.getUsername())
+                .withClaim("id", userDto.getId())
+                .withClaim("type", userDto.getType().toString())
+                .withExpiresAt( calendar.getTime() )
+                .sign(Algorithm.HMAC256(SECRET));
+        return sign;
+    }
+
     /**
      * 解密 Token
      * @param token

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

@@ -4,10 +4,12 @@ import cn.hutool.crypto.SecureUtil;
 import cn.hutool.crypto.symmetric.AES;
 import com.koobietech.eas.common.exception.EasException;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
 
 
 import java.nio.charset.StandardCharsets;
 
+@Component
 public class PasswordManager {
 
 

+ 4 - 0
controller/pom.xml

@@ -14,6 +14,10 @@
     </parent>
 
     <dependencies>
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-spring-boot-starter</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.github.xiaoymin</groupId>
             <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>

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

@@ -7,7 +7,7 @@ import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.FilterType;
 
 @SpringBootApplication
-@MapperScan(basePackages = {"com.koobietech.eas.mbg.mapper"})
+@MapperScan(basePackages = {"com.koobietech.eas.mbg.mapper","com.koobietech.eas.dao.mapper"})
 @ComponentScan(basePackages = {"com.koobietech.eas"}, excludeFilters = {
         @ComponentScan.Filter(type = FilterType.REGEX, pattern  = {
                 "com.koobietech.eas.mbg.+"

+ 28 - 0
controller/src/main/java/com/koobietech/eas/controller/AdminLoginController.java

@@ -0,0 +1,28 @@
+package com.koobietech.eas.controller;
+
+
+import com.koobietech.eas.common.result.JsonResult;
+import com.koobietech.eas.dao.Pojo.AdminPojo;
+import com.koobietech.eas.dao.dto.LoginToken;
+import com.koobietech.eas.service.AdminLoginService;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+public class AdminLoginController {
+    @Resource
+    private AdminLoginService adminLoginService;
+
+    @RequestMapping("/adminLogin")
+    public JsonResult adminLogin(@RequestBody AdminPojo adminPojo){
+
+        LoginToken result = adminLoginService.adminLogin(adminPojo);
+
+        return JsonResult.data(result);
+    }
+
+
+}

+ 114 - 0
controller/src/main/java/com/koobietech/eas/controller/EasEduClassController.java

@@ -0,0 +1,114 @@
+package com.koobietech.eas.controller;
+
+
+import com.github.pagehelper.PageHelper;
+import com.koobietech.eas.common.constant.Disabled;
+import com.koobietech.eas.common.result.JsonPageResult;
+import com.koobietech.eas.common.result.JsonResult;
+import com.koobietech.eas.common.result.PageData;
+import com.koobietech.eas.mbg.model.EasEduClass;
+import com.koobietech.eas.mbg.model.EasEduSubjects;
+import com.koobietech.eas.service.EasEduClassService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.management.ValueExp;
+import java.util.List;
+
+@RestController
+@Tag(name = "班级控制器")
+public class EasEduClassController {
+
+    @Resource
+    EasEduClassService easEduClassService;
+
+    /**
+     * 添加班级类
+     * @param easEduClass
+     * @return
+     */
+    @PostMapping("/addClass")
+    @Operation(summary = "增加班级类" , description = "用于增加班级类")
+    public JsonResult addClass(@RequestBody  EasEduClass easEduClass){
+
+        int add_i = easEduClassService.addClass(easEduClass);
+        return JsonResult.ok("班级类添加成功");
+    }
+
+    /**
+     * 修改班级类信息
+     * @param easEduClass
+     * @return
+     */
+    @PutMapping(value = "/updateClass")
+    @Operation(summary = "更新班级类",description = "用于修改班级类信息")
+    public JsonResult updateClass(@RequestBody EasEduClass easEduClass){
+        int update_i = easEduClassService.updateClass(easEduClass);
+        if (update_i > 0){
+            return JsonResult.ok("修改成功!");
+        }else {
+            return JsonResult.fail("修改失败");
+        }
+    }
+
+    /**
+     * 删除班级类
+     * @param id
+     * @return
+     */
+    @DeleteMapping(value = "/deleteClass/{id}")
+    @Operation(summary = "删除班级类",description = "用于根据 id 删除班级类")
+    public JsonResult deleteClass(@PathVariable Long id ){
+        int delete_i = easEduClassService.deleteClass(id);
+        if (delete_i > 0){
+            return JsonResult.ok();
+        }else {
+            return JsonResult.fail();
+        }
+    }
+
+    /**
+     * 通过 id 查询班级类
+     * @param id
+     * @return
+     */
+    @GetMapping(value = "/selectId")
+    @Operation(summary = "id 查询班级类" , description = "通过id查询班级类")
+    public JsonResult selectId( Long id ){
+        EasEduClass easEduClass = easEduClassService.selectId(id);
+        System.out.println(
+                Disabled.valueOf(easEduClass.getDisabled())
+        );
+        return JsonResult.data(easEduClass);
+    }
+
+    /**
+     * 查询所有的班级类
+     * @return
+     */
+    @GetMapping(value = "/selectTotal")
+    @Operation(summary = "查询所有的班级类",description = "用于查询所有的班级类")
+    public JsonResult selectTotal(){
+        List<EasEduClass> easEduClasses = easEduClassService.selectTotal();
+        return JsonResult.data(easEduClasses);
+    }
+
+    /**
+     * 通过条件查询班级类
+     * @param easEduClass
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    @PostMapping(value = "/selectCondition")
+    @Operation(summary = "根据条件进行查询班级类", description = "用于根据条件查询班级类")
+    public JsonPageResult selectCondition(@RequestBody EasEduClass easEduClass,
+                                            @RequestParam Integer pageNum, @RequestParam Integer pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        PageData data = easEduClassService.selectCondition(easEduClass);
+        return JsonPageResult.data(data);
+    }
+}

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

@@ -21,8 +21,9 @@ public class EasUserController {
     @PostMapping("/test")
     @Operation(summary = "控制器测试用例" , description = "用于演示Swagger配置注解")
     public List<EasSysStudent> test(@RequestBody EasEduSubjects easEduSubjects){
-
         return demoService.test( easEduSubjects );
     }
 
+
+
 }

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

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

+ 0 - 1
controller/src/main/resources/application-local.yaml

@@ -28,4 +28,3 @@ knife4j:
 logging:
   level:
     com.koobietech.eas.*: TRACE
-

+ 43 - 17
controller/src/test/java/com/koobietech/eas/controller/ControllerApplicationTests.java

@@ -1,38 +1,64 @@
 package com.koobietech.eas.controller;
 
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
+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.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.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.*;
 
 
 @SpringBootTest
 class ControllerApplicationTests {
 
-    @Resource
-    RedisService redisService;
-
-    @Resource
-    JwtManager jwtManager;
-
     @Test
-    void contextLoads() {
-
-        JwtUserDto jwtUserDto = new JwtUserDto();
-
-        jwtUserDto.setType(UserType.TEACHER);
-        jwtUserDto.setId(12L);
-        jwtUserDto.setUsername("李四");
-
-        String jwt = jwtManager.createJwt(jwtUserDto);
-        redisService.set("jwttoken", jwt);
-
+    void contextLoads() throws IOException {
+//        List<Map> list = new ArrayList<>();
+//        Workbook workbook = null;
+//        ExportParams params = new ExportParams("大数据测试", "测试");
+//
+//        List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>();
+//        entity.add(new ExcelExportEntity("ID", "id"));
+//        entity.add(new ExcelExportEntity("级别", "level"));
+//        entity.add(new ExcelExportEntity("日志", "logger"));
+//        entity.add(new ExcelExportEntity("消息", "message"));
+//        entity.add(new ExcelExportEntity("时间", "timestamp"));
+//        entity.add(new ExcelExportEntity("异常", "exception"));
+//
+//        Map<String, Object> map = new HashMap<>();
+//        for (int i = 0; i < 10000; i++) {
+//            map.put("id", i);
+//            map.put("level", "ERROR");
+//            map.put("logger", "发生错误" + i);
+//            map.put("message", "这里是消息");
+//            map.put("timestamp", new Date());
+//            map.put("exception", "异常信息");
+//            list.add(map);
+//        }
+//        workbook = ExcelExportUtil.exportExcel(params, entity, list);
+//        list.clear();
+//        File savefile = new File("C:/Users/lc/Desktop");
+//        if (!savefile.exists()) {
+//            savefile.mkdirs();
+//        }
+//        FileOutputStream fos = new FileOutputStream("C:/Users/lc/Desktop/bigDataExport.xlsx");
+//        workbook.write(fos);
+//        fos.close();
 
 
     }

+ 10 - 0
dao/src/main/java/com/koobietech/eas/dao/Pojo/AdminPojo.java

@@ -0,0 +1,10 @@
+package com.koobietech.eas.dao.Pojo;
+
+import lombok.Data;
+
+@Data
+public class AdminPojo {
+    private String username;
+    private String passwd;
+
+}

+ 17 - 0
dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/Department.java

@@ -0,0 +1,17 @@
+package com.koobietech.eas.dao.adminLoginPojo;
+
+import lombok.Data;
+import java.util.Date;
+
+@Data
+public class Department {
+    private Long id;
+    private String depname;
+    private String address;
+    private String phone;
+    private String email;
+    private String manager;
+    private Date createTime;
+    private Date modifyTime;
+    private Integer createUid;
+}

+ 15 - 0
dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/Permission.java

@@ -0,0 +1,15 @@
+package com.koobietech.eas.dao.adminLoginPojo;
+
+import lombok.Data;
+import java.util.Date;
+
+@Data
+public class Permission {
+    private Integer id;
+    private String name;
+    private Byte isActive;
+    private Date createTime;
+    private Date modifyTime;
+    private Integer createUid;
+    private String description;
+}

+ 16 - 0
dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/UserDetail.java

@@ -0,0 +1,16 @@
+package com.koobietech.eas.dao.adminLoginPojo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UserDetail {
+    private Long id;
+    private String username;
+    private String phone;
+    private String email;
+    private List<Permission> permissions;
+    private List<Department> departments;
+
+}

+ 13 - 0
dao/src/main/java/com/koobietech/eas/dao/dto/LoginToken.java

@@ -0,0 +1,13 @@
+package com.koobietech.eas.dao.dto;
+
+import lombok.Data;
+
+@Data
+public class LoginToken {
+    String token;
+    String refreshToken;
+    public LoginToken(String token, String refreshToken) {
+        this.token = token;
+        this.refreshToken = refreshToken;
+    }
+}

+ 18 - 0
dao/src/main/java/com/koobietech/eas/dao/mapper/AdminLoginMapper.java

@@ -0,0 +1,18 @@
+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 java.util.List;
+
+public interface AdminLoginMapper {
+    List<Permission> getUserPermissionsById(Long adminId);
+
+    List<Department> getUserDepartmentsById(Long adminId);
+
+    UserDetail getUserDetailById(Long adminId);
+
+
+
+}

+ 84 - 0
dao/src/main/resources/com/koobietech/eas/dao/mapper/AdminLoginMapper.xml

@@ -0,0 +1,84 @@
+<?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">
+        <!-- 映射查询结果到实体类属性 -->
+        <id column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="is_active" property="isActive"/>
+        <result column="create_time" property="createTime"/>
+        <result column="modify_time" property="modifyTime"/>
+        <result column="create_uid" property="createUid"/>
+        <result column="description" property="description"/>
+    </resultMap>
+
+    <resultMap id="departmentResultMap" type="com.koobietech.eas.dao.adminLoginPojo.Department">
+        <!-- 映射查询结果到实体类属性 -->
+        <id column="id" property="id"/>
+        <result column="depname" property="depname"/>
+        <result column="address" property="address"/>
+        <result column="phone" property="phone"/>
+        <result column="email" property="email"/>
+        <result column="manager" property="manager"/>
+        <result column="create_time" property="createTime"/>
+        <result column="modify_time" property="modifyTime"/>
+        <result column="create_uid" property="createUid"/>
+    </resultMap>
+
+    <resultMap id="userDetailResultMap" type="com.koobietech.eas.dao.adminLoginPojo.UserDetail">
+        <!-- 映射查询结果到实体类属性 -->
+        <result column="id" property="id"/>
+        <result column="username" property="username"/>
+        <result column="phone" property="phone"/>
+        <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
+                 JOIN eas_sys_pes_relation pr ON u.id = pr.department_id
+                 JOIN eas_sys_permission p ON pr.permission_id = p.id
+        WHERE u.id = #{adminId};
+    </select>
+
+    <select id="getUserDepartmentsById" resultMap="departmentResultMap">
+        SELECT DISTINCT d.id, d.depname, d.address, d.phone, d.email, d.manager, d.create_time, d.modify_time, d.create_uid
+        FROM eas_sys_userinfo u
+                 JOIN eas_sys_pes_relation pr ON u.id = pr.department_id
+                 JOIN eas_sys_department d ON pr.department_id = d.id
+        WHERE u.id = #{adminId}
+    </select>
+
+    <select id="getUserDetailById" resultMap="userDetailResultMap">
+        SELECT id, username, phone, email
+        FROM eas_sys_userinfo
+        WHERE id = #{adminId}
+    </select>
+
+</mapper>

+ 0 - 0
git


+ 11 - 0
pom.xml

@@ -33,11 +33,22 @@
         <javax.servlet-api.version>4.0.1</javax.servlet-api.version>
         <spring-data-redis.version>2.7.3</spring-data-redis.version>
         <knife4j.version>4.1.0</knife4j.version>
+        <easypoi.version>4.3.0</easypoi.version>
         <pagehelper.starter.version>1.3.1</pagehelper.starter.version>
         <maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
     </properties>
     <dependencyManagement>
         <dependencies>
+            <dependency>
+                <groupId>cn.afterturn</groupId>
+                <artifactId>easypoi-spring-boot-starter</artifactId>
+                <version>${easypoi.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter-security</artifactId>
+                <version>${spring-boot.version}</version>
+            </dependency>
             <dependency>
                 <groupId>com.github.pagehelper</groupId>
                 <artifactId>pagehelper-spring-boot-starter</artifactId>

+ 6 - 1
security/pom.xml

@@ -25,7 +25,12 @@
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-security</artifactId>
-            <version>${spring-boot.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.koobietech.eas</groupId>
+            <artifactId>service</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+            <scope>compile</scope>
         </dependency>
     </dependencies>
 

+ 7 - 0
security/src/main/java/com/koobietech/eas/security/config/SecurityConfig.java

@@ -7,6 +7,8 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
 import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer;
 import org.springframework.security.config.http.SessionCreationPolicy;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.security.web.SecurityFilterChain;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 
@@ -43,4 +45,9 @@ public class SecurityConfig {
 
         return and.build();
     }
+
+    @Bean
+    public PasswordEncoder passwordEncoder() {
+        return new BCryptPasswordEncoder();
+    }
 }

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

@@ -1,9 +1,23 @@
 package com.koobietech.eas.security.filter;
 
+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.LoginRedisService;
+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;
@@ -12,9 +26,53 @@ import javax.servlet.http.HttpServletResponse;
 @Component
 public class EasSecurityFilter extends OncePerRequestFilter {
 
+    @Resource
+    private LoginRedisService loginRedisService;
+
+    @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 = jwtManager.decodeJwt(token);
+            //判断token是否有效
+            UserDetail userDetail = loginRedisService.checkToken(jwtUserDto);
+
+            // 获取当前的 SecurityContext 对象,用于保存当前用户的安全上下文信息
+            SecurityContext context = SecurityContextHolder.getContext();
+
+            if (Objects.nonNull(userDetail)) {
+                // 如果获取到了有效的用户对象
+
+                // 获取用户的权限列表
+                List<Permission> permission = userDetail.getPermissions();
+
+                // 创建一个 ArrayList 集合,用于存储用户权限对应的 SimpleGrantedAuthority 权限对象
+                ArrayList<SimpleGrantedAuthority> objects = new ArrayList<>();
+
+                // 遍历用户的权限列表
+                for (Permission adminPermission: permission) {
+                    // 创建一个 SimpleGrantedAuthority 权限对象,并添加到集合中
+                    SimpleGrantedAuthority authority = new SimpleGrantedAuthority(adminPermission.getDescription());
+                    objects.add(authority);
+                }
+
+                // 使用用户的用户名、空凭证参数和权限对象集合创建一个 UsernamePasswordAuthenticationToken 身份验证令牌
+                UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(userDetail.getUsername(), null, objects);
+
+                // 将身份验证令牌设置到当前的 SecurityContext 中
+                context.setAuthentication(authenticationToken);
+            }
+        }
+
         filterChain.doFilter(request, response);
     }
+
+
 }

+ 4 - 0
service/pom.xml

@@ -38,6 +38,10 @@
             <version>0.0.1-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
     </dependencies>
 
     <parent>

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

@@ -0,0 +1,9 @@
+package com.koobietech.eas.service;
+
+import com.koobietech.eas.common.result.JsonResult;
+import com.koobietech.eas.dao.Pojo.AdminPojo;
+import com.koobietech.eas.dao.dto.LoginToken;
+
+public interface AdminLoginService {
+    LoginToken adminLogin(AdminPojo adminPojo);
+}

+ 23 - 0
service/src/main/java/com/koobietech/eas/service/EasEduClassService.java

@@ -0,0 +1,23 @@
+package com.koobietech.eas.service;
+
+import com.koobietech.eas.common.result.PageData;
+import com.koobietech.eas.mbg.model.EasEduCategory;
+import com.koobietech.eas.mbg.model.EasEduClass;
+
+import java.util.List;
+
+public interface EasEduClassService {
+
+    int addClass(EasEduClass easEduClass);
+
+    int updateClass(EasEduClass easEduClass);
+
+    int deleteClass( Long id );
+
+    EasEduClass selectId( Long id );
+
+    List<EasEduClass> selectTotal();
+
+    PageData selectCondition(EasEduClass easEduClass );
+
+}

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

@@ -0,0 +1,17 @@
+package com.koobietech.eas.service;
+
+import com.koobietech.eas.common.pojo.JwtUserDto;
+import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
+
+
+public interface LoginRedisService {
+    UserDetail checkToken(JwtUserDto jwtUserDto);
+
+    UserDetail checkRefreshToken(JwtUserDto jwtUserDto);
+
+    void loginSaveCache(String redisTokenKey, UserDetail userDetailInRedis, Integer token_expires);
+
+    String createJwtTokenKey(JwtUserDto jwtUserDto);
+
+    String createJwtRefreshTokenKey(JwtUserDto jwtUserDto);
+}

+ 114 - 0
service/src/main/java/com/koobietech/eas/service/impl/AdminLoginServiceImpl.java

@@ -0,0 +1,114 @@
+package com.koobietech.eas.service.impl;
+
+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.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.dto.LoginToken;
+import com.koobietech.eas.dao.mapper.AdminLoginMapper;
+import com.koobietech.eas.mbg.mapper.EasSysUserinfoMapper;
+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 org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class AdminLoginServiceImpl implements AdminLoginService {
+
+    @Resource
+    private PasswordEncoder passwordEncoder;
+    @Resource
+    private PasswordManager passwordManager;
+    @Resource
+    private AdminLoginMapper adminLoginMapper;
+    @Resource
+    private EasSysUserinfoMapper easSysUserinfoMapper;
+    @Resource
+    private LoginRedisService loginRedisService;
+    @Resource
+    private JwtManager jwtManager;
+
+    @Override
+    public LoginToken adminLogin(AdminPojo adminPojo) {
+        if (adminPojo.getUsername() == null || adminPojo.getPasswd() == null || adminPojo.getUsername().isEmpty() || adminPojo.getPasswd().isEmpty()) {
+            throw new EasException("用户不存在", 509);
+        }
+
+        EasSysUserinfo easSysUserinfo = findAdminByUsername(adminPojo.getUsername(), adminPojo.getPasswd());
+
+        // 接收到对象,根据这个信息去查询数据库,然后自定义sql查用户信息,存在redis里面当做token
+        System.out.println(easSysUserinfo);
+        //先获取id,进行枚举判断
+        Long id = easSysUserinfo.getId();
+        //先调用自定义sql查询detail类中的数据 最后把这个类封装到redis里面
+        UserDetail userDetailInRedis = adminLoginMapper.getUserDetailById(id);
+        System.out.println("接收前" + userDetailInRedis);
+        userDetailInRedis.setDepartments(adminLoginMapper.getUserDepartmentsById(id));
+        userDetailInRedis.setPermissions(adminLoginMapper.getUserPermissionsById(id));
+        System.out.println("接收后" + userDetailInRedis);
+
+        // 先调用自定义sql查询用户详细信息、部门信息和权限信息
+        UserType userType = UserType.TEACHER;
+        if (userDetailInRedis.getUsername().equals("admin")) {
+            userType = UserType.ADMIN;
+        }
+
+        // token过期时间
+        Integer token_expires = 30;
+        Integer refreshToken_expires = 60;
+
+        // 生成token
+        JwtUserDto jwtUserDto = new JwtUserDto(userDetailInRedis.getUsername(), userDetailInRedis.getId(), userType);
+        String token = jwtManager.createJwt(jwtUserDto, token_expires);
+        String refreshToken = jwtManager.createJwt(jwtUserDto, refreshToken_expires);
+
+        // 生成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);
+    }
+
+    private EasSysUserinfo findAdminByUsername(String username, String password)  {
+        EasSysUserinfoExample easSysUserinfoExample = new EasSysUserinfoExample();
+        easSysUserinfoExample.createCriteria().andUsernameEqualTo(username);
+        List<EasSysUserinfo> adminList = easSysUserinfoMapper.selectByExample(easSysUserinfoExample);
+
+        // 使用Optional简化判断
+        Optional<EasSysUserinfo> optionalAdmin = adminList.stream().findFirst();
+
+        if (optionalAdmin.isEmpty()) {
+            throw new EasException("用户不存在", 9902);
+        }
+        if (adminList.size() > 1) {
+            throw new EasException("用户数据异常", 9902);
+        }
+
+        EasSysUserinfo easSysUserinfo = optionalAdmin.get();
+        validatePassword(password, easSysUserinfo.getPasswd());
+
+        return easSysUserinfo;
+    }
+
+    private void validatePassword(String inputPassword, String encryptedPassword){
+        String decryptedPassword = passwordManager.decryptPassword(inputPassword);
+        System.out.println("前端解密来的decryptedPassword: " + decryptedPassword);
+        System.out.println("数据库查到的密码easSysUserinfo.getPasswd(): " + encryptedPassword);
+        if (!passwordEncoder.matches(decryptedPassword, encryptedPassword)) {
+            throw new EasException("密码不正确", 9901);
+        }
+    }
+}

+ 125 - 0
service/src/main/java/com/koobietech/eas/service/impl/EasEduClassServiceImpl.java

@@ -0,0 +1,125 @@
+package com.koobietech.eas.service.impl;
+
+import com.koobietech.eas.common.result.PageData;
+import com.koobietech.eas.mbg.mapper.EasEduClassMapper;
+import com.koobietech.eas.mbg.model.EasEduCategory;
+import com.koobietech.eas.mbg.model.EasEduCategoryExample;
+import com.koobietech.eas.mbg.model.EasEduClass;
+import com.koobietech.eas.mbg.model.EasEduClassExample;
+import com.koobietech.eas.service.EasEduClassService;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import javax.imageio.metadata.IIOMetadataFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+@Service
+public class EasEduClassServiceImpl implements EasEduClassService {
+
+    @Resource
+    EasEduClassMapper easEduClassMapper;
+    @Override
+    public int addClass(EasEduClass easEduClass) {
+        easEduClass.setCreateTime(new Date());
+        easEduClass.setModifyTime(new Date());
+        return easEduClassMapper.insert(easEduClass);
+    }
+
+    @Override
+    public int updateClass(EasEduClass easEduClass) {
+        return easEduClassMapper.updateByPrimaryKey( easEduClass );
+    }
+
+    @Override
+    public int deleteClass(Long id) {
+        return  easEduClassMapper.deleteByPrimaryKey( id );
+    }
+
+    @Override
+    public EasEduClass selectId(Long id) {
+        System.out.println("Id" + id);
+        return easEduClassMapper.selectByPrimaryKey(id);
+    }
+
+    @Override
+    public List<EasEduClass> selectTotal() {
+        return easEduClassMapper.selectByExample(null);
+    }
+
+    @Override
+    public PageData selectCondition(EasEduClass easEduClass) {
+        EasEduClassExample easEduClassExample = new EasEduClassExample();
+        EasEduClassExample.Criteria criteria = easEduClassExample.createCriteria();
+        if ( Objects.nonNull(easEduClass) ) {
+            if (Objects.nonNull(easEduClass.getId())) {
+                criteria.andIdEqualTo(easEduClass.getId());
+            }
+            if (StringUtils.hasText(easEduClass.getName())) {
+                criteria.andNameLike("%" + easEduClass.getName() + "%");
+            }
+            if (Objects.nonNull(easEduClass.getManageId()) && easEduClass.getManageId() > 0){
+                criteria.andManageIdEqualTo(easEduClass.getManageId());
+            }
+            if (Objects.nonNull(easEduClass.getAssistantId()) && easEduClass.getAssistantId() > 0){
+                criteria.andAssistantIdEqualTo(easEduClass.getAssistantId());
+            }
+            if (Objects.nonNull(easEduClass.getCreateTime())) {
+                criteria.andCreateTimeGreaterThan(easEduClass.getCreateTime());
+            }
+            if (Objects.nonNull(easEduClass.getModifyTime())) {
+                criteria.andCreateTimeGreaterThan(easEduClass.getModifyTime());
+            }
+            if (Objects.nonNull(easEduClass.getCreateUid()) && easEduClass.getCreateUid() > 0) {
+                criteria.andCreateUidEqualTo(easEduClass.getCreateUid());
+            }
+            if (StringUtils.hasText(easEduClass.getDisabled())) {
+                criteria.andDisabledEqualTo(easEduClass.getDisabled());
+            }
+        }
+        List<EasEduClass> easEduClasses = easEduClassMapper.selectByExample(easEduClassExample);
+        long l = easEduClassMapper.countByExample(easEduClassExample);
+        return PageData.init(easEduClasses,l);
+    }
+
+//    @Override
+//    public PageData selectCondition(EasEduClass easEduClass) {
+//        EasEduClassExample easEduClassExample = new EasEduClassExample();
+//        EasEduClassExample.Criteria criteria = easEduClassExample.createCriteria();
+//        if (Objects.nonNull(easEduClass)){
+//            if (Objects.nonNull(easEduClass.getId())){
+//                criteria.andIdEqualTo(easEduClass.getId());
+//            }
+//            if (StringUtils.hasText((easEduClass.getName()))){
+//                criteria.andNameLike("%" + easEduClass.getName() + "%");
+//            }
+//            if (Objects.nonNull(easEduClass.getManageId())){
+//                criteria.andManageIdEqualTo(easEduClass.getManageId());
+//            }
+//            if (Objects.nonNull(easEduClass.getAssistantId())){
+//                criteria.andManageIdEqualTo(easEduClass.getManageId());
+//            }
+//            if (Objects.nonNull(easEduClass.getCreateTime())){
+//                criteria.andCreateTimeGreaterThan(easEduClass.getCreateTime());
+//            }
+//            if (Objects.nonNull(easEduClass.getModifyTime())){
+//                criteria.andModifyTimeGreaterThan(easEduClass.getModifyTime());
+//            }
+//            if (Objects.nonNull(easEduClass.getCreateUid())){
+//                criteria.andCreateUidEqualTo(easEduClass.getCreateUid());
+//            }
+//            if (StringUtils.hasText(easEduClass.getDisabled())){
+//                criteria.andDisabledEqualTo(easEduClass.getDisabled());
+//            }
+//        }
+//        List<EasEduClass> easEduClasses = easEduClassMapper.selectByExample(easEduClassExample);
+//        long l = easEduClassMapper.countByExample(easEduClassExample);
+//        PageData ret = new PageData();
+//        ret.setData(easEduClasses);
+//        ret.setTotal(l);
+//        return ret;
+//    }
+
+}

+ 51 - 0
service/src/main/java/com/koobietech/eas/service/impl/LoginRedisServiceImpl.java

@@ -0,0 +1,51 @@
+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.LoginRedisService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class LoginRedisServiceImpl implements LoginRedisService {
+
+    @Autowired
+    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 UserDetail checkRefreshToken(JwtUserDto jwtUserDto) {
+        String jwtKey = createJwtTokenKey(jwtUserDto);
+
+        return (UserDetail) redisService.get(jwtKey);
+    }
+
+    @Override
+    public void loginSaveCache(String redisTokenKey, UserDetail userDetailInRedis, Integer token_expires) {
+        redisService.set(redisTokenKey, userDetailInRedis, token_expires);
+    }
+
+    @Override
+    public String createJwtTokenKey(JwtUserDto jwtUserDto) {
+        //根据jwtUserDto 生成jwtKey,格式为:eas_token_{id}_{username}_{type}
+        return "eas_token_" + jwtUserDto.getId() + "_" + jwtUserDto.getUsername() + "_" + jwtUserDto.getType();
+    }
+
+    @Override
+    public String createJwtRefreshTokenKey(JwtUserDto jwtUserDto) {
+        //根据jwtUserDto 生成jwtKey,格式为:eas_refresh_{id}_{username}_{type}
+        return "eas_refresh_" + jwtUserDto.getId() + "_" + jwtUserDto.getUsername() + "_" + jwtUserDto.getType();
+    }
+}