feat(file): 添加文件浏览次数统计功能
- 在文件列表表格中新增浏览次数列显示
- 在文件详情描述中添加浏览次数信息展示
- 实现文件浏览次数自增接口 incrementView
- 前端点击文件预览时自动调用浏览次数增加功能
- 后端添加 SysFile 实体类 viewCount 字段
- 实现数据库表字段映射和更新逻辑
- 添加控制器接口 /incrementView/{fileId} 处理请求
This commit is contained in:
@@ -98,6 +98,15 @@ public class SysFileController extends BaseController {
|
|||||||
return toAjax(iSysFileService.deleteWithValidByIds(Arrays.asList(fileIds), true));
|
return toAjax(iSysFileService.deleteWithValidByIds(Arrays.asList(fileIds), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件浏览次数 +1
|
||||||
|
*/
|
||||||
|
@PutMapping("/incrementView/{fileId}")
|
||||||
|
public R<Void> incrementView(@NotNull(message = "主键不能为空") @PathVariable Long fileId) {
|
||||||
|
iSysFileService.incrementViewCount(fileId);
|
||||||
|
return R.ok();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询与我相关的文件(私有文件且当前用户在可见用户列表中)
|
* 查询与我相关的文件(私有文件且当前用户在可见用户列表中)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -60,6 +60,10 @@ public class SysFile extends BaseEntity {
|
|||||||
* 备注
|
* 备注
|
||||||
*/
|
*/
|
||||||
private String remark;
|
private String remark;
|
||||||
|
/**
|
||||||
|
* 浏览次数
|
||||||
|
*/
|
||||||
|
private Long viewCount;
|
||||||
/**
|
/**
|
||||||
* 删除标识 0正常 2删除
|
* 删除标识 0正常 2删除
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -67,5 +67,9 @@ public class SysFileBo extends BaseEntity {
|
|||||||
*/
|
*/
|
||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 浏览次数
|
||||||
|
*/
|
||||||
|
private Long viewCount;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,5 +80,10 @@ public class SysFileVo extends BaseEntity {
|
|||||||
@ExcelProperty(value = "备注")
|
@ExcelProperty(value = "备注")
|
||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 浏览次数
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "浏览次数")
|
||||||
|
private Long viewCount;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,4 +51,9 @@ public interface ISysFileService {
|
|||||||
* 查询与我相关的文件(私有文件且当前用户在可见用户列表中)
|
* 查询与我相关的文件(私有文件且当前用户在可见用户列表中)
|
||||||
*/
|
*/
|
||||||
TableDataInfo<SysFileVo> queryPageListRelatedToMe(SysFileBo bo, PageQuery pageQuery);
|
TableDataInfo<SysFileVo> queryPageListRelatedToMe(SysFileBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件浏览次数 +1
|
||||||
|
*/
|
||||||
|
void incrementViewCount(Long fileId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.klp.common.core.page.TableDataInfo;
|
|||||||
import com.klp.common.core.domain.PageQuery;
|
import com.klp.common.core.domain.PageQuery;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.klp.common.helper.LoginHelper;
|
import com.klp.common.helper.LoginHelper;
|
||||||
import com.klp.common.utils.StringUtils;
|
import com.klp.common.utils.StringUtils;
|
||||||
@@ -124,6 +125,16 @@ public class SysFileServiceImpl implements ISysFileService {
|
|||||||
return TableDataInfo.build(result);
|
return TableDataInfo.build(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件浏览次数 +1
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void incrementViewCount(Long fileId) {
|
||||||
|
baseMapper.update(null, Wrappers.<SysFile>lambdaUpdate()
|
||||||
|
.setSql("view_count = view_count + 1")
|
||||||
|
.eq(SysFile::getFileId, fileId));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存前的数据校验
|
* 保存前的数据校验
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
<result property="fileType" column="file_type"/>
|
<result property="fileType" column="file_type"/>
|
||||||
<result property="scopeType" column="scope_type"/>
|
<result property="scopeType" column="scope_type"/>
|
||||||
<result property="remark" column="remark"/>
|
<result property="remark" column="remark"/>
|
||||||
|
<result property="viewCount" column="view_count"/>
|
||||||
<result property="createBy" column="create_by"/>
|
<result property="createBy" column="create_by"/>
|
||||||
<result property="createTime" column="create_time"/>
|
<result property="createTime" column="create_time"/>
|
||||||
<result property="updateBy" column="update_by"/>
|
<result property="updateBy" column="update_by"/>
|
||||||
|
|||||||
@@ -52,6 +52,14 @@ export function exportFile(query) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 文件浏览次数 +1
|
||||||
|
export function incrementView(fileId) {
|
||||||
|
return request({
|
||||||
|
url: '/system/file/incrementView/' + fileId,
|
||||||
|
method: 'put'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 查询与我相关的文件
|
// 查询与我相关的文件
|
||||||
export function listRelatedToMe(query) {
|
export function listRelatedToMe(query) {
|
||||||
return request({
|
return request({
|
||||||
|
|||||||
@@ -152,6 +152,11 @@
|
|||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column label="浏览次数" align="center" width="90">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ scope.row.viewCount != null ? scope.row.viewCount : 0 }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
</KLPTable>
|
</KLPTable>
|
||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
@@ -274,6 +279,7 @@
|
|||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="文件大小">{{ formatFileSize(infoFile.fileSize) }}</el-descriptions-item>
|
<el-descriptions-item label="文件大小">{{ formatFileSize(infoFile.fileSize) }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="文件后缀">{{ infoFile.suffix || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="文件后缀">{{ infoFile.suffix || '-' }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="浏览次数">{{ infoFile.viewCount != null ? infoFile.viewCount : 0 }} 次</el-descriptions-item>
|
||||||
<el-descriptions-item label="订单编号">{{ infoFile.orderNo || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="订单编号">{{ infoFile.orderNo || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="所属部门">{{ infoFile.dept || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="所属部门">{{ infoFile.dept || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="可见范围">
|
<el-descriptions-item label="可见范围">
|
||||||
@@ -291,7 +297,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { listFile, getFile, addFile, updateFile, delFile, exportFile, listVisibleUser, addVisibleUser, delVisibleUser, listVisibleUserByFileId, listRelatedToMe } from '@/api/system/file'
|
import { listFile, getFile, addFile, updateFile, delFile, exportFile, listVisibleUser, addVisibleUser, delVisibleUser, listVisibleUserByFileId, listRelatedToMe, incrementView } from '@/api/system/file'
|
||||||
import { getToken } from '@/utils/auth'
|
import { getToken } from '@/utils/auth'
|
||||||
import UserSelect from '@/components/KLPService/UserSelect/index'
|
import UserSelect from '@/components/KLPService/UserSelect/index'
|
||||||
import ImagePreview from '@/components/FilePreview/preview/image/index.vue'
|
import ImagePreview from '@/components/FilePreview/preview/image/index.vue'
|
||||||
@@ -698,6 +704,7 @@ export default {
|
|||||||
/** 点击文件名查看预览 */
|
/** 点击文件名查看预览 */
|
||||||
handlePreview(row) {
|
handlePreview(row) {
|
||||||
this.selectedFile = row
|
this.selectedFile = row
|
||||||
|
incrementView(row.fileId)
|
||||||
},
|
},
|
||||||
/** 点击查看按钮弹出详情 */
|
/** 点击查看按钮弹出详情 */
|
||||||
handleShowInfo(row) {
|
handleShowInfo(row) {
|
||||||
|
|||||||
Reference in New Issue
Block a user