我的文件业务逻辑
一、业务流程
(1)用户输入用户名密码,登录到home界面
(2)home页面默认在业务窗口展示“我的文件”跳转到fileinfo.jsp页面
(3)点击“我的文件”按钮——》通过viewController设置跳转到fileinfo.jsp页面
(4)fileinfo.jsp发送ajax请求给user/myfileinfo请求获取当前用户文件列表
(5)后端通过session获取当前用户id
(4)后端根据用户id查询user表,找到用户的根目录
(5)查询file表(文件)和folder表(文件夹)(两次查询),找到parent为用户根目录的所有文件及文件夹
(6)合并两次查询的结果,并进行分页
注意后面的模糊查询是or关系,所以需要加括号
select name,uploadTime,type,size from file where path='文件的上一级路径' and (name like concat("%","","%") or type like concat("%","","%"))
(6)将查询到的结果返回给fileinfo.jsp展示在前端页面
@Override
public Map getMyfile(String root_dir, String keyword, Integer pageNum, Integer pageSize) {
Map result=new HashMap();
//查找根目录下的所有文件以及文件夹
List<FileInfo> totalList1= new ArrayList<>();
long total1=0;
PageHelper.startPage(pageNum,pageSize);
//2、执行查询
//查询文件夹
List<FileInfo> fileInfos=filefolderDao.selectFilefolderByKeyword(root_dir,keyword);
if(fileInfos!=null&&!fileInfos.isEmpty()){
PageInfo<FileInfo> folderPageInfo=new PageInfo<>(fileInfos);
totalList1.addAll(fileInfos);
total1=folderPageInfo.getTotal();
}
//查询文件
PageHelper.startPage(pageNum,pageSize-fileInfos.size());
List<FileInfo> list =fileInfoDao.selectFileByKeyword(root_dir,keyword);
PageInfo<FileInfo> filePageInfo=new PageInfo<>(list);
totalList1.addAll(list);
//合并
PageInfo<FileInfo> totalPageInfo=new PageInfo<>(totalList1);
//由于分页查询时,pagehelper在每个查询语句后面都加了limit(pagesize,pagenumber)
// 所以每次调用该函数,查到的只有第pageNumber页的所有数据
// 因此我们人为合并的list只有当前页的数据,
// 并且对合并后的list调用new PageInfo<>(当前页数);时,pagenumber默认为0;pagesize默认为当前页数据总数
//我们需要手动设置当前的pagenumber和pagesize
totalPageInfo.setPageNum(pageNum);
totalPageInfo.setPageSize(pageSize);
result.put("pageInfo",totalPageInfo);
result.put("total",total1+filePageInfo.getTotal());
System.out.println(total1+filePageInfo.getTotal());
System.out.println("pagesize:??"+totalPageInfo.getPageSize());
//3、封装到PageInfo对象中
return result;
}