用户资料门户的构建

1. 需求背景

  1. 老的页面停止维护了,且老旧, 功能单一,且页面分散. 急需做功能集成的平台化建设
  2. 原先的用户资料查询没有做权限管控, 每一次查询都会消耗我们组的人力资源.

2. 项目介绍

2.1. 项目地址

服务地址: [公司内网服务(略)]
工蜂地址: [公司内网仓库(略)]


2.2 项目的价值

  1. 进行平台化建设, 整合用户资料相关的所有功能, 方便使用者能一站式的解决问题
  2. 做好权限管理和管理员管控, 让所有人的查询都有迹可循, 可解放人力资源.
  3. 改造老的功能, 重构老的代码. 让现在的项目拓展性和可维护性更高, 后续交接项目更容易

2.3 项目的痛点

  1. 权限的细腻度划分

在进行权限管控时, 需要考虑到权限的细腻度问题, 往往相同小组中, 一个人需要使用到此功能, 那么小组的其他人大概率也会使用, 那么以小组为单位划分权限呢? 还是以个人为单位划分? 这里考虑到一些特殊情况(如, 某个小组的某个人可能需要管理员身份, 并且以小组为单位更容易信息造假), 所以采用的是以个人为单位划分权限. 不仅如此, 由于UDC/virtual字段众多, 并且有一些隐藏字段, 所以单纯的以人为单位做权限管控还不够, 这里采用的是以人+字段的方式做权限管控, 即: 某个人只能拥有某些字段的权限, 你无法查询到你没有权限的字段的信息(如你拥有20002/20031字段的权限, 但你去查询任意uin的20025字段的信息是会被拦截的

  1. pb调用的动态性

项目中会用到RPC调用拉取用户信息, 用RPC调用就离不开protobuf, 而在当前项目的场景下, 使用普通的.proto文件作为源数据来源显然是不可行的, 主要有以下几点: (1) UDC字段和虚拟字段一共有上千个, 如果要使用.proto文件, 就需要在message中写上千行信息, 并且字段的数量是在不断增加的, 每增加一个字段就需要修改一次.proto文件. (2) 使用者每次查询的字段是动态变化的, 一次RPC调用中只需填使用者需要查询的字段. 基于上诉情况, 不得不抛弃传统的.proto文件作为源数据. 这里使用了protobuf的反射, 在程序运行时通过使用者传来的参数, 动态的构建,proto文件, 将使用者的输入作为源数据.

  1. 面对海量查询时的资源分配问题

在用户信息查询界面, 可以使用导入号码包的功能, 批量的查询uin信息. 一旦号码包中的uin过多(比如百万个), 后端的处理就会很慢. 并且机器资源有限, 不能采用负载均衡等操作来减缓服务器压力. 这里采用注册任务式的异步处理来完成任务, 使用者导入一个号码包来查询时, 主服务会在MySQL插入一条任务信息, 异步服务会串行的执行任务(不使用协程去办法完成任务的原因是, CPU资源有限). 使用者可以在查看任务清单界面, 查询任务的完成情况, 并能导出已完成的任务的数据


2.4 项目的基本使用

2.4.1 项目概览

无极平台
权限管理
自助工具
管理员界面
资料修改系统
查看当前权限
申请字段权限
查看审批进度
用户资料查询
字段ID查询
查看任务清单
自助工具权限审批
权限管理页面
资料修改查询
普通查询
导入号码包查询
UDC字段查询
虚拟字段查询

项目支持的功能:

  • 单uin单field查询
  • 多uin多field查询
  • 导入号码包进行异步查询
  • UDC字段的解释查询
  • 虚拟字段的解释查询
  • 用户资料修改的流水记录查询
  • 管理员功能

2.4.2 使用说明

申请字段权限 --> 管理员通过 --> 使用自助工具

  1. 申请字段权限. 申请后, 请联系neokou/daviadai/hansonliang通过申请. 请一次性申请完你所需要的所有权限, 在已有权限的前提下二次申请, 会将之前已有的权限覆盖. 可以在查看审批进度的页面关注自己的审批流程

在这里插入图片描述

  1. 自助工具的使用. 自助工具分为普通的单uin查询和导入号码包查询两个功能. 单uin的查询是同步的, 而导入号码包的查询是异步的. 使用导入号码包创建任务后, 可以在查看任务清单页面关心任务的进度, 并且可在此页面导出查询结果的文件

注: 由于无极平台发包有大小限制, 导入号码包后若出现卡死, 证明此包已被无极丢弃. 后续会采用新的方案来解决此问题(十万个uin以内能正常工作)


2.5 项目的整体架构

数据源调用
普通查询
号码包查询
数据源调用
数据源调用
任务派发
config API调用
OIDB调用
HTTP调用
数据库交互
数据库交互
本地文件交互
数据库交互
前端页面
权限管理
自助工具
管理员方法
资料修改系统
主服务
权限管理+身份认证
微服务间调用
与MySQL, 本地文件交互
异步服务
企微机器人
七彩石配置中心
用户信息平台
AI智能体
用户权限表
权限申请表
临时的uin和查询结果
异步任务表

3. 项目未来的拓展手段

代码的整体框架:

├── ao(业务逻辑代码)
│   ├── log
│   │   └── trading_handler.go
│   ├── robot
│   │   └── robot_handler.go
│   └── user
│       ├── authority_handler.go
│       ├── table_handler.go
│       └── tool_handler.go
├── async_task(异步服务)
│   ├── ao
│   │   └── rece_handler.go
│   ├── async_servers
│   │   └── servers.go
│   ├── async_task
│   ├── dao
│   │   └── mysql_dao.go
│   ├── main.go
│   ├── repo
│   │   └── processing.go
│   └── trpc_go.yaml
├── config(七彩石配置)
│   └── ── rainbow.go
├── copy(protobuf反射代码)
│   └── copy.go
├── dao(与MySQL和本地文件交互)
│   ├── file
│   │   └── file_dao.go
│   └── mysql
│       └── mysql_dao.go
├── entity(全局变量和实体)
│   └── comm.go
├── go.mod
├── go.sum
├── main.go
├── parse(字符串解析)
│   └── parse.go
├── repo(数据处理方法)
│   ├── log
│   │   └── processing.go
│   ├── robot
│   │   └── processing.go
│   └── user
│       ├── oidb.go
│       └── processing.go
├── servers(不同的路径路由)
│   └── servers_select.go
└── trpc_go.yaml

3.1 数据库的拓展

数据库方法接口
Init()
Querry()
Exec()
CheckTrueOne()
用户权限表
姓名
权限字段
到期时间
...
权限申请表
姓名
申请时间
申请的字段
...
其他表
...

新增数据调用只需在原有的对象基础上, 增加一个你需要的对象. 并且实现接口方法即可


3.2 功能的拓展

现在的项目将日志查询, 用户资料查询, 机器人服务等模块做了解耦合

thttp.HandleFunc("/wxcb", servers.ServHTTPRobot)
thttp.HandleFunc("/wxcb1", servers.ServHTTPSelfTool)
thttp.HandleFunc("/wxcb2", servers.ServHTTPAuthorityManagement)
thttp.HandleFunc("/wxcb3", servers.ServHTTPFrontTable)
thttp.HandleFunc("/wxcb4", servers.ServHTTPQueryJournal)

拓展时只需为新的服务开辟一个路径, 并且在ao(Application Object), repo(Repository)文件中完成它的具体实现即可


3.3 权限管控的拓展

目前在数据库9.146.56.25中, userInfo用于保存所有人的权限. privilege为1代表是普通用户,只有读权限. privilege为3或者4代表管理员. privilege为4代表有查询流水记录的权限. 管理员的field字段都为1,代表有所有字段的查询权限

在这里插入图片描述

后续新增功能的权限管控可以沿用这种形式, 或者对这种方式做改造(代码只需要微调) pri为1代表只有查询用户数据的权限, pri为4代表是管理员, 可以使用所有权限. 目前资料修改的流水查询, 默认只有管理员才能使用, 若后续想要对普通用户开放, 可以自行设置字段, 并且在LOG代码中未改判断条件即可


4. 项目目前还没解决的问题

4.1 查询UDC字段时无中文释义

在这里插入图片描述

UDC字段的中文释义在数据库11.168.177.71中, 由于一些编码问题, select出来是乱码, 目前直接去数据库select中文释义的方案可能行不通. 解决方法: 将数据库的中文释义dump到本地文件中, 然后去本地文件获取中文释义


4.2 无极平台的发包限制

在这里插入图片描述

在使用导入号码包查询信息时, 如果号码包太大, 无极平台会自动拦截你的包, 导致数据传不到我的后端. 解决方法: 使用cos存储服务, 将数据先发到cos上(无极到cos无限制), 然后后端再去cos服务上把数据拉下来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/771453.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Security基本源码解析(超精细版)

一、基本源码解析 1.1 UsernamePasswordAuthenticationFilter 用户名称和密码的过滤器 浏览器发送用户名称和密码 ----》 经过过滤器「UsernamePasswordAuthenticationFitler」 1.2 UsernamePasswordAuthenticationFilter核心方法 重写父类「AbstractAuthenticationProcessing…

数据在内存中的存储方式

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C语言 目录 前言 一、整数的存储 二、大小端字节序及其判断 1.什么是大小端 2.为什么有大小端 3.用c语言编写程序判断大小端 三、浮点数的存储 1.浮点数…

第7章:Electron文件系统操作(2)

7.2 文件对话框 Electron 提供了 dialog 模块用于显示文件打开和保存对话框。 7.2.1 显示文件打开对话框 主进程代码: const { app, BrowserWindow, ipcMain, dialog } require(electron); const path require(path);let mainWindow;const createMainWindow …

【Unity学习笔记】A*寻路算法

文章目录 图寻路算法BFS广度优先算法DFS深度优先贪心算法 引入权重Dijkstra算法 A*算法C#实现步骤 Unity中的A*算法A*优化建议 图 图的知识盘点 pathfinding 作为一名计算机专业的学生,对于图这种数据结构也是烂熟于心了。图是一种包含了多个结点的数据结构&…

巴图自动化Modbus协议转Profinet协议网关模块连智能仪表与PLC通讯

一、现场要求:PLC作为控制器,仪表设备作为执行设备。执行设备可以实时响应PLC传送的指令,并将数据反馈给PLC,从而实现PLC对仪表设备的控制和监控,实现对生产过程的精确控制。 二、解决方案:通过巴图自动化Modbus协议转Profinet协议…

大模型面试题目

1.为什么需要做位置编码 位置编码(Positional Encoding)在变换器(Transformer)模型中非常重要,因为变换器架构本身没有内置的顺序信息。变换器使用的是自注意力机制,它能够捕捉输入序列中所有词之间的相关性…

Vscode 保存代码,代码自动格式化

我这里使用的插件是Prettier-Code formatter:自动缩进整理代码的格式,使用方法如下: 先在vscode商店找到插件并安装:安装插件之后,随便找到一个项目文件,右键选择格式化文档:选中我们安装的插件…

LVS-负载均衡

目录 一、概念 二、LVS工作原理 1. ipvs/ipvsadm 2.名词: 三、常用命令 四、工作模式 1.NAT地址转换模式 (1)工作流程 (2)特点 (3)实验过程 a.环境准备: b.修改测试机的…

Wing FTP Server

文章目录 1.Wing FTP Server简介1.1主要特点1.2使用教程 2.高级用法2.1Lua脚本,案例1 1.Wing FTP Server简介 Wing FTP Server,是一个专业的跨平台FTP服务器端,它拥有不错的速度、可靠性和一个友好的配置界面。它除了能提供FTP的基本服务功能以外&#…

android应用的持续构建CI(一)-- 总体设计

一、背景 接下里我希望通过一系列的文章,把android应用的构建梳理一遍,从总体设计到逐个环节的实现。 总体设计jenkins集成手动签名依赖环境应用管理 二、构建流程图 三、技术组件 jenkinsjdkgradle360加固 既然是android应用的持续构建&#xff0c…

科普文:Linux服务器性能调优之CPU调度策略和可调参数

概叙 进程 进程是操作系统虚拟出来的概念,用来组织计算机中的任务。计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用…

5百多本分章节古籍内容大全ACCESS\EXCEL数据库

很多明清小说现在越来越不容易查看其内容,虽然之前搞到过一份《3万8千多古代文学大全ACCESS数据库》,但简体中文总让我感觉有删减、非原版的印象,今天正好遇到一个好的古籍网站,繁体字繁体文,感觉非常不错,…

微信小程序遮罩层显示

效果展示&#xff1a; wxml页面&#xff1a; <view classmodal-mask wx:if{{showModal}}><view class"modal-container"><view classmodal-content></view><view classmodal-footer bindtap"closeImage">//这个/images/ind…

电脑录音怎么录?简单四个方法轻松搞定!

在电脑上录制音频是一项非常实用的技能&#xff0c;适合多种场合的需求。例如&#xff0c;你可能需要录制自己的声音&#xff0c;用于录音广播、演示或视频制作&#xff1b;也可能需要录制电脑中的声音&#xff0c;如音乐、游戏音效或在线直播&#xff1b;或者需要捕捉浏览器中…

快排的实现

引言 作为c语言库函数的一种&#xff0c;快排在排序中的地位毋庸置疑. 而更加具体的实现如图&#xff1a; 快排的实现&#xff08;递归实现&#xff09; 原理 单趟:先假定第一个数设为key,如果左边指针的值比key大&#xff0c;且右边指针的值比key小&#xff0c;则将其交换.…

亚马逊云服务器的价格真的那么贵吗?一年要花多少钱?

亚马逊Web服务&#xff08;AWS&#xff09;作为全球领先的云计算平台&#xff0c;其定价策略常常引起用户的关注。很多人可能会问&#xff1a;"AWS真的那么贵吗&#xff1f;"实际上&#xff0c;这个问题的答案并不是简单的"是"或"否"&#xff0c…

JavaScript技术的小饰品销售管理系统-计算机毕业设计源码21597

摘 要 在当今的数字化时代&#xff0c;电子商务已经成为了商业领域中不可或缺的一部分。随着消费者对于购物体验的要求越来越高&#xff0c;一个高效、便捷、用户友好的小饰品销售管理系统显得尤为重要。 本系统旨在利用 JavaScript 技术&#xff0c;设计并实现一个功能强大的小…

黑马点评DAY5|商户查询缓存

商户查询缓存 缓存的定义 缓存就是数据交换的缓冲区&#xff08;Cache&#xff09;&#xff0c;是存储数据的临时地方&#xff0c;一般读写性能较高。 比如计算机的CPU计算速度非常快&#xff0c;但是需要先从内存中读取数据再放入CPU的寄存器中进行运算&#xff0c;这样会限…

ForkJoin框架与工作窃取算法详解

文章目录 一、ForkJoin框架概述1_核心概念2_主要类和方法1_ForkJoinPool2_ForkJoinTask 二、启用异步模式与否的区别三、ForkJoinPool的三种任务提交方式四、执行逻辑及使用示例1_示例&#xff1a;并行计算数组元素和2_forkJoinPool.submit3_ForkJoinTask<?>中任务的执行…

软件研发标准化流程文件

为了规范化系统开发流程&#xff0c;我们精心制定了一套详尽的规范文档。该文档旨在通过标准化、系统化的方法来显著提升开发效率与项目质量。流程始于明确需求阶段&#xff0c;通过深入细致的设计规划来确保解决方案既可行又具有前瞻性。随后&#xff0c;我们进入高效的编码实…