Explorar el Código

feat:
根据性别判断头像

18339543638 hace 2 años
padre
commit
869b29415a

+ 18 - 10
tr-framework/src/main/java/cn/tr/core/utils/AvatarUtil.java

@@ -25,6 +25,7 @@ import java.util.regex.Pattern;
  */
 @Slf4j
 public class AvatarUtil {
+    private final static Color defaultColor=new Color(2, 168,250);
     private volatile static Map<String, String> avatarMap=new WeakHashMap<>();
     private static Font singleWordFont;
 
@@ -48,15 +49,11 @@ public class AvatarUtil {
      * 圆角大小
      */
     private static final Integer FILLET=150;
-    /**
-     * 绘制字体头像
-     * 如果是英文名,只显示首字母大写
-     * 如果是中文名,只显示最后两个字
-     * @param name
-     * @throws IOException
-     * @return  头像的base64存储
-     */
-    public static String generateAvatar(String name){
+
+    public static String generateAvatar(String name,Color color){
+        if(color==null){
+            color=defaultColor;
+        }
         String key=new String(StrUtil.trim(name));;
         String result = avatarMap.get(key);
         if(StrUtil.isNotBlank(result)){
@@ -91,7 +88,7 @@ public class AvatarUtil {
         g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                 RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
 
-        g2.setBackground(getRandomColor());
+        g2.setBackground(color);
 
         g2.clearRect(0, 0, width, height);
 
@@ -150,6 +147,17 @@ public class AvatarUtil {
         avatarMap.put(key,"data:image/png;base64,"+result);
         return "data:image/png;base64,"+result;
     }
+    /**
+     * 绘制字体头像
+     * 如果是英文名,只显示首字母大写
+     * 如果是中文名,只显示最后两个字
+     * @param name
+     * @throws IOException
+     * @return  头像的base64存储
+     */
+    public static String generateAvatar(String name){
+        return generateAvatar(name,defaultColor);
+    }
 
 
     /**

+ 19 - 5
tr-framework/src/main/java/cn/tr/core/utils/UserUtil.java

@@ -1,7 +1,9 @@
 package cn.tr.core.utils;
 
+import cn.hutool.core.lang.Pair;
 import cn.hutool.core.util.StrUtil;
 
+import java.awt.*;
 import java.util.function.Function;
 
 /**
@@ -12,19 +14,31 @@ import java.util.function.Function;
  */
 
 public class UserUtil {
-    public static Function<String, String> userNickNameSupplier=userId->"";
+    /**
+     * 根据
+     */
+    public static Function<String, Pair<String,String>> userNickNameSupplier= userId->null;
 
-    public static String getNickName(String userId){
+    public static Pair<String,String> getNickNameAndGender(String userId){
         if(StrUtil.isBlank(userId)){
-            return "";
+            return null;
         }
-        return userNickNameSupplier.apply(userId);
+        return  userNickNameSupplier.apply(userId);
     }
 
     public static String getAvatar(String userId){
         if(StrUtil.isBlank(userId)){
             return "";
         }
-        return AvatarUtil.generateAvatar(getNickName(userId));
+        Pair<String, String> nickNameAndGender = getNickNameAndGender(userId);
+        if(nickNameAndGender==null){
+            return getAvatar("匿名",null);
+        }else {
+            return getAvatar(nickNameAndGender.getKey(),nickNameAndGender.getValue());
+        }
+    }
+
+    public static String getAvatar(String nickname,String gender){
+        return StrUtil.equals(gender,"WOMAN")? AvatarUtil.generateAvatar(nickname, Color.PINK):AvatarUtil.generateAvatar(nickname,null);
     }
 }

+ 2 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/dto/AccountUserInfoDTO.java

@@ -2,6 +2,7 @@ package cn.tr.module.sys.oauth2.dto;
 
 import cn.hutool.core.util.StrUtil;
 import cn.tr.core.utils.AvatarUtil;
+import cn.tr.core.utils.UserUtil;
 import cn.tr.module.sys.user.dto.*;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -70,7 +71,7 @@ public class AccountUserInfoDTO {
         private Date lastLoginDate;
 
         public String getAvatar() {
-            return StrUtil.isBlank(avatar)? AvatarUtil.generateAvatar(nickname):avatar;
+            return UserUtil.getAvatar(nickname,gender);
         }
     }
 

+ 2 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/dto/OAuth2PswLoginInfoDTO.java

@@ -2,6 +2,7 @@ package cn.tr.module.sys.oauth2.dto;
 
 import cn.hutool.core.util.StrUtil;
 import cn.tr.core.utils.AvatarUtil;
+import cn.tr.core.utils.UserUtil;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -36,6 +37,6 @@ public class OAuth2PswLoginInfoDTO implements Serializable {
     private String email;
 
     public String getAvatar() {
-        return StrUtil.isBlank(avatar)? AvatarUtil.generateAvatar(nickname):avatar;
+        return UserUtil.getAvatar(userId);
     }
 }

+ 0 - 6
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/OnlineUserSessionDTO.java

@@ -1,8 +1,6 @@
 package cn.tr.module.sys.user.dto;
 
 import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.tr.core.utils.AvatarUtil;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -53,8 +51,4 @@ public class OnlineUserSessionDTO implements Serializable {
     public Integer getTokenCount(){
         return CollectionUtil.size(tokenSessionList);
     }
-
-    public String getAvatar() {
-        return StrUtil.isBlank(avatar)? AvatarUtil.generateAvatar(nickname):avatar;
-    }
 }

+ 0 - 8
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysUserDTO.java

@@ -1,7 +1,5 @@
 package cn.tr.module.sys.user.dto;
 
-import cn.hutool.core.util.StrUtil;
-import cn.tr.core.utils.AvatarUtil;
 import cn.tr.core.validation.Insert;
 import cn.tr.core.validation.Update;
 import cn.tr.module.sys.user.enums.UserStatusEnum;
@@ -125,10 +123,4 @@ public class SysUserDTO extends BaseDTO {
     private String remark;
 
     private String tenantId;
-
-
-    public String getAvatar() {
-        return StrUtil.isBlank(avatar)? AvatarUtil.generateAvatar(nickname):avatar;
-    }
-
 }

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/provider/SysUserNickNameProvider.java

@@ -21,6 +21,6 @@ public class SysUserNickNameProvider {
 
     @PostConstruct
     public void init(){
-        UserUtil.userNickNameSupplier=userService::selectNickNameById;
+        UserUtil.userNickNameSupplier=userService::selectNickNameAndAvatarById;
     }
 }

+ 5 - 5
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysUserService.java

@@ -2,7 +2,7 @@ package cn.tr.module.sys.user.service;
 import cn.tr.module.sys.user.dto.SysUserDTO;
 import cn.tr.module.sys.user.dto.SysUserEditDTO;
 import cn.tr.module.sys.user.dto.SysUserQueryDTO;
-import cn.tr.plugin.security.bo.UserLoginInfoBO;
+import cn.hutool.core.lang.Pair;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 
@@ -35,11 +35,11 @@ public interface ISysUserService {
      * @param userId 用户id
      * @return 用户
      */
-    @Cacheable(value = "user:nickname",key = "#userId")
-    String  selectNickNameById(String userId);
+    @Cacheable(value = "user:nickname&avatar",key = "#userId")
+    Pair<String, String> selectNickNameAndAvatarById(String userId);
 
-    @CacheEvict(value = "user:nickname",key = "#userId")
-    default void delNickNameCache(String userId){
+    @CacheEvict(value = "user:nickname&avatar",key = "#userId")
+    default void delNickNameAndAvatarCache(String userId){
 
     };
     /**

+ 7 - 4
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysUserServiceImpl.java

@@ -27,7 +27,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import java.util.*;
 import java.util.stream.Collectors;
-
+import cn.hutool.core.lang.Pair;
 /**
  * @ClassName : SysUserServiceImpl
  * @Description :
@@ -82,9 +82,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserRepository,SysUserPO>
     }
 
     @Override
-    public String selectNickNameById(String userId) {
+    public Pair<String,String> selectNickNameAndAvatarById(String userId) {
         SysUserPO user = getById(userId);
-        return ObjectUtil.isNull(user)?"":user.getNickname();
+        if(user==null){
+            return null;
+        }
+        return Pair.of(user.getNickname(),user.getGender());
     }
 
     @Override
@@ -97,7 +100,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserRepository,SysUserPO>
             assignUserPortal(source.getId(),source.getPortalIds());
             assignUserPosition(source.getId(),source.getPostIds());
         }
-        sysUserService.delNickNameCache(source.getId());
+        sysUserService.delNickNameAndAvatarCache(source.getId());
         return result;
     }
 

+ 2 - 3
tr-plugins/tr-spring-boot-starter-plugin-satoken/src/main/java/cn/tr/plugin/security/bo/UserLoginInfoBO.java

@@ -1,7 +1,6 @@
 package cn.tr.plugin.security.bo;
 
-import cn.hutool.core.util.StrUtil;
-import cn.tr.core.utils.AvatarUtil;
+import cn.tr.core.utils.UserUtil;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -95,6 +94,6 @@ public class UserLoginInfoBO implements Serializable {
     private String tenantId;
 
     public String getAvatar() {
-        return StrUtil.isBlank(avatar)? AvatarUtil.generateAvatar(nickname):avatar;
+        return UserUtil.getAvatar(userId);
     }
 }