From 5bcd1428c29bad9996dab298d77e2ea87d14d737 Mon Sep 17 00:00:00 2001 From: bunny <1319900154@qq.com> Date: Sat, 23 Mar 2024 00:36:54 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=96=B0=E5=A2=9E):=20Redis=E4=B9=B1?= =?UTF-8?q?=E7=A0=81=E9=97=AE=E9=A2=98=EF=BC=8C=E8=8E=B7=E5=8F=96=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E7=99=BB=E5=BD=95=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E6=88=B7=E9=80=80=E5=87=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/inspectionProfiles/Project_Default.xml | 7 ++ .../atguigu/config/RedisConfiguration.java | 90 ++++++++++++++++++ .../com/atguigu/exception/EnumException.java | 1 + .../handler/GlobalExceptionHandler.java | 2 +- .../com/atguigu/exception/EnumException.class | Bin 1331 -> 1409 bytes .../handler/GlobalExceptionHandler.class | Bin 4886 -> 4902 bytes .../spzx/manger/MangerApplication.java | 2 + .../manger/controller/IndexController.java | 32 +++++-- .../spzx/manger/service/SysUserService.java | 16 ++++ .../service/impl/SysUserServiceImpl.java | 34 ++++++- .../manger/controller/IndexController.class | Bin 2690 -> 3398 bytes .../spzx/manger/service/SysUserService.class | Bin 289 -> 451 bytes .../service/impl/SysUserServiceImpl.class | Bin 4009 -> 4475 bytes .../spzx/model/entity/system/SysUser.java | 36 +++---- .../atguigu/spzx/model/vo/result/Result.java | 2 +- .../dto/system/LoginDto$LoginDtoBuilder.class | Bin 0 -> 1922 bytes .../atguigu/spzx/model/vo/result/Result.class | Bin 6571 -> 6564 bytes 17 files changed, 190 insertions(+), 32 deletions(-) create mode 100644 spzx-common/common-service/src/main/java/com/atguigu/config/RedisConfiguration.java create mode 100644 spzx-model/target/classes/com/atguigu/spzx/model/dto/system/LoginDto$LoginDtoBuilder.class diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index df280b1..4cccdb3 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -1,6 +1,13 @@ diff --git a/spzx-common/common-service/src/main/java/com/atguigu/config/RedisConfiguration.java b/spzx-common/common-service/src/main/java/com/atguigu/config/RedisConfiguration.java new file mode 100644 index 0000000..155eee0 --- /dev/null +++ b/spzx-common/common-service/src/main/java/com/atguigu/config/RedisConfiguration.java @@ -0,0 +1,90 @@ +package com.atguigu.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.CacheManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializationContext; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Configuration +@Slf4j +public class RedisConfiguration { + /** + * 使用StringRedisSerializer序列化为字符串 + */ + @Bean + public RedisTemplate redisTemplate(LettuceConnectionFactory factory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(factory); + // 设置key序列化为String + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashKeySerializer(new StringRedisSerializer()); + // 设置value序列化为JSON,使用GenericJackson2JsonRedisSerializer替换默认的序列化 + redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); + return redisTemplate; + } + + /** + * 解决cache(@Cacheable)把数据缓存到redis中的value是乱码问题 + */ + @Bean + @SuppressWarnings("all") + public CacheManager cacheManager(RedisConnectionFactory factory) { + StringRedisSerializer redisSerializer = new StringRedisSerializer(); + // json序列化 + Jackson2JsonRedisSerializer serializer = jsonRedisSerializer(); + // 配置序列化 + RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); + RedisCacheConfiguration redisCacheConfiguration = config + .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer)); + + return RedisCacheManager.builder(factory).cacheDefaults(redisCacheConfiguration).build(); + } + + /** + * 指定的日期模式 + */ + public Jackson2JsonRedisSerializer jsonRedisSerializer() { + // LocalDatetime序列化,默认不兼容jdk8日期序列化 + JavaTimeModule javaTimeModule = new JavaTimeModule(); + javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + + ObjectMapper mapper = new ObjectMapper(); + // 设置Object访问权限 + mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + // 记录序列化之后的数据类型,方便反序列化 + mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL); + // 关闭默认的日期格式化方式,默认UTC日期格式 yyyy-MM-dd’T’HH:mm:ss.SSS + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + mapper.registerModule(javaTimeModule); + + return new Jackson2JsonRedisSerializer<>(mapper, Object.class); + } +} \ No newline at end of file diff --git a/spzx-common/common-service/src/main/java/com/atguigu/exception/EnumException.java b/spzx-common/common-service/src/main/java/com/atguigu/exception/EnumException.java index cb09563..ce52e32 100644 --- a/spzx-common/common-service/src/main/java/com/atguigu/exception/EnumException.java +++ b/spzx-common/common-service/src/main/java/com/atguigu/exception/EnumException.java @@ -12,4 +12,5 @@ public class EnumException { public static final String CAPTCHA_IS_EMPTY = "提交验证码不能为空"; public static final String KEY_IS_EMPTY = "验证码key不能为空"; public static final String VERIFICATION_CODE_DOES_NOT_MATCH = "验证码不匹配"; + public static final String VERIFICATION_CODE_IS_EMPTY = "验证码失效或不存在"; } diff --git a/spzx-common/common-service/src/main/java/com/atguigu/handler/GlobalExceptionHandler.java b/spzx-common/common-service/src/main/java/com/atguigu/handler/GlobalExceptionHandler.java index b912b32..d2dbe8c 100644 --- a/spzx-common/common-service/src/main/java/com/atguigu/handler/GlobalExceptionHandler.java +++ b/spzx-common/common-service/src/main/java/com/atguigu/handler/GlobalExceptionHandler.java @@ -29,7 +29,7 @@ public class GlobalExceptionHandler { @ResponseBody public Result exceptionHandler(RuntimeException exception) { log.error("运行时异常信息:{}", exception.getMessage()); - return Result.error(500, exception.getMessage()); + return Result.error(500, "出错了啦"); } // 捕获系统异常 diff --git a/spzx-common/common-service/target/classes/com/atguigu/exception/EnumException.class b/spzx-common/common-service/target/classes/com/atguigu/exception/EnumException.class index c69e99a98d5bd1f80e212cb77523770b0d869fab..7346b589f4edcadb221e6b0f1ffc0311fdf6c21f 100644 GIT binary patch delta 466 zcmdnY)yU0t>ff$?3=9mm3^p6N7@2IO!d!zq-8`KgLp=Tc;+_3nT;n~1<6V6NLLxaB zG#DAAU#{wTvA*&7g2tyyHa?r$@vLLolO4TJ*Uor4XT@etCQ(L4j>+=Og%OerY77Dl zj0}Q6vzZvw8CZdARt7d8sRxvjEZ{4J<4+ zENg%?69aYwS)c|o0achWm;-e&0`*!l*g=fZ1q(1RFbnZ+z-kI4beN&0Ffv$yRapZ7 D)tWZ@ delta 371 zcmZ{gOAY}+6h-f=>eA9a5yF^Bqy7IR%-MjM9hg{xE$Dp+F_0KofHjG@MaMvx+*hA- zPp4~}ICpRiznp)JvFefGz7Hg(|m_ZIr|7NZw6 FeggbD8PNa$ diff --git a/spzx-common/common-service/target/classes/com/atguigu/handler/GlobalExceptionHandler.class b/spzx-common/common-service/target/classes/com/atguigu/handler/GlobalExceptionHandler.class index f713d2a888a851f4ee1b2e434a336d3e67cf794c..471382fb9980ed0de2a812b0d9f94c31069360e1 100644 GIT binary patch delta 1304 zcmZ{jNl+6(6o&s!W|%OHQ3g%K!WcvY3KW8ZN)#1WkVRZ@0m=pUeP6**MBEo_L8G`Y z2dga9RHb6d(u)Vnvp26s^yI~(W%+stfzolRy61KGTfTnpb*JyCPyP5i@)p2!JbJ0N z+lFY-Gm-Dt179L-(T=AM6!3s8EpZZ(6%;b0@S4OFRfQLmHKbw+|7e0X#$aC3hepwzjaxH`Qwd+~Wy(e_5Z{6K08nIr%1`QjrDfmgACrfP%8N6N1 z2+m3>vpG9e+`vr*0paNuzd7hV>*5Vg54*>koa3bj3?6PcJ^X{y$2RjHPFLm@N?!sP z%{sQyteLWmZP-pLh8@@m37dJ&;A}(as<6@Qh7-e0eV4f&5z_}oU>A0i-5%1C87+Xl zG;G+1{q)yKIzYz<>%baG@eu8aAcsW|k{83?>+ls6eN1);zSkILM>6{vhA~dh3uDv^ z(_KHyC}Q#cm*t2R%TWuKBQcg#9E-73#aLW|B|kf4V4?{_R1?D}`kNz@II;$CxZ*i+ zQ5u@8IGQaun&KSCV;t2n4#O=#rc!vn$-#tVk&rwBnJ@sv9S3m}h+zeC!UDvIgPepc zietb}wxayXE0lyWr#}O|9W;4BP$eEzK?_ciVJjI*^grF#8!fca+Z$&r!k>!w#@SdN z%7c^$nT-4*5A*5vWqtK1tIW|WLZ}KLEk|D(Lakg-l^ek-pjZ-mqFnl#Skdg*!aaJ1 zA=-TsIUI{2IEVA(JQogJAW0HI;ur8!)-Dow3YGT~o!W4j&K+RCP^i!g{-@QiSX}3# zc^wC?ny*c?dTl!S6knq52xDCk%1c@>^uNet0%@l`8?KoiMV2|OuhXFL=%8^McW9-O LbQkyW5UGCvoTkq< delta 1277 zcmZvb$x{6{P-P*cii#Yxtn%c|tA7CM!J9|R^7RlxN@uFN=e_Q?eEs_M>$u@K<@2A}_W(BH z<&-k0<8O3PrgVhKSj!O3V@=_T0w*%fh(s3usmo{Uc$(gB$`K~H4ADGBi4HN5d!CF< zW^Be5?$&oHTZKab!=VKJQSag|LozGkHHHY&HsQFP!NorWyOtZVlOeRAv#q(QuC}Az zS>Mvp-mRb%Wiram*oEEviy<#`F9UOm<$Y#UVn26CSwRQQs6sWbk_y>jJ}xCjA7L=h zjZSzEJF$&VOYjv5#kA-2>HaG@>Yw3 zJ?8_K)rK(!2OqRJ_*Y9DYv3%@7T-t}3Ie0qiW4-ORart4PLjrO3e7N}f#-!LxrMC) z9nBH2V3}%fQ}rmHJrIS{Xd%B=vXU4nKpPDm&Y+$CR+7%rc1JZ>9T|4gnn-d^Bq6y1 zdNrVZ8nSg|(hTC>VW}Qr?3WkrM4@{T^HvSGNE1Ue&Hx&_pTfd)VZJ-AYozbyi6c}-vB!fue zKR_;3t)IZd>3Z+bt`2u;-w5^_nKC`z|C;@t#&P=9;}|iZzBkeAm9Z34d?u^Wi=!UM pQ=~8~zR55Gxle04JWwNwDi4zWkOrj(r!j(Oq$wng;swSL`4`*TzWo3I diff --git a/spzx-manager/src/main/java/com/atguigu/spzx/manger/MangerApplication.java b/spzx-manager/src/main/java/com/atguigu/spzx/manger/MangerApplication.java index 2b3edfe..74257de 100644 --- a/spzx-manager/src/main/java/com/atguigu/spzx/manger/MangerApplication.java +++ b/spzx-manager/src/main/java/com/atguigu/spzx/manger/MangerApplication.java @@ -2,10 +2,12 @@ package com.atguigu.spzx.manger; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication +@EnableCaching @EnableScheduling @ComponentScan("com.atguigu") public class MangerApplication { diff --git a/spzx-manager/src/main/java/com/atguigu/spzx/manger/controller/IndexController.java b/spzx-manager/src/main/java/com/atguigu/spzx/manger/controller/IndexController.java index d4c6c90..8d68933 100644 --- a/spzx-manager/src/main/java/com/atguigu/spzx/manger/controller/IndexController.java +++ b/spzx-manager/src/main/java/com/atguigu/spzx/manger/controller/IndexController.java @@ -3,8 +3,8 @@ package com.atguigu.spzx.manger.controller; import com.atguigu.spzx.manger.service.SysUserService; import com.atguigu.spzx.manger.service.ValidateCodeService; import com.atguigu.spzx.model.dto.system.LoginDto; +import com.atguigu.spzx.model.entity.system.SysUser; import com.atguigu.spzx.model.vo.result.Result; -import com.atguigu.spzx.model.vo.result.ResultCodeEnum; import com.atguigu.spzx.model.vo.system.LoginVo; import com.atguigu.spzx.model.vo.system.ValidateCodeVo; import io.swagger.v3.oas.annotations.Operation; @@ -21,17 +21,31 @@ public class IndexController { @Autowired private ValidateCodeService validateCodeService; - @Operation(summary = "登录请求", description = "登录请求实现") - @PostMapping("login") - public Result login(@RequestBody LoginDto loginDto) { - LoginVo vo = sysUserService.login(loginDto); - return Result.success(vo, ResultCodeEnum.SUCCESS); - } - @Operation(summary = "生成验证码", description = "生成验证码信息") @GetMapping("generateValidateCode") public Result generateValidateCode() { ValidateCodeVo vo = validateCodeService.generateValidateCode(); - return Result.success(vo, ResultCodeEnum.SUCCESS); + return Result.success(vo); + } + + @Operation(summary = "登录请求", description = "登录请求实现") + @PostMapping("login") + public Result login(@RequestBody LoginDto loginDto) { + LoginVo vo = sysUserService.login(loginDto); + return Result.success(vo); + } + + @Operation(summary = "获取登录用户信息", description = "获取当前登录用户信息") + @GetMapping("getUserInfo") + public Result getUserInfo(@RequestHeader(name = "token") String token) { + SysUser sysUser = sysUserService.getUserInfo(token); + return Result.success(sysUser); + } + + @Operation(summary = "用户退出", description = "用户退出接口") + @GetMapping(value = "/logout") + public Result logout(@RequestHeader(value = "token") String token) { + sysUserService.logout(token); + return Result.success(); } } diff --git a/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/SysUserService.java b/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/SysUserService.java index 4f961ba..7cc553a 100644 --- a/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/SysUserService.java +++ b/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/SysUserService.java @@ -1,6 +1,7 @@ package com.atguigu.spzx.manger.service; import com.atguigu.spzx.model.dto.system.LoginDto; +import com.atguigu.spzx.model.entity.system.SysUser; import com.atguigu.spzx.model.vo.system.LoginVo; public interface SysUserService { @@ -11,4 +12,19 @@ public interface SysUserService { * @return 登录后结果 */ LoginVo login(LoginDto loginDto); + + /** + * * 获取当前登录用户信息 + * + * @param token token值 + * @return 用户信息 + */ + SysUser getUserInfo(String token); + + /** + * * 用户退出接口 + * + * @param token token值 + */ + void logout(String token); } diff --git a/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/impl/SysUserServiceImpl.java b/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/impl/SysUserServiceImpl.java index ec6fcda..ea9ac96 100644 --- a/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/impl/SysUserServiceImpl.java +++ b/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/impl/SysUserServiceImpl.java @@ -24,7 +24,7 @@ public class SysUserServiceImpl implements SysUserService { @Autowired private SysUserMapper sysUserMapper; @Autowired - private RedisTemplate redisTemplate; + private RedisTemplate redisTemplate; /** * * 登录请求实现 @@ -38,12 +38,14 @@ public class SysUserServiceImpl implements SysUserService { String userName = loginDto.getUserName(); String captcha = loginDto.getCaptcha(); String key = loginDto.getCodeKey(); + // 得到Redis中验证码 + String code = (String) redisTemplate.opsForValue().get(key); stringEmptyUtil.isEmpty(userName, EnumException.USERNAME_IS_EMPTY); stringEmptyUtil.isEmpty(password, EnumException.PASSWORD_IS_EMPTY); stringEmptyUtil.isEmpty(captcha, EnumException.CAPTCHA_IS_EMPTY); stringEmptyUtil.isEmpty(key, EnumException.KEY_IS_EMPTY); - // 得到Redis中验证码 - String code = (String) redisTemplate.opsForValue().get(key); + stringEmptyUtil.isEmpty(code, EnumException.VERIFICATION_CODE_IS_EMPTY); + // 验证码不匹配 assert code != null; if ((!Objects.equals(code.toLowerCase(), captcha.toLowerCase()))) { @@ -63,8 +65,32 @@ public class SysUserServiceImpl implements SysUserService { } // 登录成功 String token = UUID.randomUUID().toString().replaceAll("-", ""); - redisTemplate.opsForValue().set(userName, token, 7, TimeUnit.DAYS); + redisTemplate.opsForValue().set(token, userName, 7, TimeUnit.DAYS); // 返回loginVo对象 return LoginVo.builder().token(token).build(); } + + /** + * * 获取当前登录用户信息 + * + * @param token token值 + * @return 用户信息 + */ + @Override + public SysUser getUserInfo(String token) { + String username = (String) redisTemplate.opsForValue().get(token); + SysUser sysUser = sysUserMapper.selectByUsername(username); + sysUser.setPassword("******"); + return sysUser; + } + + /** + * * 用户退出接口 + * + * @param token token值 + */ + @Override + public void logout(String token) { + redisTemplate.delete(token); + } } diff --git a/spzx-manager/target/classes/com/atguigu/spzx/manger/controller/IndexController.class b/spzx-manager/target/classes/com/atguigu/spzx/manger/controller/IndexController.class index 75663be0a9152709fbbe872fc80130a2ef059d92..4452344e4078b041b608747ab1f3742ad338dd8e 100644 GIT binary patch literal 3398 zcmcInT~ixX7=BM6gpUXaw6?a^mRcJ=+J(~EDzp`-P&5=IG_6+aEXg6=Hrd79lK@^7 zy|B(Gb;jz9H-3!cjN^s0GtSV~sowiL4A4K}_?*oqY{CYpqZi4^*?m8r^SmGD&7Xfi z{GEtS(|fh#qly4k2FXuVj2f@28C6NDdO{hSy3S*QQB|L&YvK%}icnj$hN`J1K(#@t zqadSWF(aj@B9Yb-X~mlPU`|Ovm77Y;(1mFvllVEJ$NAh~Vb7>Jqb9YuD)^ug=MipZ zv>0b}B3#avl@n2-8`XO2sGb@E)EK0vsfkg~zp%lmCBb!W0+8DSjD^}fFadK?$ry?? zZwa0%0u?oSYpI2H1ZZcFo}pcg4sXPh*EhM9P6}nhUKj@WQUPkr6coFOsIPUT|PcB}0jw3}Hpm!fVAE5m~IzX+Aj&3~8X6lUmNh6`@ zj4p>fJljmfMS;q&lszYmO;794Zp(si3Gjs=9ikT*)g`!)#~sn94MqcQ8Y9Bg^h9~X zTo;;{&&Sju!8RTWQX93S3UCr5jdIxGWj8A0-YJ8Agi*()c~cxNM!P4{aGv5(&C;fl zykFN1p$g5=kqW26hM7QJN$}IAn&PvDc|)1vs%|OMYD^gByrLEql>W3ZW;K(?dl^;A z;$qYg)^vU$oton2qzdzln!-j*O-5BylY8f3rMRZS-*Jy9ZB@_k<;#HYZV%mjt~)_< zmltBks3xK%bXBBH;JUhf*7}~<)fqTz3u{QVSv4X1Q>I5TRLe!4rHswU9suGYi)u`z zRC68#uHN}}<<{qqfBtlBX<_xd1*BP=TQO6ck)lY4lJ|f8@%_relBCirbhCU)nbP#Q z%ds-d#i%+nBl8mlgWi}18<+mGf+@|nYP%#+W{f(^@#s~QjM~eIuXn?IS>hrY<>HzV zA6I4C3T`61KKg&ow2f@Y!;)zbT>bjD?4vK&mX=rUeTZ^!Z?nIAv$}X!-bLFD-ne18 zqSsnn%Z0-i74`OwPw@BC+!6yud>+7y?uD%y8bVSUc)u`iaAa(g>w0m_$b`=|e)RZq zQTFbUj8a|=v7C`oTxEmj?M()7*V^K8_V!n~xUJs#Y30^(zUcPlUS%JBk^ST|FM*TW z4y?odd9KE}39pqp@>ph%?eOu6Fvwj|VqrA(@_IXKSqe!Oo7uNE_bELxwyVChLz?HpY1P|b=OPicDou0%8A zbC?dQF-Hnko5&%Um4T{vh&=40`_xey#x8`h+ZD$80*&>sCqX*oNoX<)U6H&fAw^w~E)_#M gD^2s_jh;im+l3Ru6R^zMoR~07|FdU%|DNzkl z6%76zYZjV|rXoa&FwGcMF}Ma+H!TCy8v%eDN2xbLNq|8TgT}jYjAn*8O$S)0wg*=s zhbrrE378mogZ8)RTA_6TMwWvr;Dr-DGq1Ph*~}w1j^hO7I$^^}oFesU(u<6ife1AL zXUtpqXmpm^kdAYR>KLX6!*Jmim`+d^D8PA&4xOUq|uaMJL}N-Rs%&q>Tn*AFf! z%FIi*)|{9iVV{~;l37xzUtC#SlA5a@Tv-g#W6j9GT9Tign#ah%mXn{JUs}S*Ad1a| yu!&doT$ova${E-g7#Y}s*0VA)a4;|cg*X|w5JKEwAsz-^6d@po52%HSfgb?A^D5;4 delta 53 zcmX@iypW0O)W2Q(7#J9A8Mr5Mot+%as3XV7!pOkNz{bGHzz&pPWn|z0Qj83oK$3}p F3jj_P2hsol diff --git a/spzx-manager/target/classes/com/atguigu/spzx/manger/service/impl/SysUserServiceImpl.class b/spzx-manager/target/classes/com/atguigu/spzx/manger/service/impl/SysUserServiceImpl.class index 9ce603ec7f8d2021d367d11c1c1871aa1c40061b..bc70e3d8ba1dbc62b4433826f8bb3f35d2540840 100644 GIT binary patch delta 1826 zcmZWpS#(oX6x}y@Q(j+dNr4b(p@o8Jnove7VJcIhND(MdTd@!q3qzn!X1!YwM zMK2(&$RH?#LV@DzfCVQ6QPdBYU#{g3ZQ;WYmp?8A^}Ls~#bs93ednHg?iuzz=bj$+ z*Kqab-|bfbOvMiu)GWrUEyXEW7%F3!hHT{Uc1vyA2;|BbsbLfzW*E;qEV+EGwPDef;KpiufYQ^AIW^IfUjb%QDYefbniRWRo~LNchBwCJ$H6= z+-_~}KHaWjJSNDPsNoS5@^h@xIf=pE*|f9!Xx)Q$3MTU$OZMEU41?~T*?p&}jttfX zw*J>V6O)6NqYy7t$1)gK_6&a($Q51leno1tMQX7L-=%;GuZt1tT*(P$tNs}6_e zL?YpcirKKLaABT?5@-x5vG9WM=0IeYKN?W+7#7GV)vyqcbGJ~!7W0^p$IAF&!J#a| zG7Tb@^A2IKl7%NURG^aoA{0t1G(3eWo+-{sTLr(2r!_o-)eIg!M)dFou`+uN!$S$2 zdXrZ1EUIO!)vylhd4^PK3&AEMY+S2V9DJMPP+Zt(L-F*#rnwnH> z!e$v;G;GE5{3mImdlO#N@RCuL5(_6-QxIohUIldwFzVi+;bpwSC(31Mui`ZsyEN>^ z9)>J_Mb6^Qa=tPGZ)n(yH+h%5B#mRAjQtu8;B5vMCFbHGWqw)%8fCnr;Skn5Gs|x?q7EHC3RR=@Sr)CktEUgJbf(&ng7!b z#t=HWV4h!m&^~>T(Rid6>5gc6X{KEP?Fe#+?iR4bwM(=$f&c^XG2(!huz-#hQZlrn zjbhMki%Nzn>F($2kV|PvT}Vs1PoOo!C%P|TppHzZ*oNU2dXdZMbqch!Vtyl1FJn=KeMt+J zUNxdRMIGhkBt7YE!%7Q$vQxgEGzu6-o>l~Xic@jQIyUHduE#^vIBZ3Yju-5;_H8=G zZ1>p=k47CfZ-4B(i263XE)fcEIc+))>NsrBVTFNP6&!p-WiO1w*q1XPNjuYNQGaKmH%{zsA3#65L&wQR$U@0U2-ap4^@T_bRDTm;5f-h85m(=kBMZLm9n)L1|IWyf L95#UCd)WR36)dn9 delta 1398 zcmZXTS!`5Q7{`BSwsU8C80rKlQz!zmly(Y~#eqWE_f4P*Qbnv~pNKsW{MR}Q%%jNQ=V|+^FVo3qkzp~NfoAj$F`{Zv-1TM?6mRt?Y_A&Pa_@0`E#xNNjg(W;nAtFVZVX z@0@zN#UcYbP}CR6z7PG8oOT#XGBoOM;zQA4K-%v%zf-@w8a$sddQlRUFn(2~3+mU<}AQGK<#!|P?&E7nM9ffIG2I?1Xe z<@Zy(;T|?pnPgq$-N^e%))xfbjM7nFG}whr=h)oDwg8Rnj0ThJOLF*(+|Y~5N-^DJ z?Jrymkb4g#ooulTqBl9@RFlg{VnXU*iWn+d&1Vh6STEMC#M#Fv4l$ZzjFDu8Qehld zWB}LX_qxfH6xGYy>Fl6dh~+HjQseoP^VAFNA=>y(kXMTTPEwFhTKI(qs_Uh%B5EaZ zz075wXrPH^v=p1p1+h6&s*k9zo*>`LJ#z8=BVB4uhQ`s1efWXsJ^E=@-=nA4xhMgC zCG8-2F14#g@Q9Q);IT-?{3J(e(7xmNyyqF`dU{f { * @return Result */ public static Result success() { - return Result.success(null); + return Result.success(null, ResultCodeEnum.SUCCESS); } /** diff --git a/spzx-model/target/classes/com/atguigu/spzx/model/dto/system/LoginDto$LoginDtoBuilder.class b/spzx-model/target/classes/com/atguigu/spzx/model/dto/system/LoginDto$LoginDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..e8455efd36dbe9d24edf3dbc03c485ab9dd93dc4 GIT binary patch literal 1922 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 VfgkbnbNrHb^1Ag`_zm7e>i-~56kq@V literal 6571 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