文件按照格式设置大分类:视频、音乐、图片、文档、其他。

小分类分为:视频、音频、PDF、Word、Excel、文本、代码、压缩文件、其他。

找到com.swx.easypan.controller包下的 FileInfoController,修改代码如下:

@RestController
@RequestMapping("/file")
@ResponseResult
@LoginValidator
@Validated
public class FileInfoController {

}

获取文件列表

接口信息

路径地址 http://localhost:7090/api/file/loadDataList
请求方式 GET
请求参数 FileInfoQuery、category
返回结果 Page

实体类

查询参数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";

/**
* 用户ID
*/
private String userId;

/**
* 文件MD5值
*/
private String fileMd5;

/**
* 文件父ID
*/
private String filePid;

/**
* 文件名
*/
private String filename;

/**
* 文件分类 1:视频 2:音频 3:图片 4:文档 5:其他
*/
private Integer fileCategory;

/**
* 0:正常 1:回收站 2:删除
*/
private Integer deleted;

}

视图实体类

在包com.swx.easypan.entity.vo,创建 FileInfoVO 实体类,将下面代码放入:

FileInfoVO
@Data
public class FileInfoVO {
/**
* 文件ID
*/
private String id;

/**
* 文件父ID
*/
private String filePid;

/**
* 文件大小
*/
private Long fileSize;

/**
* 文件名
*/
private String filename;

/**
* 文件封面
*/
private String fileCover;


/**
* 0文件 1目录
*/
private Integer folderType;

/**
* 文件分类 1:视频 2:音频 3:图片 4:文档 5:其他
*/
private Integer fileCategory;

/**
* 文件分类 1:视频 2:音频 3:图片 4:pdf 5:doc 6:excel 7:txt 9:压缩包 10:其他
*/
private Integer fileType;

/**
* 0:转码中 1:转码失败 2:转码成功
*/
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,添加查询文件的方法

FileInfoMapper
public 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 接口,在其中添加:

FileInfoService
public 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;
}

// 根据category,加载所有数据
@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,添加查询用户文件大小的方法

FileInfoMapper
Long 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
/**
* 查询用户使用的空间
*
* @param userId 用户ID
*/
Long getUseSpace(String userId);

在 UserInfoServiceImpl 中实现该方法

FileInfoServiceImpl
/**
* 查询用户使用的空间
*
* @param userId 用户ID
*/
@Override
public Long getUseSpace(String userId) {
return baseMapper.selectUseSpace(userId);
}