Javaweb实现云端回收站功能

最近接手JavaWeb回收站功能,业务场景:在云端为用户删除模型操作提供一个回收站功能,主要业务。模型删除、模型找回。下面只梳理业务逻辑

关系表

主要业务牵扯表有这几张:bim_space_manager(用户空间)、bim_model_tree_trash(回收站)和bim_model_tree(模型)

  • bim_space_manager 可以理解为百度网盘的用户空间。
  • bim_model_tree 云端存放模型的主要表
  • bim_model_tree_trash 删除记录

image

字段详述

表字段说明: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记录,算是彻底删除文件