# smart_device_plaform **Repository Path**: june-woo/smart_device_plaform ## Basic Information - **Project Name**: smart_device_plaform - **Description**: 智能设备平台希望没有BUG!!! - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-03-14 - **Last Updated**: 2022-03-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 智障设备平台 ## 一、项目架构 > 基于maven,SSM框架的单体web应用 ## 二、相关模块 ### 2.1用户功能 #### 2.1.1注册功能(添加用户) 1. 记录用户的数据,账号(唯一)、密码(非明文 MD5和加盐处理)、注册时间、登录时间、最后一个登录时间、登录ip、上次登录ip、 用户状态(默认正常,包含正常和封禁两种状态) 2. 用户手机号(非空)、邮箱(非空)、更新时间、性别(非空)、等。。。 3. 反范式允许部分冗余数据 #### 2.1.2登录功能 1. 根据传入的账户查找,如果没有就直接抛出账户不存在,查找到账户信息的话,就根据存在数据库的盐生成密码并于数据库的密码比较 2. 如果二者一致则登录成功 3. 如果不一致说明密码错误,登录失败 4. 把登录的账户信息,加入到session > 把登录失败或者登录成功的信息。加入到数据库中的sys_logininfor表中保存起来。 > 把登录成功的数据加入到数据库中的sys_user_online表中。 - 后续添加了封号的功能,所有登录时要验证账户的状态,如果账户的status是0就是处于封号状态禁止其登录 #### 2.1.3更新用户信息和封号 1. 列太多了,不想写,那就来个//TODO吧 2. 只有管理员才可以进行封号操作,封号就是把status设置为0,并且登录时的验证要判断status的值 ### 2.2分类功能 > 每个设备都有分类便于管理和命令操作。控制命令可以保存到数据库的分类表里面。 #### 2.2.1添加分类 1. 添加分类,用户处于登录状态,添加之后发布事件更新缓存 2. 根据id查询分类,需要走缓存数据 3. 查询所有分类,加分页和根据条件查询 #### 2.2.2更新分类 > 动态SQL的if里日期时间数组不能''空字符串判断 > 判空操作需要重写,除Cid之外只要有一个不为空即可 #### 2.2.3删除分类 1. 不是真正的删除数据而是逻辑上的删除,将status改为0即代表删除了数据 2. 删除之后查询分类(缓存中)也要根据status相应改变规则 #### 2.2.4查询分类 查询分类程序启动时查询到缓存中 ### 2.3场景功能 #### 2.3.1添加场景 1. service判空和登录验证 2. 规定一个用户不能有重名的场景名称 3. 在添加场景之前,要根据用户和场景名称查询,如果结果为null或者status为0(被删除)则添加进去或者将status改为1(生效) #### 2.3.2查询场景 1. 只能查看登录用户查看本人的场景 2. 缓存问题,用户大的时候缓存的场景数据太多了,可以将其放在短期的缓存 ,增量缓存中 #### 2.3.3更新场景 1. 场景需要更新的就是场景的名字罢了。。。罢了罢了。。。别的没有什么可以更改的东西 2. 要登陆状态,并且只能更改自己创建的场景 #### 2.3.4删除场景 - 登录状态 - 要删除的场景存在 - 是该用户创建的场景 - 逻辑删除,将status更改为0即可,查询缓存时要判断`status`的值 ### 2.4设备功能 #### 2.4.1添加设备 1. id、名字、分类的id、绑定的用户id、场景id、绑定时间 2. 场景id:没场景默认-1,所有用户都可以设置这个场景,有场景要判断这个场景是不是该用户的 3. 分类id:要判断是否有该分类 #### 2.4.2查看设备 // TODO #### 2.4.3连接设备 使用`websocket`设备和服务器之间,保持通讯,来保证服务器可以给设备发送命令 1. 设备连接成功之后,更新设备的在线状态、连接时间、当前ip、地区 2. 设备断开连接之后,更新设备在线状态、断开时间 3. 心跳检查: 设备断电或其他不正常关闭数据库信息依然可以更改状态,就是类似于轮询,发送简单的数据包给服务器; - ①服务端记录下收到消息的时间 - ②当前时间与记录的时间比较,超过一定的时间判定设备离线 - ③设置定时任务每过多长时间执行②(发布事件) ### 2.5页面 #### 2.5.1 菜单 1. 左侧总菜单的展示 2. 分类菜单数据的展示 3. 设备菜单的展示 #### 命令控制 #### 开关、颜色传感器控制 1. 客户端发送http请求包含了设备id和command命令 2. 根据deviceId和command数据库查询到控制设备的命令 3. 经过websocket将命令数据传输到设备,然后设备端收到数据进行设置好的命令操作 #### 温湿度传感器 1. 温湿度传感器传过来的数据写入到数据库中保存下来 2. 某个时间段内的平均温度高于或低于我们设定的阈值,进行相应的操作[要使用到Multimap,键是设备id,值是一组时间内的温度数据是一个List集合] 3. 读取温湿度,展示给页面 ### 操作日志 1. 使用AOP在请求到达之前之后或者抛出异常之后进行数据处理,然后插入到数据库 2. 模块标题和业务类型要通过 `自定义注解` 将数据传递 3. joinPoint可以获取`method`和`oper_param`,`title` `business_type`可以通过自定义的注解传递过来,其他参数通过request对象获取 4. Advice拦截的是Controller,但是Advice是Spring创建的,spring创建时Controller还没有创建.所以Advice我们要交给SpringMVC创建 ### 权限 //TODO - 粗粒度过滤(扩展性很差):将每个用户能访问,和不能访问的地址记录下来 - 分组:将权限分组引出角色 - 用户-->角色、角色-->权限 - 基于角色的权限控制系统 `RBAC` -->权限框架`security` `shiro`
## 三、现存问题 1. 接口的动态控制,用户传一些我们系统生成的数据如登录时间,最后一次登录时间等数据,我们没有将其过滤 2. 动态的停用接口 e.g.某个接口存在问题我们需要停用该接口,目前是没有办法将其动态的停用的.


















## 四、致己 路漫漫其修远兮,吾将上下而求索。不积小流无以成江河,不积硅步无以至千里
路虽孤独却不黑暗,望日后所见佳人可表其心,无所忧惧。
远而望之,皎若太阳升朝霞;迫而察之,灼若芙蕖出渌波。
秾纤得衷,修短合度。肩若削成,腰如约素。延颈秀项,皓质呈露。
芳泽无加,铅华弗御。云髻峨峨,修眉联娟。丹唇外朗,皓齿内鲜。
明眸善睐,靥辅承权。瑰姿艳逸,仪静体闲。柔情绰态,媚于语言。
翩若惊鸿,婉若游龙。荣曜秋菊,华茂春松。
髣髴兮若轻云之蔽月,飘飖兮若流风之回雪。
待仲夏、待晚风、待伊人