Ver código fonte

user soft delete

xiongzhu 5 anos atrás
pai
commit
daf0fd9e26

+ 4 - 4
src/main/java/com/izouma/awesomeAdmin/repo/UserRepo.java

@@ -16,11 +16,11 @@ public interface UserRepo extends JpaRepository<User, Long>, JpaSpecificationExe
     @Query("update User u set u.del = true where u.id = ?1")
     void softDelete(Long id);
 
-    User findByUsername(String username);
+    User findByUsernameAndDelFalse(String username);
 
-    List<User> findAllByAuthoritiesContains(Authority authority);
+    List<User> findAllByAuthoritiesContainsAndDelFalse(Authority authority);
 
-    User findByOpenId(String openId);
+    User findByOpenIdAndDelFalse(String openId);
 
-    User findByPhone(String phone);
+    User findByPhoneAndDelFalse(String phone);
 }

+ 1 - 1
src/main/java/com/izouma/awesomeAdmin/security/JwtUserDetailsService.java

@@ -15,7 +15,7 @@ public class JwtUserDetailsService implements UserDetailsService {
 
     @Override
     public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
-        User user = userRepo.findByUsername(username);
+        User user = userRepo.findByUsernameAndDelFalse(username);
 
         if (user == null) {
             throw new UsernameNotFoundException(String.format("No user found with username '%s'.", username));

+ 16 - 4
src/main/java/com/izouma/awesomeAdmin/service/UserService.java

@@ -56,14 +56,26 @@ public class UserService {
         return userRepo.save(user);
     }
 
+    public void del(Long id) {
+        User user = userRepo.findById(id).orElseThrow(new BusinessException("用户不存在"));
+        user.setDel(true);
+        if (StringUtils.isNoneEmpty(user.getOpenId())) {
+            user.setOpenId(user.getOpenId() + "###" + RandomStringUtils.randomAlphabetic(8));
+        }
+        if (StringUtils.isNoneEmpty(user.getPhone())) {
+            user.setPhone(user.getPhone() + "###" + RandomStringUtils.randomAlphabetic(8));
+        }
+        userRepo.save(user);
+    }
+
     public User loginByPhone(String phone) {
-        return userRepo.findByPhone(phone);
+        return userRepo.findByPhoneAndDelFalse(phone);
     }
 
     public User loginMp(String code) throws WxErrorException {
         WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
         WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(accessToken, null);
-        User user = userRepo.findByOpenId(wxMpUser.getOpenId());
+        User user = userRepo.findByOpenIdAndDelFalse(wxMpUser.getOpenId());
         if (user == null) {
             user = User.builder()
                     .username(UUID.randomUUID().toString())
@@ -87,7 +99,7 @@ public class UserService {
             WxMaJscode2SessionResult result = wxMaService.jsCode2SessionInfo(code);
             String openId = result.getOpenid();
             String sessionKey = result.getSessionKey();
-            User userInfo = userRepo.findByOpenId(openId);
+            User userInfo = userRepo.findByOpenIdAndDelFalse(openId);
             if (userInfo != null) {
                 return userInfo;
             }
@@ -115,7 +127,7 @@ public class UserService {
 
         // 解密用户信息
         WxMaUserInfo wxUserInfo = wxMaService.getUserService().getUserInfo(sessionKey, encryptedData, iv);
-        User user = userRepo.findByOpenId(wxUserInfo.getOpenId());
+        User user = userRepo.findByOpenIdAndDelFalse(wxUserInfo.getOpenId());
 
         String avatarUrl = Constants.DEFAULT_AVATAR;
         try {

+ 1 - 1
src/main/java/com/izouma/awesomeAdmin/web/UserController.java

@@ -90,7 +90,7 @@ public class UserController extends BaseController {
     @PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/del/{id}")
     public void del(@PathVariable Long id) {
-        userRepo.softDelete(id);
+        userService.del(id);
     }
 
     @GetMapping("/excel")

+ 2 - 2
src/test/java/com/izouma/awesomeAdmin/repo/UserRepoTest.java

@@ -30,14 +30,14 @@ public class UserRepoTest {
     @Test
     public void createUser() {
 
-        User user = userRepo.findByUsername("root");
+        User user = userRepo.findByUsernameAndDelFalse("root");
         user.setPassword(new BCryptPasswordEncoder().encode("123456"));
         userRepo.save(user);
     }
 
     @Test
     public void findAllByAuthoritiesContains() {
-        List<User> list = userRepo.findAllByAuthoritiesContains(Authority.builder().name("ROLE_ADMIN").build());
+        List<User> list = userRepo.findAllByAuthoritiesContainsAndDelFalse(Authority.builder().name("ROLE_ADMIN").build());
         System.out.println(list);
     }
 }