Javaweb实现云端回收站功能
最近接手JavaWeb回收站功能,业务场景:在云端为用户删除模型操作提供一个回收站功能,主要业务。模型删除、模型找回。下面只梳理业务逻辑
关系表
主要业务牵扯表有这几张:bim_space_manager(用户空间)、bim_model_tree_trash(回收站)和bim_model_tree(模型)
- bim_space_manager 可以理解为百度网盘的用户空间。
- bim_model_tree 云端存放模型的主要表
- bim_model_tree_trash 删除记录
字段详述
表字段说明:bim_model_tree_trash
- enable_:0 回收站记录弃用(同时表示模型记录启用,很绕…主要为了回收站的找回逻辑) 1 回收站启用(同时表示模型记录被逻辑删除) 2 对应模型记录被永久删除
- user_id:模型所有者的id
- tree_id:被删除的模型id 与bim_model_tree 中的id 一对一关系
- left_days:回收站中初始保留7天,后台每天自动检测该字段,并更新生于天数,出现负数时,即表示该模型已经被物理删除,不会再显示在回收站中
- model_size:该节点文件的大小 单位KB
表字段说明:bim_space_manager
- enable_: 在新建用户为其初始化默认空间,默认为1,用户注销时为0
- user_id:用户id,与用户表中的用户一一对应
- space_total:用户初始化可用空间大小 2048 单位MB 计算方式:space_size*1024
- space_used:已经使用的size 单位MB
- space_size: 用户空间等级,初始化为2 (在user_space_size.properties文件中的space_size_tool配置)
- user_type: 用户空间使用类型 默认tool 工具级
主要业务梳理
回收站记录与模型节点记录一一对应,通过tree_id关联
1.删除文件
用户删除文件时,先将bim_model_tree中记录enable设为0,再在bim_model_tree_trash
中创建记录,创建之前会查重是否已经有该记录,有的话,将trash中enable变为1,否则新建trash记录
2.找回文件:
用户从回收站中找回节点,先删除trash表中对应记录,然后判断该节点是文件还是文件夹。如果是文件的话,先查询用户空间表的剩余空间是否够用,够用的话直接重新启用model_tree中对应记录,
同时启用该节点所有的父祖节点,同时更新用户空间表。如果是文件夹的话,先查出其下所有子节点,然后排除其中所有之前删除过所有节点。先将其全部恢复,然后查询用户空间是否超过额定大小,超出的话回滚所有操作,并提示剩余空间不足。
3.彻底删除文件:
即删除trash中的记录,说是物理删除也并非真的物理删除。而是通过修改status字段为2 进行彻底删除。文件进入回收站后,定时7天,期间用户可找回,也可彻底删除。
超期则不会再显示trash记录。同时后台有定时任务,每天扫描一次trash表,定时修改left_day ,当剩余天数不大于0时,也不会再显示trash记录,算是彻底删除文件
Javaweb实现云端回收站功能
http://example.com/2018/04/02/2018-04-02-Javaweb云端回收站功能总结/