1、业务接口类及业务接口实现类包路径优化;

2、下载记录增删查改接口实现;
3、下载和批量下载API接口增加保存下载记录功能;
4、获取Token方法增加从Cookie获取Token功能
This commit is contained in:
liangwen 2025-09-13 09:46:27 +08:00
parent 375858c943
commit 80b5a98c57
56 changed files with 797 additions and 108 deletions

View File

@ -6,8 +6,8 @@ import javax.servlet.http.HttpServletResponse;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.ruoyi.common.utils.lang.LangUnit; import com.ruoyi.common.utils.lang.LangUnit;
import com.ruoyi.file.api.ISysRoleUserFileService; import com.ruoyi.file.service.ISysRoleUserFileService;
import com.ruoyi.file.api.IUserFileService; import com.ruoyi.file.service.IUserFileService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@ -86,7 +86,7 @@ spring:
# 端口默认为6379 # 端口默认为6379
port: 6379 port: 6379
# 数据库索引 # 数据库索引
database: 0 database: 1
# 密码 # 密码
password: hb123.com password: hb123.com
# 连接超时时间 # 连接超时时间

View File

@ -4,15 +4,17 @@ import com.qiwenshare.common.anno.MyLog;
import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.result.RestResult;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.file.api.IOperationLogService; import com.ruoyi.file.service.IOperationLogService;
import com.ruoyi.file.util.OperationLogUtil; import com.ruoyi.file.util.OperationLogUtil;
import com.ruoyi.file.vo.user.UserLoginVo; import com.ruoyi.file.vo.user.UserLoginVo;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.CodeSignature; import org.aspectj.lang.reflect.CodeSignature;
import org.aspectj.lang.reflect.MethodSignature; import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
@ -25,8 +27,8 @@ import java.util.Map;
/** /**
* 操作日志切面 * 操作日志切面
*/ */
//@Aspect @Aspect
//@Component @Component
public class WebLogAcpect { public class WebLogAcpect {
@Resource @Resource
IOperationLogService operationLogService; IOperationLogService operationLogService;
@ -76,11 +78,15 @@ public class WebLogAcpect {
if (ret instanceof RestResult) { if (ret instanceof RestResult) {
boolean isSuccess = ((RestResult) ret).getSuccess(); boolean isSuccess = ((RestResult) ret).getSuccess();
String errorMessage = ((RestResult) ret).getMessage(); String errorMessage = ((RestResult) ret).getMessage();
LoginUser sessionUser = SecurityUtils.getLoginUser();
Long userId = null; Long userId = null;
try {
LoginUser sessionUser = SecurityUtils.getLoginUser();
if (sessionUser != null) { if (sessionUser != null) {
userId = sessionUser.getUserId(); userId = sessionUser.getUserId();
} }
} catch (Exception e) {
e.printStackTrace();
}
Integer code = ((RestResult) ret).getCode(); Integer code = ((RestResult) ret).getCode();
if (code != null && code == 200001) { if (code != null && code == 200001) {

View File

@ -2,8 +2,8 @@ package com.ruoyi.file.component;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.file.api.IFiletransferService; import com.ruoyi.file.service.IFiletransferService;
import com.ruoyi.file.api.IRecoveryFileService; import com.ruoyi.file.service.IRecoveryFileService;
import com.ruoyi.file.domain.FileBean; import com.ruoyi.file.domain.FileBean;
import com.ruoyi.file.domain.UserFile; import com.ruoyi.file.domain.UserFile;
import com.ruoyi.file.io.QiwenFile; import com.ruoyi.file.io.QiwenFile;

View File

@ -17,8 +17,8 @@ import com.qiwenshare.ufop.operation.write.domain.WriteFile;
import com.qiwenshare.ufop.util.UFOPUtils; import com.qiwenshare.ufop.util.UFOPUtils;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.file.api.IShareFileService; import com.ruoyi.file.service.IShareFileService;
import com.ruoyi.file.api.IShareService; import com.ruoyi.file.service.IShareService;
import com.ruoyi.file.config.es.FileSearch; import com.ruoyi.file.config.es.FileSearch;
import com.ruoyi.file.domain.*; import com.ruoyi.file.domain.*;
import com.ruoyi.file.io.QiwenFile; import com.ruoyi.file.io.QiwenFile;

View File

@ -7,9 +7,9 @@ import com.qiwenshare.common.anno.MyLog;
import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.result.RestResult;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.file.api.ICommonFileService; import com.ruoyi.file.service.ICommonFileService;
import com.ruoyi.file.api.IFilePermissionService; import com.ruoyi.file.service.IFilePermissionService;
import com.ruoyi.file.api.IUserFileService; import com.ruoyi.file.service.IUserFileService;
import com.ruoyi.file.domain.CommonFile; import com.ruoyi.file.domain.CommonFile;
import com.ruoyi.file.domain.FilePermission; import com.ruoyi.file.domain.FilePermission;
import com.ruoyi.file.domain.UserFile; import com.ruoyi.file.domain.UserFile;

View File

@ -0,0 +1,104 @@
package com.ruoyi.file.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.file.domain.DownloadRecord;
import com.ruoyi.file.service.IDownloadRecordService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 下载记录Controller
*
* @author liangwen
* @date 2025-09-12
*/
@RestController
@RequestMapping("/file/downloadRecord")
public class DownloadRecordController extends BaseController
{
@Autowired
private IDownloadRecordService downloadRecordService;
/**
* 查询下载记录列表
*/
@PreAuthorize("@ss.hasPermi('file:downloadRecord:list')")
@GetMapping("/list")
public TableDataInfo list(DownloadRecord downloadRecord)
{
startPage();
List<DownloadRecord> list = downloadRecordService.selectDownloadRecordList(downloadRecord);
return getDataTable(list);
}
/**
* 导出下载记录列表
*/
@PreAuthorize("@ss.hasPermi('file:downloadRecord:export')")
@Log(title = "下载记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, DownloadRecord downloadRecord)
{
List<DownloadRecord> list = downloadRecordService.selectDownloadRecordList(downloadRecord);
ExcelUtil<DownloadRecord> util = new ExcelUtil<DownloadRecord>(DownloadRecord.class);
util.exportExcel(response, list, "下载记录数据");
}
/**
* 获取下载记录详细信息
*/
@PreAuthorize("@ss.hasPermi('file:downloadRecord:query')")
@GetMapping(value = "/{recordId}")
public AjaxResult getInfo(@PathVariable("recordId") Long recordId)
{
return success(downloadRecordService.selectDownloadRecordByRecordId(recordId));
}
/**
* 新增下载记录
*/
@PreAuthorize("@ss.hasPermi('file:downloadRecord:add')")
@Log(title = "下载记录", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody DownloadRecord downloadRecord)
{
return toAjax(downloadRecordService.insertDownloadRecord(downloadRecord));
}
/**
* 修改下载记录
*/
@PreAuthorize("@ss.hasPermi('file:downloadRecord:edit')")
@Log(title = "下载记录", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody DownloadRecord downloadRecord)
{
return toAjax(downloadRecordService.updateDownloadRecord(downloadRecord));
}
/**
* 删除下载记录
*/
@PreAuthorize("@ss.hasPermi('file:downloadRecord:remove')")
@Log(title = "下载记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{recordIds}")
public AjaxResult remove(@PathVariable Long[] recordIds)
{
return toAjax(downloadRecordService.deleteDownloadRecordByRecordIds(recordIds));
}
}

View File

@ -20,8 +20,8 @@ import com.qiwenshare.ufop.operation.copy.Copier;
import com.qiwenshare.ufop.operation.copy.domain.CopyFile; import com.qiwenshare.ufop.operation.copy.domain.CopyFile;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.file.api.IFileService; import com.ruoyi.file.service.IFileService;
import com.ruoyi.file.api.IUserFileService; import com.ruoyi.file.service.IUserFileService;
import com.ruoyi.file.component.AsyncTaskComp; import com.ruoyi.file.component.AsyncTaskComp;
import com.ruoyi.file.component.FileDealComp; import com.ruoyi.file.component.FileDealComp;
import com.ruoyi.file.config.es.FileSearch; import com.ruoyi.file.config.es.FileSearch;

View File

@ -8,11 +8,10 @@ import com.qiwenshare.ufop.operation.download.Downloader;
import com.qiwenshare.ufop.operation.download.domain.DownloadFile; import com.qiwenshare.ufop.operation.download.domain.DownloadFile;
import com.qiwenshare.ufop.operation.download.domain.Range; import com.qiwenshare.ufop.operation.download.domain.Range;
import com.qiwenshare.ufop.util.UFOPUtils; import com.qiwenshare.ufop.util.UFOPUtils;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.file.api.IFileService; import com.ruoyi.file.service.*;
import com.ruoyi.file.api.IFiletransferService;
import com.ruoyi.file.api.IUserFileService;
import com.ruoyi.file.component.FileDealComp; import com.ruoyi.file.component.FileDealComp;
import com.ruoyi.file.domain.FileBean; import com.ruoyi.file.domain.FileBean;
import com.ruoyi.file.domain.StorageBean; import com.ruoyi.file.domain.StorageBean;
@ -22,13 +21,15 @@ import com.ruoyi.file.dto.file.DownloadFileDTO;
import com.ruoyi.file.dto.file.PreviewDTO; import com.ruoyi.file.dto.file.PreviewDTO;
import com.ruoyi.file.dto.file.UploadFileDTO; import com.ruoyi.file.dto.file.UploadFileDTO;
import com.ruoyi.file.io.QiwenFile; import com.ruoyi.file.io.QiwenFile;
import com.ruoyi.file.service.StorageService;
import com.ruoyi.file.vo.file.UploadFileVo; import com.ruoyi.file.vo.file.UploadFileVo;
import com.ruoyi.framework.manager.AsyncManager;
import com.ruoyi.framework.manager.factory.AsyncFactory;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -40,6 +41,7 @@ import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -60,10 +62,12 @@ public class FiletransferController {
@Resource @Resource
FileDealComp fileDealComp; FileDealComp fileDealComp;
@Resource @Resource
StorageService storageService; IStorageService storageService;
@Resource @Resource
UFOPFactory ufopFactory; UFOPFactory ufopFactory;
@Autowired
private IDownloadRecordService downloadRecordService;
public static final String CURRENT_MODULE = "文件传输接口"; public static final String CURRENT_MODULE = "文件传输接口";
@ -113,6 +117,9 @@ public class FiletransferController {
} }
} }
} }
if (StringUtils.isEmpty(token)) {
token = httpServletRequest.getHeader("token");
}
boolean authResult = fileDealComp.checkAuthDownloadAndPreview(downloadFileDTO.getShareBatchNum(), boolean authResult = fileDealComp.checkAuthDownloadAndPreview(downloadFileDTO.getShareBatchNum(),
downloadFileDTO.getExtractionCode(), downloadFileDTO.getExtractionCode(),
token, token,
@ -139,6 +146,8 @@ public class FiletransferController {
httpServletResponse.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名 httpServletResponse.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名
filetransferService.downloadFile(httpServletResponse, downloadFileDTO); filetransferService.downloadFile(httpServletResponse, downloadFileDTO);
// 保存下载记录
downloadRecordService.saveDownloadRecord(Arrays.asList(downloadFileDTO.getUserFileId()));
} }
@Operation(summary = "批量下载文件", description = "批量下载文件", tags = {"filetransfer"}) @Operation(summary = "批量下载文件", description = "批量下载文件", tags = {"filetransfer"})
@ -155,6 +164,9 @@ public class FiletransferController {
} }
} }
} }
if (StringUtils.isEmpty(token)) {
token = httpServletRequest.getHeader("token");
}
boolean authResult = fileDealComp.checkAuthDownloadAndPreview(batchDownloadFileDTO.getShareBatchNum(), boolean authResult = fileDealComp.checkAuthDownloadAndPreview(batchDownloadFileDTO.getShareBatchNum(),
batchDownloadFileDTO.getExtractionCode(), batchDownloadFileDTO.getExtractionCode(),
token, token,
@ -186,6 +198,7 @@ public class FiletransferController {
String fileName = String.valueOf(date.getTime()); String fileName = String.valueOf(date.getTime());
httpServletResponse.addHeader("Content-Disposition", "attachment;fileName=" + fileName + ".zip");// 设置文件名 httpServletResponse.addHeader("Content-Disposition", "attachment;fileName=" + fileName + ".zip");// 设置文件名
filetransferService.downloadUserFileList(httpServletResponse, userFile.getFilePath(), fileName, userFileIds); filetransferService.downloadUserFileList(httpServletResponse, userFile.getFilePath(), fileName, userFileIds);
downloadRecordService.saveDownloadRecord(userFileIds);
} }
@Operation(summary="预览文件", description="用于文件预览", tags = {"filetransfer"}) @Operation(summary="预览文件", description="用于文件预览", tags = {"filetransfer"})

View File

@ -2,7 +2,7 @@ package com.ruoyi.file.controller;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.result.RestResult;
import com.ruoyi.file.api.INoticeService; import com.ruoyi.file.service.INoticeService;
import com.ruoyi.file.domain.Notice; import com.ruoyi.file.domain.Notice;
import com.ruoyi.file.dto.notice.NoticeListDTO; import com.ruoyi.file.dto.notice.NoticeListDTO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;

View File

@ -9,8 +9,8 @@ import com.qiwenshare.ufop.operation.download.domain.DownloadFile;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.file.api.IFileService; import com.ruoyi.file.service.IFileService;
import com.ruoyi.file.api.IUserFileService; import com.ruoyi.file.service.IUserFileService;
import com.ruoyi.file.component.FileDealComp; import com.ruoyi.file.component.FileDealComp;
import com.ruoyi.file.domain.FileBean; import com.ruoyi.file.domain.FileBean;
import com.ruoyi.file.domain.UserFile; import com.ruoyi.file.domain.UserFile;

View File

@ -4,10 +4,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qiwenshare.common.anno.MyLog; import com.qiwenshare.common.anno.MyLog;
import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.result.RestResult;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.file.api.IFileService; import com.ruoyi.file.service.IFileService;
import com.ruoyi.file.api.IFiletransferService; import com.ruoyi.file.service.IFiletransferService;
import com.ruoyi.file.api.IRecoveryFileService; import com.ruoyi.file.service.IRecoveryFileService;
import com.ruoyi.file.api.IUserFileService; import com.ruoyi.file.service.IUserFileService;
import com.ruoyi.file.component.AsyncTaskComp; import com.ruoyi.file.component.AsyncTaskComp;
import com.ruoyi.file.domain.RecoveryFile; import com.ruoyi.file.domain.RecoveryFile;
import com.ruoyi.file.dto.file.DeleteRecoveryFileDTO; import com.ruoyi.file.dto.file.DeleteRecoveryFileDTO;

View File

@ -11,9 +11,9 @@ import com.qiwenshare.common.result.RestResult;
import com.qiwenshare.common.util.DateUtil; import com.qiwenshare.common.util.DateUtil;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.file.api.IShareFileService; import com.ruoyi.file.service.IShareFileService;
import com.ruoyi.file.api.IShareService; import com.ruoyi.file.service.IShareService;
import com.ruoyi.file.api.IUserFileService; import com.ruoyi.file.service.IUserFileService;
import com.ruoyi.file.component.FileDealComp; import com.ruoyi.file.component.FileDealComp;
import com.ruoyi.file.domain.Share; import com.ruoyi.file.domain.Share;
import com.ruoyi.file.domain.ShareFile; import com.ruoyi.file.domain.ShareFile;

View File

@ -3,7 +3,7 @@ package com.ruoyi.file.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.result.RestResult;
import com.ruoyi.file.api.ISysParamService; import com.ruoyi.file.service.ISysParamService;
import com.ruoyi.file.domain.SysParam; import com.ruoyi.file.domain.SysParam;
import com.ruoyi.file.dto.param.QueryGroupParamDTO; import com.ruoyi.file.dto.param.QueryGroupParamDTO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;

View File

@ -2,12 +2,12 @@ package com.ruoyi.file.controller;
import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch.ElasticsearchClient;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.file.api.IShareFileService; import com.ruoyi.file.service.IShareFileService;
import com.ruoyi.file.component.FileDealComp; import com.ruoyi.file.component.FileDealComp;
import com.ruoyi.file.domain.ShareFile; import com.ruoyi.file.domain.ShareFile;
import com.ruoyi.file.domain.UserFile; import com.ruoyi.file.domain.UserFile;
import com.ruoyi.file.io.QiwenFile; import com.ruoyi.file.io.QiwenFile;
import com.ruoyi.file.service.UserFileService; import com.ruoyi.file.service.IUserFileService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
@ -21,7 +21,7 @@ import java.util.List;
public class TaskController { public class TaskController {
@Resource @Resource
UserFileService userFileService; IUserFileService userFileService;
@Resource @Resource
FileDealComp fileDealComp; FileDealComp fileDealComp;
@Resource @Resource

View File

@ -1,29 +1,24 @@
package com.ruoyi.file.controller; package com.ruoyi.file.controller;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.qiwenshare.common.anno.MyLog; import com.qiwenshare.common.anno.MyLog;
import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.result.RestResult;
import com.qiwenshare.common.util.DateUtil;
import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.file.api.IUserLoginInfoService; import com.ruoyi.file.service.IUserLoginInfoService;
import com.ruoyi.file.component.JwtComp; import com.ruoyi.file.component.JwtComp;
import com.ruoyi.file.domain.UserLoginInfo;
import com.ruoyi.file.vo.user.UserLoginVo; import com.ruoyi.file.vo.user.UserLoginVo;
import com.ruoyi.framework.web.service.SysLoginService; import com.ruoyi.framework.web.service.SysLoginService;
import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISysUserService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@ -0,0 +1,61 @@
package com.ruoyi.file.domain;
import java.util.List;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import lombok.Getter;
import lombok.Setter;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 下载记录对象 download_record
*
* @author liangwen
* @date 2025-09-12
*/
@Setter
@Getter
public class DownloadRecord extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 记录id */
private Long recordId;
/** 用户id */
@Excel(name = "用户id")
private Long userId;
/** 下载时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "下载时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date downloadTime;
/** 下载IP地址 */
@Excel(name = "下载IP地址")
private String ipaddr;
/** 下载地点 */
@Excel(name = "下载地点")
private String location;
/** 浏览器类型 */
@Excel(name = "浏览器类型")
private String browser;
/** 操作系统 */
@Excel(name = "操作系统")
private String os;
/** 下载记录明细信息 */
private List<DownloadRecordItem> downloadRecordItemList;
/** 用户昵称 */
private String nickName;
/** 文件名称(多个用,隔开) */
private String fileNames;
}

View File

@ -0,0 +1,33 @@
package com.ruoyi.file.domain;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 下载记录明显对象 download_record_item
*
* @author liangwen
* @date 2025-09-12
*/
@Data
public class DownloadRecordItem extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 下载明细id */
private Long itemId;
/** 下载记录id */
@Excel(name = "下载记录id")
private Long recordId;
/** 用户文件id */
@Excel(name = "用户文件id")
private String userFileId;
/** 用户文件对象 */
private UserFile userFile;
}

View File

@ -0,0 +1,87 @@
package com.ruoyi.file.mapper;
import java.util.List;
import com.ruoyi.file.domain.DownloadRecord;
import com.ruoyi.file.domain.DownloadRecordItem;
/**
* 下载记录Mapper接口
*
* @author liangwen
* @date 2025-09-12
*/
public interface DownloadRecordMapper
{
/**
* 查询下载记录
*
* @param recordId 下载记录主键
* @return 下载记录
*/
public DownloadRecord selectDownloadRecordByRecordId(Long recordId);
/**
* 查询下载记录列表
*
* @param downloadRecord 下载记录
* @return 下载记录集合
*/
public List<DownloadRecord> selectDownloadRecordList(DownloadRecord downloadRecord);
/**
* 新增下载记录
*
* @param downloadRecord 下载记录
* @return 结果
*/
public int insertDownloadRecord(DownloadRecord downloadRecord);
/**
* 修改下载记录
*
* @param downloadRecord 下载记录
* @return 结果
*/
public int updateDownloadRecord(DownloadRecord downloadRecord);
/**
* 删除下载记录
*
* @param recordId 下载记录主键
* @return 结果
*/
public int deleteDownloadRecordByRecordId(Long recordId);
/**
* 批量删除下载记录
*
* @param recordIds 需要删除的数据主键集合
* @return 结果
*/
public int deleteDownloadRecordByRecordIds(Long[] recordIds);
/**
* 批量删除下载记录明显
*
* @param recordIds 需要删除的数据主键集合
* @return 结果
*/
public int deleteDownloadRecordItemByRecordIds(Long[] recordIds);
/**
* 批量新增下载记录明显
*
* @param downloadRecordItemList 下载记录明显列表
* @return 结果
*/
public int batchDownloadRecordItem(List<DownloadRecordItem> downloadRecordItemList);
/**
* 通过下载记录主键删除下载记录明显信息
*
* @param recordId 下载记录ID
* @return 结果
*/
public int deleteDownloadRecordItemByRecordId(Long recordId);
}

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.file.domain.CommonFile; import com.ruoyi.file.domain.CommonFile;

View File

@ -0,0 +1,65 @@
package com.ruoyi.file.service;
import java.util.List;
import com.ruoyi.file.domain.DownloadRecord;
import javax.servlet.http.HttpServletRequest;
/**
* 下载记录Service接口
*
* @author liangwen
* @date 2025-09-12
*/
public interface IDownloadRecordService
{
/**
* 查询下载记录
*
* @param recordId 下载记录主键
* @return 下载记录
*/
public DownloadRecord selectDownloadRecordByRecordId(Long recordId);
/**
* 查询下载记录列表
*
* @param downloadRecord 下载记录
* @return 下载记录集合
*/
public List<DownloadRecord> selectDownloadRecordList(DownloadRecord downloadRecord);
/**
* 新增下载记录
*
* @param downloadRecord 下载记录
* @return 结果
*/
public int insertDownloadRecord(DownloadRecord downloadRecord);
/**
* 修改下载记录
*
* @param downloadRecord 下载记录
* @return 结果
*/
public int updateDownloadRecord(DownloadRecord downloadRecord);
/**
* 批量删除下载记录
*
* @param recordIds 需要删除的下载记录主键集合
* @return 结果
*/
public int deleteDownloadRecordByRecordIds(Long[] recordIds);
/**
* 删除下载记录信息
*
* @param recordId 下载记录主键
* @return 结果
*/
public int deleteDownloadRecordByRecordId(Long recordId);
public void saveDownloadRecord(List<String> userFileIds);
}

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.file.domain.FilePermission; import com.ruoyi.file.domain.FilePermission;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.file.domain.FileBean; import com.ruoyi.file.domain.FileBean;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.ruoyi.file.domain.FileBean; import com.ruoyi.file.domain.FileBean;
import com.ruoyi.file.dto.file.DownloadFileDTO; import com.ruoyi.file.dto.file.DownloadFileDTO;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.file.domain.RecoveryFile; import com.ruoyi.file.domain.RecoveryFile;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.file.domain.ShareFile; import com.ruoyi.file.domain.ShareFile;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.file.domain.Share; import com.ruoyi.file.domain.Share;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.file.domain.StorageBean; import com.ruoyi.file.domain.StorageBean;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.file.domain.SysParam; import com.ruoyi.file.domain.SysParam;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysRole;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.file.domain.UploadTaskDetail; import com.ruoyi.file.domain.UploadTaskDetail;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.file.domain.UploadTask; import com.ruoyi.file.domain.UploadTask;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.api; package com.ruoyi.file.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.file.domain.UserLoginInfo; import com.ruoyi.file.domain.UserLoginInfo;

View File

@ -1,9 +1,9 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.file.api.ICommonFileService;
import com.ruoyi.file.domain.CommonFile; import com.ruoyi.file.domain.CommonFile;
import com.ruoyi.file.mapper.CommonFileMapper; import com.ruoyi.file.mapper.CommonFileMapper;
import com.ruoyi.file.service.ICommonFileService;
import com.ruoyi.file.vo.commonfile.CommonFileListVo; import com.ruoyi.file.vo.commonfile.CommonFileListVo;
import com.ruoyi.file.vo.commonfile.CommonFileUser; import com.ruoyi.file.vo.commonfile.CommonFileUser;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -16,7 +16,7 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
@Transactional(rollbackFor=Exception.class) @Transactional(rollbackFor=Exception.class)
public class CommonFileService extends ServiceImpl<CommonFileMapper, CommonFile> implements ICommonFileService { public class CommonFileServiceImpl extends ServiceImpl<CommonFileMapper, CommonFile> implements ICommonFileService {
@Resource @Resource
CommonFileMapper commonFileMapper; CommonFileMapper commonFileMapper;

View File

@ -0,0 +1,200 @@
package com.ruoyi.file.service.impl;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.ip.AddressUtils;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.file.domain.UserFile;
import eu.bitwalker.useragentutils.UserAgent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Objects;
import java.util.stream.Collectors;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.file.domain.DownloadRecordItem;
import com.ruoyi.file.mapper.DownloadRecordMapper;
import com.ruoyi.file.domain.DownloadRecord;
import com.ruoyi.file.service.IDownloadRecordService;
import javax.servlet.http.HttpServletRequest;
/**
* 下载记录Service业务层处理
*
* @author liangwen
* @date 2025-09-12
*/
@Service
public class DownloadRecordServiceImpl implements IDownloadRecordService
{
@Autowired
private DownloadRecordMapper downloadRecordMapper;
/**
* 查询下载记录
*
* @param recordId 下载记录主键
* @return 下载记录
*/
@Override
public DownloadRecord selectDownloadRecordByRecordId(Long recordId)
{
return downloadRecordMapper.selectDownloadRecordByRecordId(recordId);
}
/**
* 查询下载记录列表
*
* @param downloadRecord 下载记录
* @return 下载记录
*/
@Override
public List<DownloadRecord> selectDownloadRecordList(DownloadRecord downloadRecord)
{
List<DownloadRecord> recordList = downloadRecordMapper.selectDownloadRecordList(downloadRecord);
for (DownloadRecord record : recordList) {
List<DownloadRecordItem> itemList = record.getDownloadRecordItemList();
if (itemList != null && !itemList.isEmpty()) {
String fileNames = itemList.stream()
.map(DownloadRecordItem::getUserFile) // 取出 UserFile
.filter(Objects::nonNull)
.map(userFile -> {
String name = userFile.getFileName();
String ext = userFile.getExtendName();
if (ext != null && !ext.isEmpty()) {
return name + "." + ext;
} else {
return name;
}
})
.filter(Objects::nonNull)
.collect(Collectors.joining(","));
record.setFileNames(fileNames);
} else {
record.setFileNames("");
}
}
return recordList;
}
/**
* 新增下载记录
*
* @param downloadRecord 下载记录
* @return 结果
*/
@Transactional
@Override
public int insertDownloadRecord(DownloadRecord downloadRecord)
{
int rows = downloadRecordMapper.insertDownloadRecord(downloadRecord);
insertDownloadRecordItem(downloadRecord);
return rows;
}
/**
* 修改下载记录
*
* @param downloadRecord 下载记录
* @return 结果
*/
@Transactional
@Override
public int updateDownloadRecord(DownloadRecord downloadRecord)
{
downloadRecordMapper.deleteDownloadRecordItemByRecordId(downloadRecord.getRecordId());
insertDownloadRecordItem(downloadRecord);
return downloadRecordMapper.updateDownloadRecord(downloadRecord);
}
/**
* 批量删除下载记录
*
* @param recordIds 需要删除的下载记录主键
* @return 结果
*/
@Transactional
@Override
public int deleteDownloadRecordByRecordIds(Long[] recordIds)
{
downloadRecordMapper.deleteDownloadRecordItemByRecordIds(recordIds);
return downloadRecordMapper.deleteDownloadRecordByRecordIds(recordIds);
}
/**
* 删除下载记录信息
*
* @param recordId 下载记录主键
* @return 结果
*/
@Transactional
@Override
public int deleteDownloadRecordByRecordId(Long recordId)
{
downloadRecordMapper.deleteDownloadRecordItemByRecordId(recordId);
return downloadRecordMapper.deleteDownloadRecordByRecordId(recordId);
}
@Override
public void saveDownloadRecord(List<String> userFileIds) {
UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
String address = AddressUtils.getRealAddressByIP(ip);
// 获取客户端操作系统
String os = userAgent.getOperatingSystem().getName();
// 获取客户端浏览器
String browser = userAgent.getBrowser().getName();
DownloadRecord downloadRecord = new DownloadRecord();
Long userId = null;
try {
userId = SecurityUtils.getUserId();
} catch (Exception e) {
e.printStackTrace();
}
downloadRecord.setUserId(userId);
downloadRecord.setIpaddr(ip);
downloadRecord.setLocation(address);
downloadRecord.setOs(os);
downloadRecord.setBrowser(browser);
downloadRecord.setDownloadTime(DateUtils.getNowDate());
List<DownloadRecordItem> itemList = new ArrayList<>();
for (String userFileId : userFileIds) {
DownloadRecordItem downloadRecordItem = new DownloadRecordItem();
downloadRecordItem.setUserFileId(userFileId);
itemList.add(downloadRecordItem);
}
downloadRecord.setDownloadRecordItemList(itemList);
downloadRecordMapper.insertDownloadRecord(downloadRecord);
insertDownloadRecordItem(downloadRecord);
}
/**
* 新增下载记录明显信息
*
* @param downloadRecord 下载记录对象
*/
public void insertDownloadRecordItem(DownloadRecord downloadRecord)
{
List<DownloadRecordItem> downloadRecordItemList = downloadRecord.getDownloadRecordItemList();
Long recordId = downloadRecord.getRecordId();
if (StringUtils.isNotNull(downloadRecordItemList))
{
List<DownloadRecordItem> list = new ArrayList<DownloadRecordItem>();
for (DownloadRecordItem downloadRecordItem : downloadRecordItemList)
{
downloadRecordItem.setRecordId(recordId);
list.add(downloadRecordItem);
}
if (list.size() > 0)
{
downloadRecordMapper.batchDownloadRecordItem(list);
}
}
}
}

View File

@ -1,9 +1,9 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.file.api.IFilePermissionService;
import com.ruoyi.file.domain.FilePermission; import com.ruoyi.file.domain.FilePermission;
import com.ruoyi.file.mapper.FilePermissionMapper; import com.ruoyi.file.mapper.FilePermissionMapper;
import com.ruoyi.file.service.IFilePermissionService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -11,6 +11,6 @@ import org.springframework.transaction.annotation.Transactional;
@Slf4j @Slf4j
@Service @Service
@Transactional(rollbackFor=Exception.class) @Transactional(rollbackFor=Exception.class)
public class FilePermissionService extends ServiceImpl<FilePermissionMapper, FilePermission> implements IFilePermissionService { public class FilePermissionServiceImpl extends ServiceImpl<FilePermissionMapper, FilePermission> implements IFilePermissionService {
} }

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -12,7 +12,6 @@ import com.qiwenshare.ufop.operation.download.Downloader;
import com.qiwenshare.ufop.operation.download.domain.DownloadFile; import com.qiwenshare.ufop.operation.download.domain.DownloadFile;
import com.qiwenshare.ufop.util.UFOPUtils; import com.qiwenshare.ufop.util.UFOPUtils;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.file.api.IFileService;
import com.ruoyi.file.component.AsyncTaskComp; import com.ruoyi.file.component.AsyncTaskComp;
import com.ruoyi.file.component.FileDealComp; import com.ruoyi.file.component.FileDealComp;
import com.ruoyi.file.domain.FileBean; import com.ruoyi.file.domain.FileBean;
@ -23,6 +22,7 @@ import com.ruoyi.file.mapper.FileMapper;
import com.ruoyi.file.mapper.ImageMapper; import com.ruoyi.file.mapper.ImageMapper;
import com.ruoyi.file.mapper.MusicMapper; import com.ruoyi.file.mapper.MusicMapper;
import com.ruoyi.file.mapper.UserFileMapper; import com.ruoyi.file.mapper.UserFileMapper;
import com.ruoyi.file.service.IFileService;
import com.ruoyi.file.util.QiwenFileUtil; import com.ruoyi.file.util.QiwenFileUtil;
import com.ruoyi.file.vo.file.FileDetailVO; import com.ruoyi.file.vo.file.FileDetailVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -43,7 +43,7 @@ import java.util.concurrent.Executors;
@Slf4j @Slf4j
@Service @Service
@Transactional(rollbackFor=Exception.class) @Transactional(rollbackFor=Exception.class)
public class FileService extends ServiceImpl<FileMapper, FileBean> implements IFileService { public class FileServiceImpl extends ServiceImpl<FileMapper, FileBean> implements IFileService {
public static Executor executor = Executors.newFixedThreadPool(20); public static Executor executor = Executors.newFixedThreadPool(20);
@Resource @Resource
FileMapper fileMapper; FileMapper fileMapper;

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
@ -23,7 +23,6 @@ import com.qiwenshare.ufop.operation.upload.domain.UploadFile;
import com.qiwenshare.ufop.operation.upload.domain.UploadFileResult; import com.qiwenshare.ufop.operation.upload.domain.UploadFileResult;
import com.qiwenshare.ufop.util.UFOPUtils; import com.qiwenshare.ufop.util.UFOPUtils;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.file.api.IFiletransferService;
import com.ruoyi.file.component.FileDealComp; import com.ruoyi.file.component.FileDealComp;
import com.ruoyi.file.domain.*; import com.ruoyi.file.domain.*;
import com.ruoyi.file.dto.file.DownloadFileDTO; import com.ruoyi.file.dto.file.DownloadFileDTO;
@ -31,6 +30,7 @@ import com.ruoyi.file.dto.file.PreviewDTO;
import com.ruoyi.file.dto.file.UploadFileDTO; import com.ruoyi.file.dto.file.UploadFileDTO;
import com.ruoyi.file.io.QiwenFile; import com.ruoyi.file.io.QiwenFile;
import com.ruoyi.file.mapper.*; import com.ruoyi.file.mapper.*;
import com.ruoyi.file.service.IFiletransferService;
import com.ruoyi.file.vo.file.UploadFileVo; import com.ruoyi.file.vo.file.UploadFileVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
@ -60,7 +60,7 @@ import java.util.zip.ZipOutputStream;
@Slf4j @Slf4j
@Service @Service
@Transactional(rollbackFor=Exception.class) @Transactional(rollbackFor=Exception.class)
public class FiletransferService implements IFiletransferService { public class FiletransferServiceImpl implements IFiletransferService {
@Resource @Resource
FileMapper fileMapper; FileMapper fileMapper;

View File

@ -1,19 +1,19 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.file.api.INoticeService;
import com.ruoyi.file.domain.Notice; import com.ruoyi.file.domain.Notice;
import com.ruoyi.file.dto.notice.NoticeListDTO; import com.ruoyi.file.dto.notice.NoticeListDTO;
import com.ruoyi.file.mapper.NoticeMapper; import com.ruoyi.file.mapper.NoticeMapper;
import com.ruoyi.file.service.INoticeService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
@Service @Service
public class NoticeService extends ServiceImpl<NoticeMapper, Notice> implements INoticeService { public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> implements INoticeService {
@Resource @Resource
NoticeMapper noticeMapper; NoticeMapper noticeMapper;

View File

@ -1,11 +1,11 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.file.api.IOperationLogService;
import com.ruoyi.file.domain.OperationLogBean; import com.ruoyi.file.domain.OperationLogBean;
import com.ruoyi.file.mapper.OperationLogMapper; import com.ruoyi.file.mapper.OperationLogMapper;
import com.ruoyi.file.service.IOperationLogService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -15,7 +15,7 @@ import java.util.List;
@Service @Service
@Transactional(rollbackFor=Exception.class) @Transactional(rollbackFor=Exception.class)
public class OperationLogService extends ServiceImpl<OperationLogMapper, OperationLogBean> implements IOperationLogService { public class OperationLogServiceImpl extends ServiceImpl<OperationLogMapper, OperationLogBean> implements IOperationLogService {
@Resource @Resource
OperationLogMapper operationLogMapper; OperationLogMapper operationLogMapper;

View File

@ -1,15 +1,15 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.file.api.IRecoveryFileService;
import com.ruoyi.file.component.FileDealComp; import com.ruoyi.file.component.FileDealComp;
import com.ruoyi.file.domain.RecoveryFile; import com.ruoyi.file.domain.RecoveryFile;
import com.ruoyi.file.domain.UserFile; import com.ruoyi.file.domain.UserFile;
import com.ruoyi.file.io.QiwenFile; import com.ruoyi.file.io.QiwenFile;
import com.ruoyi.file.mapper.RecoveryFileMapper; import com.ruoyi.file.mapper.RecoveryFileMapper;
import com.ruoyi.file.mapper.UserFileMapper; import com.ruoyi.file.mapper.UserFileMapper;
import com.ruoyi.file.service.IRecoveryFileService;
import com.ruoyi.file.vo.file.RecoveryFileListVo; import com.ruoyi.file.vo.file.RecoveryFileListVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -22,7 +22,7 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
@Transactional(rollbackFor=Exception.class) @Transactional(rollbackFor=Exception.class)
public class RecoveryFileService extends ServiceImpl<RecoveryFileMapper, RecoveryFile> implements IRecoveryFileService { public class RecoveryFileServiceImpl extends ServiceImpl<RecoveryFileMapper, RecoveryFile> implements IRecoveryFileService {
@Resource @Resource
UserFileMapper userFileMapper; UserFileMapper userFileMapper;
@Resource @Resource

View File

@ -1,9 +1,9 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.file.api.IShareFileService;
import com.ruoyi.file.domain.ShareFile; import com.ruoyi.file.domain.ShareFile;
import com.ruoyi.file.mapper.ShareFileMapper; import com.ruoyi.file.mapper.ShareFileMapper;
import com.ruoyi.file.service.IShareFileService;
import com.ruoyi.file.vo.share.ShareFileListVO; import com.ruoyi.file.vo.share.ShareFileListVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -15,7 +15,7 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
@Transactional(rollbackFor=Exception.class) @Transactional(rollbackFor=Exception.class)
public class ShareFileService extends ServiceImpl<ShareFileMapper, ShareFile> implements IShareFileService { public class ShareFileServiceImpl extends ServiceImpl<ShareFileMapper, ShareFile> implements IShareFileService {
@Resource @Resource
ShareFileMapper shareFileMapper; ShareFileMapper shareFileMapper;

View File

@ -1,10 +1,10 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.file.api.IShareService;
import com.ruoyi.file.domain.Share; import com.ruoyi.file.domain.Share;
import com.ruoyi.file.dto.sharefile.ShareListDTO; import com.ruoyi.file.dto.sharefile.ShareListDTO;
import com.ruoyi.file.mapper.ShareMapper; import com.ruoyi.file.mapper.ShareMapper;
import com.ruoyi.file.service.IShareService;
import com.ruoyi.file.vo.share.ShareListVO; import com.ruoyi.file.vo.share.ShareListVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -15,7 +15,7 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
@Transactional(rollbackFor=Exception.class) @Transactional(rollbackFor=Exception.class)
public class ShareService extends ServiceImpl<ShareMapper, Share> implements IShareService { public class ShareServiceImpl extends ServiceImpl<ShareMapper, Share> implements IShareService {
@Resource @Resource
ShareMapper shareMapper; ShareMapper shareMapper;

View File

@ -1,13 +1,13 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.file.api.IStorageService;
import com.ruoyi.file.domain.StorageBean; import com.ruoyi.file.domain.StorageBean;
import com.ruoyi.file.domain.SysParam; import com.ruoyi.file.domain.SysParam;
import com.ruoyi.file.mapper.StorageMapper; import com.ruoyi.file.mapper.StorageMapper;
import com.ruoyi.file.mapper.SysParamMapper; import com.ruoyi.file.mapper.SysParamMapper;
import com.ruoyi.file.mapper.UserFileMapper; import com.ruoyi.file.mapper.UserFileMapper;
import com.ruoyi.file.service.IStorageService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -17,7 +17,7 @@ import javax.annotation.Resource;
@Slf4j @Slf4j
@Service @Service
@Transactional(rollbackFor=Exception.class) @Transactional(rollbackFor=Exception.class)
public class StorageService extends ServiceImpl<StorageMapper, StorageBean> implements IStorageService { public class StorageServiceImpl extends ServiceImpl<StorageMapper, StorageBean> implements IStorageService {
@Resource @Resource
StorageMapper storageMapper; StorageMapper storageMapper;
@Resource @Resource

View File

@ -1,10 +1,10 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.file.api.ISysParamService;
import com.ruoyi.file.domain.SysParam; import com.ruoyi.file.domain.SysParam;
import com.ruoyi.file.mapper.SysParamMapper; import com.ruoyi.file.mapper.SysParamMapper;
import com.ruoyi.file.service.ISysParamService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -19,7 +19,7 @@ import java.util.List;
*/ */
@Slf4j @Slf4j
@Service @Service
public class SysParamService extends ServiceImpl<SysParamMapper, SysParam> implements ISysParamService { public class SysParamServiceImpl extends ServiceImpl<SysParamMapper, SysParam> implements ISysParamService {
@Resource @Resource
SysParamMapper sysParamMapper; SysParamMapper sysParamMapper;

View File

@ -1,10 +1,9 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.file.api.ISysRoleUserFileService;
import com.ruoyi.file.domain.SysRoleUserFile; import com.ruoyi.file.domain.SysRoleUserFile;
import com.ruoyi.file.mapper.SysRoleUserFileMapper; import com.ruoyi.file.mapper.SysRoleUserFileMapper;
import com.ruoyi.system.domain.SysRoleDept; import com.ruoyi.file.service.ISysRoleUserFileService;
import com.ruoyi.system.mapper.SysRoleMapper; import com.ruoyi.system.mapper.SysRoleMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -17,7 +16,7 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public class SysRoleUserFileService implements ISysRoleUserFileService { public class SysRoleUserFileServiceImpl implements ISysRoleUserFileService {
@Autowired @Autowired
SysRoleUserFileMapper roleUserFileMapper; SysRoleUserFileMapper roleUserFileMapper;

View File

@ -1,16 +1,16 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.file.api.IUploadTaskDetailService;
import com.ruoyi.file.domain.UploadTaskDetail; import com.ruoyi.file.domain.UploadTaskDetail;
import com.ruoyi.file.mapper.UploadTaskDetailMapper; import com.ruoyi.file.mapper.UploadTaskDetailMapper;
import com.ruoyi.file.service.IUploadTaskDetailService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List; import java.util.List;
@Service @Service
public class UploadTaskDetailService extends ServiceImpl<UploadTaskDetailMapper, UploadTaskDetail> implements IUploadTaskDetailService { public class UploadTaskDetailServiceImpl extends ServiceImpl<UploadTaskDetailMapper, UploadTaskDetail> implements IUploadTaskDetailService {
@Resource @Resource
UploadTaskDetailMapper uploadTaskDetailMapper; UploadTaskDetailMapper uploadTaskDetailMapper;

View File

@ -1,13 +1,13 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.file.api.IUploadTaskService;
import com.ruoyi.file.domain.UploadTask; import com.ruoyi.file.domain.UploadTask;
import com.ruoyi.file.mapper.UploadTaskMapper; import com.ruoyi.file.mapper.UploadTaskMapper;
import com.ruoyi.file.service.IUploadTaskService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
public class UploadTaskService extends ServiceImpl<UploadTaskMapper, UploadTask> implements IUploadTaskService { public class UploadTaskServiceImpl extends ServiceImpl<UploadTaskMapper, UploadTask> implements IUploadTaskService {
} }

View File

@ -1,4 +1,4 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import cn.hutool.core.net.URLDecoder; import cn.hutool.core.net.URLDecoder;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
@ -13,7 +13,6 @@ import com.qiwenshare.common.util.DateUtil;
import com.ruoyi.file.dto.file.UserFileDTO; import com.ruoyi.file.dto.file.UserFileDTO;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.file.api.IUserFileService;
import com.ruoyi.file.component.FileDealComp; import com.ruoyi.file.component.FileDealComp;
import com.ruoyi.file.domain.RecoveryFile; import com.ruoyi.file.domain.RecoveryFile;
import com.ruoyi.file.domain.UserFile; import com.ruoyi.file.domain.UserFile;
@ -21,6 +20,7 @@ import com.ruoyi.file.io.QiwenFile;
import com.ruoyi.file.mapper.RecoveryFileMapper; import com.ruoyi.file.mapper.RecoveryFileMapper;
import com.ruoyi.file.mapper.SysRoleUserFileMapper; import com.ruoyi.file.mapper.SysRoleUserFileMapper;
import com.ruoyi.file.mapper.UserFileMapper; import com.ruoyi.file.mapper.UserFileMapper;
import com.ruoyi.file.service.IUserFileService;
import com.ruoyi.file.util.FileTreeSelect; import com.ruoyi.file.util.FileTreeSelect;
import com.ruoyi.file.vo.file.FileListVO; import com.ruoyi.file.vo.file.FileListVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -38,7 +38,7 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public class UserFileService extends ServiceImpl<UserFileMapper, UserFile> implements IUserFileService { public class UserFileServiceImpl extends ServiceImpl<UserFileMapper, UserFile> implements IUserFileService {
@Resource @Resource
UserFileMapper userFileMapper; UserFileMapper userFileMapper;
@Resource @Resource

View File

@ -1,9 +1,9 @@
package com.ruoyi.file.service; package com.ruoyi.file.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.file.api.IUserLoginInfoService;
import com.ruoyi.file.domain.UserLoginInfo; import com.ruoyi.file.domain.UserLoginInfo;
import com.ruoyi.file.mapper.UserLoginInfoMapper; import com.ruoyi.file.mapper.UserLoginInfoMapper;
import com.ruoyi.file.service.IUserLoginInfoService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -12,7 +12,7 @@ import org.springframework.transaction.annotation.Transactional;
@Slf4j @Slf4j
@Service @Service
@Transactional(rollbackFor=Exception.class) @Transactional(rollbackFor=Exception.class)
public class UserLoginInfoService extends ServiceImpl<UserLoginInfoMapper, UserLoginInfo> implements IUserLoginInfoService { public class UserLoginInfoServiceImpl extends ServiceImpl<UserLoginInfoMapper, UserLoginInfo> implements IUserLoginInfoService {
} }

View File

@ -0,0 +1,115 @@
<?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.ruoyi.file.mapper.DownloadRecordMapper">
<resultMap type="DownloadRecord" id="DownloadRecordResult">
<result property="recordId" column="record_id" />
<result property="userId" column="user_id" />
<result property="downloadTime" column="download_time" />
<result property="ipaddr" column="ipaddr" />
<result property="location" column="location" />
<result property="browser" column="browser" />
<result property="os" column="os" />
<result property="nickName" column="nick_name" />
</resultMap>
<resultMap id="DownloadRecordDownloadRecordItemResult" type="DownloadRecord" extends="DownloadRecordResult">
<collection property="downloadRecordItemList" notNullColumn="sub_item_id" javaType="java.util.List" resultMap="DownloadRecordItemResult" />
</resultMap>
<resultMap type="DownloadRecordItem" id="DownloadRecordItemResult">
<result property="itemId" column="sub_item_id" />
<result property="recordId" column="sub_record_id" />
<result property="userFileId" column="sub_userFileId" />
<association property="userFile" javaType="com.ruoyi.file.domain.UserFile"
select="com.ruoyi.file.mapper.UserFileMapper.selectByUserFileId" column="sub_userFileId"/>
</resultMap>
<sql id="selectDownloadRecordVo">
select record_id, user_id, download_time, ipaddr, location, browser, os from download_record
</sql>
<select id="selectDownloadRecordList" parameterType="DownloadRecord" resultMap="DownloadRecordDownloadRecordItemResult">
select a.record_id, a.user_id, a.download_time, a.ipaddr, a.location, a.browser, a.os, u.nick_name as nick_name,
b.item_id as sub_item_id, b.record_id as sub_record_id, b.userFileId as sub_userFileId
from download_record a
left join download_record_item b on b.record_id = a.record_id
left join sys_user u on u.user_id = a.user_id
<where>
<if test="params.beginDownloadTime != null and params.beginDownloadTime != '' and params.endDownloadTime != null and params.endDownloadTime != ''"> and download_time between #{params.beginDownloadTime} and #{params.endDownloadTime}</if>
<if test="location != null and location != ''"> and location like concat('%', #{location}, '%')</if>
</where>
</select>
<select id="selectDownloadRecordByRecordId" parameterType="Long" resultMap="DownloadRecordDownloadRecordItemResult">
select a.record_id, a.user_id, a.download_time, a.ipaddr, a.location, a.browser, a.os,
b.item_id as sub_item_id, b.record_id as sub_record_id, b.userFileId as sub_userFileId
from download_record a
left join download_record_item b on b.record_id = a.record_id
where a.record_id = #{recordId}
</select>
<insert id="insertDownloadRecord" parameterType="DownloadRecord" useGeneratedKeys="true" keyProperty="recordId">
insert into download_record
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="userId != null">user_id,</if>
<if test="downloadTime != null">download_time,</if>
<if test="ipaddr != null">ipaddr,</if>
<if test="location != null">location,</if>
<if test="browser != null">browser,</if>
<if test="os != null">os,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="userId != null">#{userId},</if>
<if test="downloadTime != null">#{downloadTime},</if>
<if test="ipaddr != null">#{ipaddr},</if>
<if test="location != null">#{location},</if>
<if test="browser != null">#{browser},</if>
<if test="os != null">#{os},</if>
</trim>
</insert>
<update id="updateDownloadRecord" parameterType="DownloadRecord">
update download_record
<trim prefix="SET" suffixOverrides=",">
<if test="userId != null">user_id = #{userId},</if>
<if test="downloadTime != null">download_time = #{downloadTime},</if>
<if test="ipaddr != null">ipaddr = #{ipaddr},</if>
<if test="location != null">location = #{location},</if>
<if test="browser != null">browser = #{browser},</if>
<if test="os != null">os = #{os},</if>
</trim>
where record_id = #{recordId}
</update>
<delete id="deleteDownloadRecordByRecordId" parameterType="Long">
delete from download_record where record_id = #{recordId}
</delete>
<delete id="deleteDownloadRecordByRecordIds" parameterType="String">
delete from download_record where record_id in
<foreach item="recordId" collection="array" open="(" separator="," close=")">
#{recordId}
</foreach>
</delete>
<delete id="deleteDownloadRecordItemByRecordIds" parameterType="String">
delete from download_record_item where record_id in
<foreach item="recordId" collection="array" open="(" separator="," close=")">
#{recordId}
</foreach>
</delete>
<delete id="deleteDownloadRecordItemByRecordId" parameterType="Long">
delete from download_record_item where record_id = #{recordId}
</delete>
<insert id="batchDownloadRecordItem">
insert into download_record_item( item_id, record_id, userFileId) values
<foreach item="item" index="index" collection="list" separator=",">
( #{item.itemId}, #{item.recordId}, #{item.userFileId})
</foreach>
</insert>
</mapper>

View File

@ -4,6 +4,7 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.SysUser;
@ -237,6 +238,16 @@ public class TokenService
if (StringUtils.isEmpty(token)) { if (StringUtils.isEmpty(token)) {
token = request.getHeader("token"); token = request.getHeader("token");
} }
if (StringUtils.isEmpty(token)) {
Cookie[] cookieArr = request.getCookies();
if (cookieArr != null) {
for (Cookie cookie : cookieArr) {
if ("token".equals(cookie.getName())) {
token = cookie.getValue();
}
}
}
}
if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX)) if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX))
{ {
token = token.replace(Constants.TOKEN_PREFIX, ""); token = token.replace(Constants.TOKEN_PREFIX, "");