Explorar el Código

fix bug 前端number类型超过17位精度丢失

skyline hace 2 años
padre
commit
6d59509521

+ 1 - 1
admin-web/src/views/admin/user/dialog.vue

@@ -114,7 +114,7 @@ const formRef = ref();
 //定义初始变量,重置使用
 const initState = () => ({
   ruleForm: {
-    id: 0
+    // id: 0
   },
   btnLoading: false,
   dialog: {

+ 1 - 1
admin/src/main/java/com/kym/admin/controller/AdminUserController.java

@@ -116,7 +116,7 @@ public class AdminUserController extends IController {
     }
 
     @GetMapping("detail/{id}")
-    public R<?> detail(@PathVariable(name = "id") int id) {
+    public R<?> detail(@PathVariable(name = "id") long id) {
         return resp(() -> adminUserService.detail(id));
     }
 

+ 35 - 0
common/src/main/java/com/kym/common/config/JacksonConfig.java

@@ -73,6 +73,23 @@ public class JacksonConfig {
         }
     }
 
+    /**
+     * @author skyline
+     * @description 解决后端long类型返回前端精度丢失问题(前端number类型支持17为,本项目id为long19为,最后两位会变成00)
+     * @date 2023-10-03 00:28
+     */
+    public class JsonLongSerializer extends JsonSerializer<Long> {
+        @Override
+        public void serialize(Long aLong, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            jsonGenerator.writeString(Long.toString(aLong));
+        }
+    }
+
+
+    public void serialize(Long aLong, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+        jsonGenerator.writeString(Long.toString(aLong));
+    }
+
     public class MyBeanSerializerModifier extends BeanSerializerModifier {
 
         /**
@@ -88,6 +105,8 @@ public class JacksonConfig {
          */
         private JsonSerializer nullNumberJsonSerializer = new MyNullNumberJsonSerializer();
 
+        private JsonSerializer longSerializer = new JsonLongSerializer();
+
 
         /**
          * 最重要的一个东西就是BeanPropertyWriter 这个类,这个类是由SerializerFactory 工厂进行实例化的
@@ -105,6 +124,9 @@ public class JacksonConfig {
                     writer.assignNullSerializer(this.nullArrayJsonSerializer);
                 } else if (isNumberType(writer)) {
                     writer.assignNullSerializer(this.nullNumberJsonSerializer);
+                    if(isLongType(writer)){
+                        writer.assignSerializer(this.longSerializer);
+                    }
                 } else {
                     writer.assignNullSerializer(this.nullJsonSerializer);
                 }
@@ -133,6 +155,19 @@ public class JacksonConfig {
             Class clazz = writer.getPropertyType();
             return clazz.equals(Integer.class) || clazz.equals(Long.class);
         }
+
+        /**
+         * 判断是long类型
+         *
+         * @param writer
+         * @return
+         */
+        protected boolean isLongType(BeanPropertyWriter writer) {
+            Class clazz = writer.getPropertyType();
+            return clazz.equals(Long.class);
+        }
+
+
     }
 
 

+ 1 - 1
service/src/main/java/com/kym/service/admin/AdminUserService.java

@@ -32,7 +32,7 @@ public interface AdminUserService extends IService<AdminUser> {
 
     void createAdminUser(AdminUserVo adminUserVo);
 
-    Object detail(int id);
+    Object detail(long id);
 
     void updateRole(long userId, List<Long> roleIdList);
 

+ 2 - 7
service/src/main/java/com/kym/service/admin/impl/AdminUserServiceImpl.java

@@ -70,8 +70,6 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
         if (pwd.equals(user.getPassword())) {
             StpUtil.login(user.getId());
             // 用户名存入session,统一日志读取使用
-            StpUtil.getSession().set("userId", user.getId());
-            StpUtil.getSession().set("companyId", user.getCompanyId());
             StpUtil.getSession().set("mobilePhone", user.getMobilePhone());
             user.setLastLoginTime(LocalDateTime.now());
             this.updateById(user);
@@ -115,10 +113,10 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
         var password = MD5.digestHex(adminUserVo.getPassword().concat(MD5.digestHex(adminUserVo.getMobilePhone()).substring(0, 5)));
         // 用户
         var adminUser = new AdminUser();
+        BeanUtils.copyProperties(adminUserVo, adminUser);
         adminUser.setId(IDGenerator.INS().nextId());
         adminUser.setPassword(password);
         adminUser.setCreateTime(LocalDateTime.now());
-        BeanUtils.copyProperties(adminUserVo, adminUser);
         save(adminUser);
         // 角色和权限
         var adminUserRole = new AdminUserRole()
@@ -128,7 +126,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
     }
 
     @Override
-    public Object detail(int id) {
+    public Object detail(long id) {
         AdminUser adminUser = baseMapper.selectById(id);
         adminUser.setPassword(null);
         List<AdminUserRole> userRoleList = adminUserRoleService.lambdaQuery().eq(AdminUserRole::getAdminUserId, id).list();
@@ -171,9 +169,6 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
                 .like(CommUtil.isNotEmptyAndNull(params.getMobilePhone()), AdminUser::getMobilePhone, params.getMobilePhone())
                 .like(CommUtil.isNotEmptyAndNull(params.getStatus()), AdminUser::getStatus, params.getStatus())
                 .list();
-        if (CommUtil.isNotEmptyAndNull(list)) {
-            list.forEach(user -> user.setPassword(null));
-        }
         return new PageBean<>(list);
     }
 }