问题定义
个人资源管理平台
需求分析
需要一个软件平台来管理自己日益复杂和丰富的资源。包括但不限于个人文档、积累的电子书、下载的音乐、下载的视频教程,一些常用的功能。日记、笔记等。一些相关的人工智能的资源整合。如车标识别、orc等常用的接口。未来可能要接入物联网的相关设备、由于腾讯云的服务器的存储资源有限,未来需要将自己本地的文件外挂到该平台,即可以减小服务器的开销,还可以保护文档的私密性。服务器只做数据中转,而不是数据存储。服务器算力也有限,需要将算力分到本地外挂的设备。
一、文件管理需求
- 该平台需要能够存储文件,解决U盘的不便携性。一些小的文档可以上传至该平台。当需要的时候可以上传和下载。大文件管理,由于设备原因,不可能将所有的文件上传到远端的服务器。所以需要一个功能,能够在该平台管理自己的本地的文件。包括,添加、删除、读取等常用功能。
- 该平台的界面应该是非常友好的
二、图片管理需求
宅男喜欢二次元、现在积累了几个G的图片文件。但是很杂,该平台提供相册、分类的功能
- 相册功能 将图片分类到相册中
- 添加、删除、修改相册。
- 查看图片和编辑分开。
三、音乐管理需求
音乐很多,想要有自己的音乐播放器,类似于网易云音乐那种。
- 曲库 全部的音乐,可以搜索。一首歌可以放入很多的歌单中。
- 歌单 将音乐分类,在管理界面可以添加、编辑、删除歌单
- 上传音乐 上传的音乐会出现在曲库中,上传音乐的时候会添加相应的歌曲数据。
四、视频管理需求
视频很多、非常多。需要有效的管理
1、能够看视频(宽带问题,无法流畅的看视频)
2、用户能够根据名字搜索视频
3、用户能够创建自己的栏目,并且往里面添加视频(类似于blibli的收藏夹功能)
4、用户能够删除视频
五、日记和笔记的需求
笔记有很多成熟的产品,但是数据不可控。自己不想把数据放在他们的服务器上。所以需要一个支持多端编写的文档的功能。数据放在自己的数据库中。支持富文本和markdown格式的语法。
- 文档的导入和导出 可以将数据库的中笔记文档导出pdf格式,保存备份在磁盘中。
- 定期生成备份文件,后期可以调用多个网盘的api多端备份。
六、常用工具的需求
学习工作中有很多工具的需求,图片转文字、开发中json格式化、还有很多的开发手册。这些都是用得到的,并且自己已经实现了车标的识别并且建立了模型。可以将该功能整合
到平台中
1、二维码工具。能够根据字符串生成二维码,也能识别二维码为字符串。
2、车标识别工具。能够根据上传的图片识别相应的车标。
3、
七、物联网设备管理需求
未来自己会将家里的物联网的设备挂在该平台中,并且能够在该平台进行管理。空调、冰箱、台灯、电视机。自己梦想中的家。需要一个同一的管理平台,而不是各自为政。
添加设备,每个设备都有自己的id码,并且有相应的命令。
八、计划跟踪平台
用来记录自己的计划和执行情况,主要借鉴TODO List的功能
添加计划,一个计划会有开始时间、截止时间、完成时间(用户完成),具体内容,轻重缓急。
编辑、删除计划,只有未开始的计划才能编辑和删除
生成报表,可以按周、按月生成报表。记录计划的预计完成时间和实际完成时间,计算完成工作计划的轻重缓急的比例。
概要设计
详细设计
数据库设计
笔记管理
笔记本:t_notebook
字段 | 属性 | 说明 |
---|---|---|
id | bigint | 主键 |
notebook_name | varchar | 笔记本名 |
notebook_description | varchar | 笔记本描述 |
create_id | bigint | 创建者id |
created_time | timestamp | 创建时间戳 |
modify_time | timestamp | 修改时间戳 |
del | tinyint | 删除标记 |
笔记条目:t_notebook_item
字段 | 属性 | 说明 |
---|---|---|
id | bigint | 主键 |
notebook_id | bigint | 主键 |
notebook_item_title | varchar | 笔记条目标题 |
notebook_item_content | text | 笔记条目内容 |
create_time | timestamp | 创建时间 |
modify_time | timestamp | 修改时间 |
del | tinyint | 删除标记 |
平台原型
后端实现进度
鉴权模块
Request URL: 127.0.0.1:8080/Api/User/Login
Request Method:post
Request Body:
1 | { |
Response Body:
1 | { |
- 用户登出接口
Request URL: 127.0.0.1:8080/Api/User/Logout
Request Method: post
Request Body: null
Response Body:
1 | { |
- 获得用户信息
Request URL: 127.0.0.1:8080/Api/User/UserInfo?token=usertoken-token
Request Method: get
Response Body:
1 | { |
图片模块
- 创建相册
- 更新相册
- 添加图片至相册
- 删除某个相册下的图片
- 删除相册
音乐模块
- 获得曲库列表
- 获得歌单列表
- 获得歌单对应的曲目
- 添加新的歌曲
- 修改歌曲
- 删除歌曲
- 添加新的歌单
- 更新歌单
- 删除歌单
在线笔记模块
- 获得笔记列表
- 获得特定笔记的内容
- 添加新的笔记本
- 为某个笔记本添加新的条目
- 更新笔记本
- 更新笔记本特定条目
- 删除笔记本
- 删除笔记本特定条目
- 前端支持Markdown语法渲染
小说模块-转码
- 添加新的解析模块
- 变更解析模块
- 删除解析模块
TODO模块
人工智能接口
- 车标识别接口
- 车标检测接口
- 文字识别接口[待训练模型]
- 人脸检测接口[待训练模型]
物联网设备
- 查询所有设备状态
- 添加新的设备
- 删除设备
- 控制特定的设备
前端流程设计
登录流程设计
sequenceDiagram participant user as 用户 participant front as 前端 participant backend as 后端 user->>front: 填写账号和密码 front->>front: 校验账号密码 front->>backend: 登录请求 backend->>backend: 处理登录请求 backend-->>front: 返回token front->>front: 保存token front->>front: 进入首页 front->>backend: 根据token获得用户数据 backend-->>front: 返回用户数据,包括用户名,头像,路由等 front->>front: 保存用户数据,处理路由数据动态渲染。 front->>front: 进入系统 front-->>user: 完成登录
请求接口
- Api/User/Login
- Api/User/GetInfo
- Api/User/Logout
物联网相关
测试用例
数据流设计
大数据量数据传输TCP的有序也不能自己分割数据组
数据分割协议:
1 | 数据总长度(4bit) + 数据流 |
使用一个缓冲区先存数据,看是否已经可以拿回数据了。
软件管理工具
QT组件的动态添加和删除
1 | // 重新构建和显示软件列表 |
配置项变更
使用链表将每个软件和节点对应起来,拥有前后指针,方便增删改查
1 | root <--> classNode <--> class2 <----> class3 |
关于样式的设置,有可选项,可以使用极简,也可以使用自定义的配置
自定义更换背景图片,获取文件,读取文件,更换渲染.
软件布局的计算,自己计算还是使用官方的布局器,可以自己确定整个应用的宽高,然后一行最多能够放下多少个组件,然后将剩下的空间计算间距。
使用自定义的组件,有图标,下面有软件名称。
平台相关
多设备组装成物联网,每个设备均有不同的属性功能,如何在抽象层统一管理设备?
如果将设备看作是由多个服务组合而成的结构体,服务之间的调用作为设备间的交互。
APP,PC,PI,CAMERA。设备之间的差异是什么?
服务的差异?一个APP和PC中运行的软件是否可以一致?一个Camera视乎只能提供音视频的服务。
文件相互传输可能就是APP和PC之间的服务调用。
难点:
设备的基础能力定义是什么?每个设备都必须存在的基础服务是什么?注册登录心跳
设备之间如何相互发现?设备与设备之间如何联动?
多设备协同,算力如何分配?能否将流式定义计算任务?将计算任务分配在不同的设备上??
安全性:证书说大不大,说小不小,但是对于只有几百k的内存和存储空间有时候不能不牺牲繁杂的安全校验,这也许就是物联网设备安全问题频出的原因吧。
解决问题的步骤:定位问题,解决方案。目标是解决问题。
关于单核多线程的一些坑
对于单核多线程的物联网设备来说,数据的收发及时性是非常有必要的。但是,为了最求低延迟不能使用死的循环。
收发线程适当的休眠更有利于整个系统的执行速度。如果收发线程都使用循环,并且没有休眠。这时候会出现一种现象,
普通赋值语句,strcpy,memset等语句耗时不定。为了最求极致的及时性,反而会使整个系统的执行效率降低。
一个设备的算力是固定的,不管多少线程,能够享受的算力是固定了。有时候,多线程不一定比单线程跑得快。系统调度也会占用算力。
多设备组网的设定
怎么组网,怎么相互发现??
老隆云平台设计
这几年零零碎碎的学了很多东西,但是都没有完整的串联起来。对于物联网慢慢的了解了,就想要自己建立一个平台。控制属于自己的物联网设备,虽然很多的厂家已经有成熟的产品,但是,国内的企业尿性。到时候不看个广告都开不灯不是不可能。有些东西得掌握在自己得手里。
建立一个可用得平台其实说难不难,说简单不简单。边端云每一侧都有很多的东西需要处理,但是这些处理大部分是为了满足用户的特殊需求。自己一个小小的系统
需要满足自己的需求就可以了,就远程开个灯而已。把数据安全搞好,剩下的慢慢来。
设备SDK设计
一个SDK都有哪些功能?
基础的模块:每个设备都会有的模块
- 认证模块: 注册登录相关数据获取
- 通讯模块: 负责与平台通讯,包括心跳保活,平台数据下放,设备数据上报。
设备服务模块: 不同的设备均由不同的服务组合而成。可选项。
- 视频服务: 提供视频流,满足视频服务的接口定义的便可以。笔记本摄像头,手机摄像头等,这些感知器所在的设备均可以提供视频服务。
- 音频服务: 提供音频流。
- 视频播放服务: 提供视频流播放的功能,笔记本电脑拥有屏幕,手机拥有屏幕,只要能够播放视频流设备具备视频播放服务。手机想要调用树莓派上视频服务获得数据流,然后将视频播放到电脑中。这个可能涉及到多设备组网通讯问题。
- 音频流播放服务: 播放音频数据。
- 文件存储服务: 可提供文件读写,树莓派生成的文件保存到nas设备。
- 人脸识别服务: 树莓派部署了人脸识别服务,想要笔记本电脑摄像头直接调用树莓派的服务。
设备属性值:对于一些设备,没有对外提供服务的能力,只有自身的设备属性。比如开关控制器。除了基础的模块,不提供任何服务。
- 平台设置属性值
- 平台获得属性值
- 设备上报属性值
云端服务设计
最简单的设备用户管理,协助设备间服务调用和组网,处理操作人机交互数据。