文件按照格式设置大分类:视频、音乐、图片、文档、其他。
小分类分为:视频、音频、PDF、Word、Excel、文本、代码、压缩文件、其他。
找到com.swx.easypan.controller
包下的 FileInfoController,修改代码如下:
@RestController @RequestMapping("/file") @ResponseResult @LoginValidator @Validated public class FileInfoController {
}
|
获取文件列表
接口信息
实体类
查询参数DTO
在包com.swx.easypan.entity.query
,创建 FileInfoQuery 实体类,将下面代码放入:
FileInfoQuery
@Data public class FileInfoQuery {
private Integer page = 1; private Integer limit = 20; private String orderBy = "folder_type DESC, update_time DESC";
private String userId;
private String fileMd5;
private String filePid;
private String filename;
private Integer fileCategory;
private Integer deleted;
}
|
视图实体类
在包com.swx.easypan.entity.vo
,创建 FileInfoVO 实体类,将下面代码放入:
FileInfoVO@Data public class FileInfoVO {
private String id;
private String filePid;
private Long fileSize;
private String filename;
private String fileCover;
private Integer folderType;
private Integer fileCategory;
private Integer fileType;
private Integer status;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime recoveryTime; }
|
定义Mapper
找到 FileInfoMapper,添加查询文件的方法
FileInfoMapperpublic interface FileInfoMapper extends BaseMapper<FileInfo> { IPage<FileInfo> selectPageInfo(Page<FileInfo> pageParam, @Param("query") FileInfoQuery query); }
|
找到 FileInfoMapper.xml,实现查询文件的方法,该方法复杂查询
FileInfoMapper.xml<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.swx.easypan.mapper.FileInfoMapper"> <select id="selectPageInfo" parameterType="com.swx.easypan.entity.query.FileInfoQuery" resultType="com.swx.easypan.pojo.FileInfo"> SELECT * FROM file_info fi <where> <if test="query.userId != null"> and fi.user_id = #{query.userId} </if> <if test="query.fileMd5 != null and query.fileMd5 != ''"> and fi.file_md5 = #{query.fileMd5} </if> <if test="query.filePid != null and query.filePid != ''"> and fi.file_pid = #{query.filePid} </if> <if test="query.filename != null and query.filename != ''"> and fi.filename like CONCAT('%', #{query.filename}, '%') </if> <if test="query.fileCategory != null"> and fi.file_category = #{query.fileCategory} </if> <if test="query.deleted != null"> and fi.deleted = #{query.deleted} </if> </where> <if test="query.orderBy != null and query.orderBy!= ''"> ORDER BY ${query.orderBy} </if> </select> </mapper>
|
定义Service
找到 FileInfoService 接口,在其中添加:
FileInfoServicepublic interface FileInfoService extends IService<FileInfo> { IPage<FileInfoVO> pageInfo(Page<FileInfo> pageParam, FileInfoQuery query); }
|
在 UserInfoServiceImpl 中实现该方法
FileInfoServiceImpl@Slf4j @Service public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> implements FileInfoService { @Override public IPage<FileInfoVO> pageInfo(Page<FileInfo> pageParam, FileInfoQuery query) { IPage<FileInfo> iPage = baseMapper.selectPageInfo(pageParam, query); List<FileInfo> records = iPage.getRecords(); List<FileInfoVO> fileInfoVOS = records.stream().map(item -> { FileInfoVO fileInfoVO = new FileInfoVO(); BeanUtils.copyProperties(item, fileInfoVO); return fileInfoVO; }).collect(Collectors.toList()); IPage<FileInfoVO> page = new Page<FileInfoVO>(pageParam.getCurrent(), pageParam.getSize(), iPage.getTotal()); page.setRecords(fileInfoVOS); return page; } }
|
定义Controller
在 FileInfoController 下定义查询方法,根据类别进行多条件的分页查询。
FileInfoController@RestController @RequestMapping("/file") @ResponseResult @LoginValidator @Validated public class FileInfoController {
private final FileInfoService fileInfoService;
public FileInfoController(FileInfoService fileInfoService) { this.fileInfoService = fileInfoService; }
@GetMapping("/loadDataList") public IPage<FileInfoVO> loadDataList(HttpSession session, FileInfoQuery query, String category) { FileCategoryEnums categoryEnums = FileCategoryEnums.getByCode(category); if (null != categoryEnums) { query.setFileCategory(categoryEnums.getCategory()); } Page<FileInfo> pageParam = new Page<>(query.getPage(), query.getLimit()); query.setUserId(((SessionWebUserVO) session.getAttribute(Constants.SESSION_KEY)).getId()); query.setDeleted(FileDelFlagEnums.USING.getFlag()); return fileInfoService.pageInfo(pageParam, query); } }
|
用户文件大小
根据用户的ID查询该用户所有文件,累加所有文件大小。
定义Mapper
找到 FileInfoMapper,添加查询用户文件大小的方法
FileInfoMapperLong selectUseSpace(@Param("userId") String userId);
|
找到 FileInfoMapper.xml,实现查询用户文件大小的方法。
FileInfoMapper.xml<select id="selectUseSpace" resultType="long"> SELECT IFNULL(SUM(file_size), 0) FROM file_info WHERE user_id = #{userId} </select>
|
定义Service
找到 FileInfoService 接口,在其中添加:
FileInfoService
Long getUseSpace(String userId);
|
在 UserInfoServiceImpl 中实现该方法
FileInfoServiceImpl
@Override public Long getUseSpace(String userId) { return baseMapper.selectUseSpace(userId); }
|