项目阶段性整理:第一阶段

请注意:本文编写于 94 天前,最后修改于 68 天前,其中某些信息可能已经过时。

接触这个项目到现在已经快一年的时间了,但是到目前才仅仅写出了一个连骨架都算不上的架子,说实话进度有点慢。

简单的整理一下项目开发到现在的一些关键点和之后的一个开发路线:

1. 关键点整理

1.1 技术栈运用

1.1.1 前端

基础:Vue 2.5.10 + Vue Router 3.0.1 + Vuex 3.0.1
UI:iView 3.2.2
框架:iView-admin 2.5 Vue-cli 3.0 + Webpack 4.0
CSS 预处理器:Less

1.1.2 后端

基础:Python 3.7.2
框架:Django 2.1.7 Django-REST-framework 3.9.2
API规范:RESTful

1.1.3 数据库

1.2 关键功能实现方式

1.2.1 认证问题「前后端分离后登录功能的实现」

后端采用 djangorestframework-jwt 包作为实现 JWT 的基础,在此之上建立 jwt_extend app 重写其中的部分功能实现 token 的生成、刷新与认证。

重写的目的在于给 jwt_extend app 添加一个 middleware 以实现 token 的自动刷新。

1.2.2 token 自动刷新问题「如何实现前端无感刷新 token」

首先我们利用 djangorestframework-jwt 包为 token 分别设定失活和失效两个时间:

失活时间:token 在生成多久后失去活性「不能在作为用来认证的凭证但可以用来作为刷新 token 的启动器」

失效时间:token 在生成多久后失效「既不能作为用来认证的凭证,也不能用来刷新 token」

然后利用上文在 app 中添加 middleware 检测每一次请求中的 token 是否失活「未失效」,得到失活的 token 则利用 djangorestframework-jwt 包提供的刷新函数刷新 token 重新获得一个有活性的 token 并包含在响应报文的 headers 中返回到前端。

最后在前端的响应拦截器中截取特定的 headers,如果截取成功则更新 cookie 中的 token,以达到无感刷新 token 的效果。

1.2.3 车辆数据的获取、清洗与存储问题

车辆端通过 MQTT 协议将车辆参数定时发送给 EMQ(MQTT broker) 后如何获取、清洗并存储数据是开发过程中的一个重点问题。

经验有限,刚开始我想的是通过 EMQ-kafka 插件实时转发车辆端信息到 kafka 再通过 kafka 将数据转存到 MongbDB 数据库中。折腾了好久将 EMQ-kafka 插件调通又卡在了 kafka 转 MongoDB 上,由于开发进程问题就暂时搁置了这一实现手段,转而使用 Python 写了一个 MQTT Client 实时的接收车辆端的 MQTT 主题,在获取到数据后先利用 Python 清洗数据再利用 pymongo 将数据存储到 MongoDB 数据库中。

虽然达到了预期的效果,但是必然不能作为项目上线时的数据处理工具,因此如何实现 kafka 转存 MongoDB 或寻找更好的替代方式依旧是之后项目开发过程中的重点。

2. 项目第二阶段开发规划

本着以最快速度实现系统功能的目的在正式开发「重构」以下功能前:

  1. 忽略权限管理
  2. 忽略异常处理
  3. 忽略CSS命名规范

第二阶段截止到四月底。

2.1 第二阶段预计完成功能

2.1.1 「重要任务」完成任务系统

  1. 任务系统用户逻辑确认
  2. 任务系统界面雏形确认
  3. 设计开发任务系统所需后端接口
  4. 前后端联调完成任务系统

2.1.2 「紧急任务」完成监控系统-状态回顾

  1. 状态回顾用户逻辑确认「完成待审核」
  2. 状态回顾界面雏形确认「完成待审核」
  3. 设计开发状态回顾所需后端接口
  4. 前后端联调完成状态回顾

2.1.3 「常规」完成邮件预警并调通短信预警接口

  1. 预警系统用户逻辑确认
  2. 设计开发预警系统所需后端接口
  3. 前后端联调完成预警系统

2.1.3 「常规」修缮监控系统

  1. 调整当前状态页面数据展示方式与历史轨迹页面相同并将实施轨迹绘制出来
  2. 配合任务系统实时标注非预期数据
  3. 配合预警系统实时邮件预警非预期行为