diff --git a/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-job/pom.xml b/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-job/pom.xml
index b4e54bd..9eb831a 100644
--- a/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-job/pom.xml
+++ b/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-job/pom.xml
@@ -18,11 +18,6 @@
-
- junit
- junit
- 3.8.1
- test
-
+
diff --git a/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-job/src/main/java/com/landaiqing/App.java b/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-job/src/main/java/com/landaiqing/App.java
deleted file mode 100644
index e623ea3..0000000
--- a/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-job/src/main/java/com/landaiqing/App.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.landaiqing;
-
-/**
- * Hello world!
- *
- */
-public class App
-{
- public static void main( String[] args )
- {
- System.out.println( "Hello World!" );
- }
-}
diff --git a/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-job/src/test/java/com/landaiqing/AppTest.java b/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-job/src/test/java/com/landaiqing/AppTest.java
deleted file mode 100644
index 908567a..0000000
--- a/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-job/src/test/java/com/landaiqing/AppTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.landaiqing;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-/**
- * Unit test for simple App.
- */
-public class AppTest
- extends TestCase
-{
- /**
- * Create the test case
- *
- * @param testName name of the test case
- */
- public AppTest( String testName )
- {
- super( testName );
- }
-
- /**
- * @return the suite of tests being tested
- */
- public static Test suite()
- {
- return new TestSuite( AppTest.class );
- }
-
- /**
- * Rigourous Test :-)
- */
- public void testApp()
- {
- assertTrue( true );
- }
-}
diff --git a/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-mq/pom.xml b/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-mq/pom.xml
index 74787d5..08b7cf8 100644
--- a/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-mq/pom.xml
+++ b/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-mq/pom.xml
@@ -18,11 +18,6 @@
-
- junit
- junit
- 3.8.1
- test
-
+
diff --git a/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-mq/src/main/java/com/landaiqing/App.java b/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-mq/src/main/java/com/landaiqing/App.java
deleted file mode 100644
index e623ea3..0000000
--- a/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-mq/src/main/java/com/landaiqing/App.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.landaiqing;
-
-/**
- * Hello world!
- *
- */
-public class App
-{
- public static void main( String[] args )
- {
- System.out.println( "Hello World!" );
- }
-}
diff --git a/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-mq/src/test/java/com/landaiqing/AppTest.java b/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-mq/src/test/java/com/landaiqing/AppTest.java
deleted file mode 100644
index 908567a..0000000
--- a/qing-yu-club-auth/qing-yu-club-auth-application/qing-yu-club-auth-application-mq/src/test/java/com/landaiqing/AppTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.landaiqing;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-/**
- * Unit test for simple App.
- */
-public class AppTest
- extends TestCase
-{
- /**
- * Create the test case
- *
- * @param testName name of the test case
- */
- public AppTest( String testName )
- {
- super( testName );
- }
-
- /**
- * @return the suite of tests being tested
- */
- public static Test suite()
- {
- return new TestSuite( AppTest.class );
- }
-
- /**
- * Rigourous Test :-)
- */
- public void testApp()
- {
- assertTrue( true );
- }
-}
diff --git a/qing-yu-club-subject/qing-yu-club-starter/pom.xml b/qing-yu-club-subject/qing-yu-club-starter/pom.xml
index 5cfeade..4a3a1f0 100644
--- a/qing-yu-club-subject/qing-yu-club-starter/pom.xml
+++ b/qing-yu-club-subject/qing-yu-club-starter/pom.xml
@@ -15,7 +15,7 @@
8
- 8
+ 8
1.8
UTF-8
UTF-8
diff --git a/qing-yu-practice/pom.xml b/qing-yu-practice/pom.xml
new file mode 100644
index 0000000..3b6dfd4
--- /dev/null
+++ b/qing-yu-practice/pom.xml
@@ -0,0 +1,50 @@
+
+ 4.0.0
+
+ com.landaiqing
+ qing-yu-practice
+ 1.0-SNAPSHOT
+ pom
+
+ qing-yu-practice-api
+ qing-yu-practice-server
+
+
+
+
+ 8
+ 8
+ 1.8
+ UTF-8
+ UTF-8
+ 2.4.2
+ 2021.1
+ 2020.0.6
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ 2.4.2
+ pom
+ import
+
+
+
+
+
+ central
+ aliyun maven
+ http://maven.aliyun.com/nexus/content/groups/public/
+ default
+
+ true
+
+
+ true
+
+
+
+
diff --git a/qing-yu-practice/qing-yu-practice-api/pom.xml b/qing-yu-practice/qing-yu-practice-api/pom.xml
new file mode 100644
index 0000000..0785239
--- /dev/null
+++ b/qing-yu-practice/qing-yu-practice-api/pom.xml
@@ -0,0 +1,26 @@
+
+ 4.0.0
+
+ com.landaiqing
+ qing-yu-practice
+ 1.0-SNAPSHOT
+
+
+ qing-yu-practice-api
+ jar
+
+
+
+ UTF-8
+
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.28
+
+
+
+
diff --git a/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/common/PageInfo.java b/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/common/PageInfo.java
new file mode 100644
index 0000000..2f69382
--- /dev/null
+++ b/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/common/PageInfo.java
@@ -0,0 +1,29 @@
+package com.landaiqing.practice.api.common;
+
+/**
+ * 分页请求实体
+ *
+ * @author: landaiqing
+ */
+public class PageInfo {
+
+ private Integer pageNo = 1;
+
+ private Integer pageSize = 20;
+
+ public Integer getPageNo() {
+ if (pageNo == null || pageNo < 1) {
+ return 1;
+ }
+ return pageNo;
+ }
+
+ public Integer getPageSize() {
+ if (pageSize == null || pageSize < 1 || pageSize > Integer.MAX_VALUE) {
+ return 20;
+ }
+ return pageSize;
+ }
+
+
+}
diff --git a/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/common/PageResult.java b/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/common/PageResult.java
new file mode 100644
index 0000000..8869295
--- /dev/null
+++ b/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/common/PageResult.java
@@ -0,0 +1,57 @@
+package com.landaiqing.practice.api.common;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 分页返回实体
+ *
+ * @author: landaiqing
+ */
+@Data
+public class PageResult implements Serializable {
+
+ private Integer pageNo = 1;
+
+ private Integer pageSize = 20;
+
+ private Integer total = 0;
+
+ private Integer totalPages = 0;
+
+ private List result = Collections.emptyList();
+
+ private Integer start = 1;
+
+ private Integer end = 0;
+
+ public void setRecords(List result) {
+ this.result = result;
+ if (result != null && result.size() > 0) {
+ setTotal(result.size());
+ }
+ }
+
+ public void setTotal(Integer total) {
+ this.total = total;
+ if (this.pageSize > 0) {
+ this.totalPages = (total / this.pageSize) + (total % this.pageSize == 0 ? 0 : 1);
+ } else {
+ this.totalPages = 0;
+ }
+ this.start = (this.pageSize > 0 ? (this.pageNo - 1) * this.pageSize : 0) + 1;
+ this.end = (this.start - 1 + this.pageSize * (this.pageNo > 0 ? 1 : 0));
+ }
+
+ public void setPageSize(Integer pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ public void setPageNo(Integer pageNo) {
+ this.pageNo = pageNo;
+ }
+
+}
diff --git a/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/common/Result.java b/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/common/Result.java
new file mode 100644
index 0000000..a3302ce
--- /dev/null
+++ b/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/common/Result.java
@@ -0,0 +1,50 @@
+package com.landaiqing.practice.api.common;
+
+import lombok.Data;
+
+@Data
+public class Result {
+
+ private Boolean success;
+
+ private Integer code;
+
+ private String message;
+
+ private T data;
+
+ public static Result ok(){
+ Result result = new Result();
+ result.setSuccess(true);
+ result.setCode(ResultCodeEnum.SUCCESS.getCode());
+ result.setMessage(ResultCodeEnum.SUCCESS.getDesc());
+ return result;
+ }
+
+ public static Result ok(T data){
+ Result result = new Result();
+ result.setSuccess(true);
+ result.setCode(ResultCodeEnum.SUCCESS.getCode());
+ result.setMessage(ResultCodeEnum.SUCCESS.getDesc());
+ result.setData(data);
+ return result;
+ }
+
+ public static Result fail(){
+ Result result = new Result();
+ result.setSuccess(false);
+ result.setCode(ResultCodeEnum.FAIL.getCode());
+ result.setMessage(ResultCodeEnum.FAIL.getDesc());
+ return result;
+ }
+
+ public static Result fail(T data){
+ Result result = new Result();
+ result.setSuccess(false);
+ result.setCode(ResultCodeEnum.FAIL.getCode());
+ result.setMessage(ResultCodeEnum.FAIL.getDesc());
+ result.setData(data);
+ return result;
+ }
+
+}
diff --git a/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/common/ResultCodeEnum.java b/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/common/ResultCodeEnum.java
new file mode 100644
index 0000000..6f7eaaf
--- /dev/null
+++ b/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/common/ResultCodeEnum.java
@@ -0,0 +1,29 @@
+package com.landaiqing.practice.api.common;
+
+import lombok.Getter;
+
+@Getter
+public enum ResultCodeEnum {
+
+ SUCCESS(200,"成功"),
+ FAIL(500,"失败");
+
+ public int code;
+
+ public String desc;
+
+ ResultCodeEnum(int code,String desc){
+ this.code = code;
+ this.desc = desc;
+ }
+
+ public static ResultCodeEnum getByCode(int codeVal){
+ for(ResultCodeEnum resultCodeEnum : ResultCodeEnum.values()){
+ if(resultCodeEnum.code == codeVal){
+ return resultCodeEnum;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/enums/IsDeletedFlagEnum.java b/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/enums/IsDeletedFlagEnum.java
new file mode 100644
index 0000000..b681284
--- /dev/null
+++ b/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/enums/IsDeletedFlagEnum.java
@@ -0,0 +1,30 @@
+package com.landaiqing.practice.api.enums;
+
+import lombok.Getter;
+
+/**
+ * @description: 删除状态枚举
+ *
+ * @author landaiqing
+ * @date: 2024/2/14 15:02
+ */
+@Getter
+public enum IsDeletedFlagEnum {
+ DELETED(1,"已删除"),
+ UN_DELETED(0,"未删除");
+ private int code;
+ private String desc;
+
+ IsDeletedFlagEnum(int code, String desc){
+ this.code=code;
+ this.desc=desc;
+ }
+ public static IsDeletedFlagEnum getByCode(int codeVal){
+ for(IsDeletedFlagEnum resultCodeEnum: IsDeletedFlagEnum.values()){
+ if(resultCodeEnum.code==codeVal){
+ return resultCodeEnum;
+ }
+ }
+ return null;
+ }
+}
diff --git a/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/req/package-info.md b/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/req/package-info.md
new file mode 100644
index 0000000..ecfa686
--- /dev/null
+++ b/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/req/package-info.md
@@ -0,0 +1 @@
+api的入参实体
\ No newline at end of file
diff --git a/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/vo/package-info.md b/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/vo/package-info.md
new file mode 100644
index 0000000..0e2c3b1
--- /dev/null
+++ b/qing-yu-practice/qing-yu-practice-api/src/main/java/com/landaiqing/practice/api/vo/package-info.md
@@ -0,0 +1 @@
+api的出参实体
\ No newline at end of file
diff --git a/qing-yu-practice/qing-yu-practice-server/pom.xml b/qing-yu-practice/qing-yu-practice-server/pom.xml
new file mode 100644
index 0000000..311d8e8
--- /dev/null
+++ b/qing-yu-practice/qing-yu-practice-server/pom.xml
@@ -0,0 +1,169 @@
+
+ 4.0.0
+
+ com.landaiqing
+ qing-yu-practice
+ 1.0-SNAPSHOT
+
+
+ qing-yu-practice-server
+ jar
+
+ qing-yu-practice-server
+
+
+
+ 8
+ 8
+ 1.8
+ UTF-8
+ UTF-8
+ 2.4.2
+ 2021.1
+ 2020.0.6
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ 2.4.2
+
+
+ spring-boot-starter-logging
+ org.springframework.boot
+
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.28
+
+
+ org.mapstruct
+ mapstruct
+ 1.4.2.Final
+
+
+ org.mapstruct
+ mapstruct-processor
+ 1.4.2.Final
+
+
+
+ org.springframework.boot
+ spring-boot-starter-log4j2
+ 2.4.2
+
+
+ com.alibaba
+ fastjson
+ 1.2.79
+
+
+ com.google.guava
+ guava
+ 19.0
+
+
+ org.apache.commons
+ commons-lang3
+ 3.11
+
+
+ com.google.code.gson
+ gson
+ 2.8.6
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+ 2.4.2
+
+
+ org.apache.commons
+ commons-pool2
+ 2.9.0
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+ 2.4.2
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ 1.1.22
+
+
+ mysql
+ mysql-connector-java
+ 8.0.33
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.4.0
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+ org.springframework.cloud
+ spring-cloud-starter-bootstrap
+ 3.0.6
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+ com.alibaba.cloud
+ spring-cloud-alibaba-dependencies
+ ${spring-cloud-alibaba.version}
+ pom
+ import
+
+
+
+
+ ${project.artifactId}
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.3.0.RELEASE
+
+
+
+ repackage
+
+
+
+
+
+
+
diff --git a/qing-yu-practice/qing-yu-practice-server/src/main/java/com/landaiqing/practice/server/PracticeApplication.java b/qing-yu-practice/qing-yu-practice-server/src/main/java/com/landaiqing/practice/server/PracticeApplication.java
new file mode 100644
index 0000000..71cf58f
--- /dev/null
+++ b/qing-yu-practice/qing-yu-practice-server/src/main/java/com/landaiqing/practice/server/PracticeApplication.java
@@ -0,0 +1,21 @@
+package com.landaiqing.practice.server;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+/**
+ * 练习微服务启动类
+ *
+ * @author: landaiqing
+ * @date: 2024/2/7
+ */
+@SpringBootApplication
+@ComponentScan("com.landaiqing")
+@MapperScan("com.landaiqing.**.dao")
+public class PracticeApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(PracticeApplication.class);
+ }
+}
diff --git a/qing-yu-practice/qing-yu-practice-server/src/main/java/com/landaiqing/practice/server/config/GlobalConfig.java b/qing-yu-practice/qing-yu-practice-server/src/main/java/com/landaiqing/practice/server/config/GlobalConfig.java
new file mode 100644
index 0000000..11d2f0c
--- /dev/null
+++ b/qing-yu-practice/qing-yu-practice-server/src/main/java/com/landaiqing/practice/server/config/GlobalConfig.java
@@ -0,0 +1,44 @@
+package com.landaiqing.practice.server.config;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.landaiqing.practice.server.config.interceptor.LoginInterceptor;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
+
+import java.util.List;
+
+/**
+ * @Classname GlobalConfig
+ * @BelongsProject: qing-yu-club
+ * @BelongsPackage: com.landaiqing.subject.application.config
+ * @Author: landaiqing
+ * @CreateTime: 2024-02-16 15:57
+ * @Description: MVC全局处理
+ * @Version: 1.0
+ */
+@Configuration
+public class GlobalConfig extends WebMvcConfigurationSupport {
+ @Override
+ protected void configureMessageConverters(List> converters) {
+ super.configureMessageConverters(converters);
+ converters.add(mappingJackson2HttpMessageConverter());
+ }
+ private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
+ ObjectMapper objectMapper=new ObjectMapper();
+ objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);
+ objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+ MappingJackson2HttpMessageConverter converter=new MappingJackson2HttpMessageConverter(objectMapper);
+ return converter;
+ }
+
+ @Override
+ protected void addInterceptors(InterceptorRegistry registry) {
+ registry.addInterceptor(new LoginInterceptor())
+ .addPathPatterns("/**");
+ }
+}
diff --git a/qing-yu-practice/qing-yu-practice-server/src/main/java/com/landaiqing/practice/server/config/context/LoginContextHolder.java b/qing-yu-practice/qing-yu-practice-server/src/main/java/com/landaiqing/practice/server/config/context/LoginContextHolder.java
new file mode 100644
index 0000000..fb87715
--- /dev/null
+++ b/qing-yu-practice/qing-yu-practice-server/src/main/java/com/landaiqing/practice/server/config/context/LoginContextHolder.java
@@ -0,0 +1,42 @@
+package com.landaiqing.practice.server.config.context;
+
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @Classname LoginContextHolder
+ * @BelongsProject: qing-yu-club
+ * @BelongsPackage: com.landaiqing.subject.application.context
+ * @Author: landaiqing
+ * @CreateTime: 2024-03-03 18:11
+ * @Description: 登录上下文对象
+ * @Version: 1.0
+ */
+public class LoginContextHolder {
+ private static final InheritableThreadLocal