From 5d4112fa1bbd47dc6e7b9c0d239e34b020776924 Mon Sep 17 00:00:00 2001
From: hyingbo <1363390067@qq.com>
Date: 星期五, 30 五月 2025 17:39:15 +0800
Subject: [PATCH] 添加文件上传下载功能

---
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/DocInfoController.java    |   78 +++++++++++++++
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/FileDocInfo.java              |   67 +++++++++++++
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/DocInfoMapper.java            |    7 +
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IDocInfoService.java         |   34 ++++++
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/DocInfoServiceImpl.java |   81 ++++++++++++++++
 5 files changed, 267 insertions(+), 0 deletions(-)

diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/DocInfoController.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/DocInfoController.java
new file mode 100644
index 0000000..289283b
--- /dev/null
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/DocInfoController.java
@@ -0,0 +1,78 @@
+package org.jeecg.modules.system.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.system.entity.FileDocInfo;
+import org.jeecg.modules.system.service.IDocInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Slf4j
+@Api(tags = "鏂囨。琛�")
+@RestController
+@RequestMapping("/nc/doc")
+public class DocInfoController extends JeecgController<FileDocInfo, IDocInfoService> {
+    @Autowired
+    private IDocInfoService docInfoService;
+
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     * @param docInfo
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    public Result<IPage<FileDocInfo>> queryPageList(FileDocInfo docInfo,
+                                                    @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+                                                    @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+                                                    HttpServletRequest req) {
+        Result<IPage<FileDocInfo>> result = new Result<IPage<FileDocInfo>>();
+        QueryWrapper<FileDocInfo> queryWrapper = QueryGenerator.initQueryWrapper(docInfo, req.getParameterMap());
+        Page<FileDocInfo> page = new Page<FileDocInfo>(pageNo, pageSize);
+        IPage<FileDocInfo> pageList = docInfoService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    @AutoLog(value = "鏂囨。琛�-瀵煎叆鏂囨。杩涘彛")
+    @ApiOperation(value = "鏂囨。琛�-瀵煎叆鏂囨。杩涘彛", notes = "鏂囨。琛�-瀵煎叆鏂囨。杩涘彛")
+    @PostMapping("/add")
+    public Result<?> addDocInfo(@RequestParam("file") MultipartFile file) {
+        boolean b = docInfoService.addDocInfo(file);
+        if(!b)
+            return Result.error("鎿嶄綔澶辫触锛�");
+        return Result.ok("鎿嶄綔鎴愬姛锛�");
+    }
+
+    @AutoLog(value = "鏂囨。琛�-鍒犻櫎鏂囨。淇℃伅")
+    @ApiOperation(value = "鏂囨。琛�-鍒犻櫎鏂囨。淇℃伅", notes = "鏂囨。琛�-鍒犻櫎鏂囨。淇℃伅")
+    @DeleteMapping("/delete")
+    public Result<?> deleteDocInfo(@RequestParam("id") String id) {
+        boolean b = docInfoService.deleteDocInfo(id);
+        if(!b)
+            return Result.error("鎿嶄綔澶辫触锛�");
+        return Result.ok("鎿嶄綔鎴愬姛锛�");
+    }
+
+    @AutoLog(value = "鏂囦欢琛�-鏂囨。涓嬭浇")
+    @ApiOperation(value = "鏂囦欢琛�-鏂囨。涓嬭浇", notes = "鏂囦欢琛�-鏂囨。涓嬭浇")
+    @GetMapping("/download")
+    public Result<?> downloadDocFile(@RequestParam("id") String id, HttpServletResponse response) {
+        return docInfoService.downloadDocFile(response, id);
+    }
+}
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/FileDocInfo.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/FileDocInfo.java
new file mode 100644
index 0000000..fc7eeab
--- /dev/null
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/FileDocInfo.java
@@ -0,0 +1,67 @@
+package org.jeecg.modules.system.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.util.Date;
+
+/**
+ * @Description: 鏂囨。
+ * @author clown
+ */
+@Data
+@NoArgsConstructor
+@TableName(value = "file_doc_info")
+public class FileDocInfo {
+
+    @TableId(value = "id")
+    private String id;
+
+    /**鏂囦欢鍚嶇О*/
+    @Excel(name = "鏂囦欢鍚嶇О", width = 15)
+    @ApiModelProperty(value = "鏂囦欢鍚嶇О")
+    private String fileName;
+
+    /**鏂囦欢鍔犲瘑鍚庣殑鍚嶇О*/
+    @Excel(name = "鏂囦欢鍔犲瘑鍚庣殑鍚嶇О", width = 15)
+    @ApiModelProperty(value = "鏂囦欢鍔犲瘑鍚庣殑鍚嶇О")
+    private String fileEncodeName;
+
+    /**鏂囦欢璺緞*/
+    @Excel(name = "鏂囦欢璺緞", width = 15)
+    @ApiModelProperty(value = "鏂囦欢璺緞")
+    private String filePath;
+
+    /**鏂囦欢澶у皬*/
+    @Excel(name = "鏂囦欢澶у皬", width = 15)
+    @ApiModelProperty(value = "鏂囦欢澶у皬")
+    private Long fileSize;
+
+    /**鏂囦欢鍚庣紑*/
+    @Excel(name = "鏂囦欢鍚庣紑", width = 15)
+    @ApiModelProperty(value = "鏂囦欢鍚庣紑")
+    private String fileSuffix;
+
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private Date createTime;
+    @TableField(value = "update_time", fill = FieldFill.UPDATE)
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date updateTime;
+    @TableField(value = "create_by",fill = FieldFill.INSERT)
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String createBy;
+    @TableField(value = "update_by", fill = FieldFill.UPDATE)
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String updateBy;
+    @JsonIgnore
+    @TableLogic
+    @TableField(value = "delete_flag", select = false)
+    private Integer deleteFlag = 0;
+}
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/DocInfoMapper.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/DocInfoMapper.java
new file mode 100644
index 0000000..6260fdc
--- /dev/null
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/DocInfoMapper.java
@@ -0,0 +1,7 @@
+package org.jeecg.modules.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.system.entity.FileDocInfo;
+
+public interface DocInfoMapper  extends BaseMapper<FileDocInfo> {
+}
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IDocInfoService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IDocInfoService.java
new file mode 100644
index 0000000..091a506
--- /dev/null
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IDocInfoService.java
@@ -0,0 +1,34 @@
+package org.jeecg.modules.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.system.entity.FileDocInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public interface IDocInfoService extends IService<FileDocInfo> {
+
+    /**
+     * 瀵煎叆鏂囨。杩涘彛
+     * @param file
+     * @return
+     */
+    boolean addDocInfo(MultipartFile file);
+
+    /**
+     * 鍒犻櫎鏂囨。淇℃伅
+     * @param id
+     * @return
+     */
+    boolean deleteDocInfo(String id);
+
+    /**
+     * 鏂囨。涓嬭浇
+     * @param response
+     * @param id
+     * @return
+     */
+    Result<?> downloadDocFile(HttpServletResponse response, String id);
+}
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/DocInfoServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/DocInfoServiceImpl.java
new file mode 100644
index 0000000..dc85ab3
--- /dev/null
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/DocInfoServiceImpl.java
@@ -0,0 +1,81 @@
+package org.jeecg.modules.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.api.vo.FileUploadResult;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.exception.ExceptionCast;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.util.FileUtil;
+import org.jeecg.modules.system.entity.FileDocInfo;
+import org.jeecg.modules.system.mapper.DocInfoMapper;
+import org.jeecg.modules.system.service.IDocInfoService;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+@Service
+public class DocInfoServiceImpl extends ServiceImpl<DocInfoMapper, FileDocInfo> implements IDocInfoService {
+
+    @Override
+    public boolean addDocInfo(MultipartFile file) {
+        if (file == null || file.isEmpty()) {
+            throw new JeecgBootException("闈炴硶鍙傛暟");
+        }
+        FileUploadResult fileUploadResult = FileUtil.uploadFile(file);
+        if(fileUploadResult == null)
+            throw new JeecgBootException("鏂囨。瀵煎叆澶辫触");
+
+        String fileName = FileUtil.getFilenameNonSuffix(file.getOriginalFilename());
+        List<FileDocInfo> fileDocInfoList = this.list(new LambdaQueryWrapper<FileDocInfo>().eq(FileDocInfo::getFileName, fileName));
+        if (CollectionUtils.isNotEmpty(fileDocInfoList))
+            throw new JeecgBootException("璇ユ枃妗e凡瀛樺湪");
+
+        FileDocInfo docInfo = new FileDocInfo();
+        String docId = IdWorker.getIdStr();
+        docInfo.setId(docId);
+        docInfo.setFileName(fileUploadResult.getFileName());
+        docInfo.setFilePath(fileUploadResult.getFilePath());
+        docInfo.setFileEncodeName(fileUploadResult.getFileEncodeName());
+        docInfo.setFileSize(fileUploadResult.getFileSize());
+        docInfo.setFileSuffix(fileUploadResult.getFileSuffix());
+        return super.save(docInfo);
+    }
+
+    @Override
+    public boolean deleteDocInfo(String id) {
+
+        if(StringUtils.isBlank(id))
+            throw new JeecgBootException("闈炴硶鍙傛暟");
+        FileDocInfo en = super.getById(id);
+        if(en == null)
+            throw new JeecgBootException("鏈煡璇㈠埌鏂囦欢淇℃伅");
+        FileUtil.deleteFile(en.getFilePath(), en.getFileName());
+        return super.removeById(id);
+    }
+
+    @Override
+    public Result<?> downloadDocFile(HttpServletResponse response, String id) {
+
+        if(!StringUtils.isBlank(id))
+            throw new JeecgBootException("闈炴硶鍙傛暟");
+        FileDocInfo en = super.getById(id);
+        if(en == null)
+            throw new JeecgBootException("鏈煡璇㈠埌鏂囦欢淇℃伅");
+
+        String fileName;
+        if(StringUtils.isNotBlank(en.getFileSuffix())) {
+            fileName = en.getFileName() + "." + en.getFileSuffix();
+        }else {
+            fileName = en.getFileName();
+        }
+        FileUtil.downLoadFile(response, en.getFileEncodeName(), en.getFilePath(), fileName);
+        return null;
+    }
+}

--
Gitblit v1.9.3