From b188cbd181ec8cbe2002cf406c7e1a5863425dc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=9D=E5=BD=AC?= <14779346+xswl_123@user.noreply.gitee.com> Date: Mon, 4 Aug 2025 15:48:14 +0800 Subject: [PATCH 1/2] =?UTF-8?q?8-4=20=E5=95=86=E5=8A=A1=E8=B5=84=E6=96=99?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=B3=BB=E7=BB=9F=EF=BC=88ybb=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dite/znpt/domain/dto/FolderDto.java | 15 ++ .../domain/entity/BusinessDataEntity.java | 38 ++++ .../domain/entity/BusinessDataFileEntity.java | 37 ++++ .../znpt/domain/entity/ProjectEntity.java | 10 + .../com/dite/znpt/domain/page/PageBean.java | 16 ++ .../znpt/mapper/BusinessDataFileMapper.java | 20 ++ .../dite/znpt/mapper/BusinessDataMapper.java | 29 +++ .../znpt/service/BusinessDataFileService.java | 20 ++ .../znpt/service/BusinessDataService.java | 15 ++ .../impl/BusinessDataFileServiceImpl.java | 93 ++++++++ .../service/impl/BusinessDataServiceImpl.java | 202 ++++++++++++++++++ .../mapper/BusinessDataFileMapper.xml | 41 ++++ .../resources/mapper/BusinessDataMapper.xml | 47 ++++ .../controller/BusinessDataController.java | 58 +++++ .../BusinessDataFileController.java | 137 ++++++++++++ 15 files changed, 778 insertions(+) create mode 100644 core/src/main/java/com/dite/znpt/domain/dto/FolderDto.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/BusinessDataEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/BusinessDataFileEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/page/PageBean.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/BusinessDataFileMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/BusinessDataMapper.java create mode 100644 core/src/main/java/com/dite/znpt/service/BusinessDataFileService.java create mode 100644 core/src/main/java/com/dite/znpt/service/BusinessDataService.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/BusinessDataFileServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/BusinessDataServiceImpl.java create mode 100644 core/src/main/resources/mapper/BusinessDataFileMapper.xml create mode 100644 core/src/main/resources/mapper/BusinessDataMapper.xml create mode 100644 web/src/main/java/com/dite/znpt/web/controller/BusinessDataController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/BusinessDataFileController.java diff --git a/core/src/main/java/com/dite/znpt/domain/dto/FolderDto.java b/core/src/main/java/com/dite/znpt/domain/dto/FolderDto.java new file mode 100644 index 0000000..d4c5f8e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/dto/FolderDto.java @@ -0,0 +1,15 @@ +package com.dite.znpt.domain.dto; + +import io.swagger.annotations.ApiModel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ApiModel("接受文件夹参数") +public class FolderDto { + private String name = "tom"; + private Long parentId = 0L; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/BusinessDataEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/BusinessDataEntity.java new file mode 100644 index 0000000..4b88a8e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/BusinessDataEntity.java @@ -0,0 +1,38 @@ +package com.dite.znpt.domain.entity; + + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("business_data_part") +@ApiModel(value="商务资料文件夹对象") +@AllArgsConstructor +@NoArgsConstructor +public class BusinessDataEntity { + + // 主键 + private Long folderId = null; + // 文件夹名称 + private String folderName = null; + // 父级文件夹 + private Long parentId = null; + // 创建人 + private Long creatorId = null; + // 创建时间 + private LocalDateTime createTime = null; + // 更新时间 + private LocalDateTime updateTime = null; + // 是否删除 + private Boolean isDeleted = false; + // 文件夹路径 + private String folderPath = null; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/BusinessDataFileEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/BusinessDataFileEntity.java new file mode 100644 index 0000000..c9c589d --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/BusinessDataFileEntity.java @@ -0,0 +1,37 @@ +package com.dite.znpt.domain.entity; + + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("business_data_part_file") +@ApiModel(value="商务资料对象") + +public class BusinessDataFileEntity { + + //文件id + private Long fileId = null; + //文件夹id + private Long folderId = null; + //文件名 + private String fileName = null; + //文件路径 + private String filePath = null; + //文件类型 + private String fileType = "unknown"; + //文件大小 + private Long fileSize = null; + //上传时间 + private Date uploadTime = null; + //上传人id + private Long uploaderId = null; + //是否删除 + private Boolean isDeleted = false; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java index c044195..bb6acad 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java @@ -32,6 +32,16 @@ public class ProjectEntity extends AuditableEntity implements Serializable { @TableId(value = "project_id", type = IdType.ASSIGN_UUID) private String projectId; + @ExcelProperty("项目来源") + @ApiModelProperty("项目来源") + @TableField("project_origin") + private String projectOrigin; + + @ExcelProperty("项目预算") + @ApiModelProperty("项目预算") + @TableField("project_budget") + private Integer projectBudget; + @ExcelProperty("项目名称") @ApiModelProperty("项目名称") @TableField("project_name") diff --git a/core/src/main/java/com/dite/znpt/domain/page/PageBean.java b/core/src/main/java/com/dite/znpt/domain/page/PageBean.java new file mode 100644 index 0000000..e28d250 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/page/PageBean.java @@ -0,0 +1,16 @@ +package com.dite.znpt.domain.page; + +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PageBean { + private Long total; + private List rows; +} diff --git a/core/src/main/java/com/dite/znpt/mapper/BusinessDataFileMapper.java b/core/src/main/java/com/dite/znpt/mapper/BusinessDataFileMapper.java new file mode 100644 index 0000000..789e09d --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/BusinessDataFileMapper.java @@ -0,0 +1,20 @@ +package com.dite.znpt.mapper; + +import com.dite.znpt.domain.entity.BusinessDataFileEntity; +import com.dite.znpt.domain.entity.BusinessDataEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +@ApiOperation("商务资料文件对象") +public interface BusinessDataFileMapper { + public List List( @Param("folderId") Long folderId,String fileName); + void delete(@Param("fileId") Long fileId,@Param("folderId") Long folderId); + + void add(BusinessDataFileEntity businessDataFileEntity); + + String getPath(Long fileId); +} diff --git a/core/src/main/java/com/dite/znpt/mapper/BusinessDataMapper.java b/core/src/main/java/com/dite/znpt/mapper/BusinessDataMapper.java new file mode 100644 index 0000000..4211f26 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/BusinessDataMapper.java @@ -0,0 +1,29 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.injector.methods.SelectList; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.BusinessDataEntity; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import com.dite.znpt.domain.entity.BusinessDataEntity; + +import java.time.LocalDateTime; +import java.util.List; + + + + + +@ApiOperation("商务资料文件夹对象") +public interface BusinessDataMapper { + public String getPath(Long parentId); + + public List List(); + + void insert(BusinessDataEntity businessDataEntity); + + void delete(Long folderId); + + void reName(BusinessDataEntity businessDataEntity); +} diff --git a/core/src/main/java/com/dite/znpt/service/BusinessDataFileService.java b/core/src/main/java/com/dite/znpt/service/BusinessDataFileService.java new file mode 100644 index 0000000..ca09adb --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/BusinessDataFileService.java @@ -0,0 +1,20 @@ +package com.dite.znpt.service; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.BusinessDataFileEntity; +import com.dite.znpt.domain.page.PageBean; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.RequestParam; + +@ApiOperation("商务资料文件service") + +public interface BusinessDataFileService { + + PageBean pageSelect(Integer page, Integer pageSize, Long folderId); + + Result delete(@RequestParam(value = "fileId", required = false) Long fileId,@RequestParam(value = "foldelId", required = false) Long folderId); + + void add(BusinessDataFileEntity businessDataFileEntity); + + String getPath(Long fileId); +} diff --git a/core/src/main/java/com/dite/znpt/service/BusinessDataService.java b/core/src/main/java/com/dite/znpt/service/BusinessDataService.java new file mode 100644 index 0000000..3269bd5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/BusinessDataService.java @@ -0,0 +1,15 @@ +package com.dite.znpt.service; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.page.PageBean; +import io.swagger.annotations.ApiOperation; + +@ApiOperation("商务资料文件夹service") +public interface BusinessDataService { + + PageBean pageSelect(Integer page, Integer pageSize); + Result createFolder(String folderName, Long parentId); + String getPath(Long parentId); + Result delete(Long folderId); + Result reName(Long folderId, String newName); +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/BusinessDataFileServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/BusinessDataFileServiceImpl.java new file mode 100644 index 0000000..eac6aae --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/BusinessDataFileServiceImpl.java @@ -0,0 +1,93 @@ +package com.dite.znpt.service.impl; + + + +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.BusinessDataFileEntity; +import com.dite.znpt.domain.page.PageBean; +import com.dite.znpt.mapper.BusinessDataFileMapper; +import com.dite.znpt.service.BusinessDataFileService; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.File; +import java.io.IOException; +import java.util.List; + +import static jodd.io.FileUtil.deleteFile; +import static org.apache.tomcat.util.http.fileupload.FileUtils.deleteDirectory; + +@AllArgsConstructor +@Service +@ApiOperation("商务资料文件service实现类") +public class BusinessDataFileServiceImpl implements BusinessDataFileService { + @Resource + private BusinessDataFileMapper businessDataFileMapper; + + + @ApiOperation("分页查询文件") + public PageBean pageSelect(Integer page, Integer pageSize, Long folderId) { + PageHelper.startPage(page, pageSize); + List list = businessDataFileMapper.List(folderId ,""); + Page p= (Page) list; + PageBean pageBean = new PageBean(p.getTotal(),p.getResult()); + return pageBean; + } + @ApiOperation("删除文件") + public Result delete(Long fileId, Long folderId) { + //删除数据库数据 + if (folderId != null){ + businessDataFileMapper.delete(null,folderId); + System.out.println("888888888走对了"); + + return Result.okM("删除,走对了,成功"); + } + + //删除文件 + String sPath = businessDataFileMapper.getPath(fileId); + + businessDataFileMapper.delete(fileId,null); + + boolean flag = false; + File file = new File(sPath); + // 判断目录或文件是否存在 + if (!file.exists()) { // 不存在返回 false + return Result.error("文件不存在"); + } else { + // 判断是否为文件 + if (file.isFile()) { // 为文件时调用删除文件方法 + try { + deleteFile(file); + } catch (IOException e) { + throw new RuntimeException(e); + } + return Result.okM("删除成功"); + } else { // 为目录时调用删除目录方法 + try { + deleteDirectory(file); + } catch (IOException e) { + throw new RuntimeException(e); + } + return Result.okM("删除成功"); + } + } + + + } + + @ApiOperation("增加文件") + public void add(BusinessDataFileEntity businessDataFileEntity) { + businessDataFileMapper.add(businessDataFileEntity); + } + + @ApiOperation("获取文件路径") + public String getPath(Long fileId) { + System.out.println(fileId+" 77777777777impl777777777777777"); + return businessDataFileMapper.getPath(fileId); + } + +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/BusinessDataServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/BusinessDataServiceImpl.java new file mode 100644 index 0000000..862dc15 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/BusinessDataServiceImpl.java @@ -0,0 +1,202 @@ +package com.dite.znpt.service.impl; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.BusinessDataEntity; +import com.dite.znpt.domain.page.PageBean; +import com.dite.znpt.mapper.BusinessDataMapper; +import com.dite.znpt.service.BusinessDataFileService; +import com.dite.znpt.service.BusinessDataService; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.time.LocalDateTime; +import java.util.Comparator; +import java.util.List; + +/** + * 商务资料文件夹实现类 + */ +@Service +@ApiOperation("商务资料文件夹service实现类") +@AllArgsConstructor +@NoArgsConstructor +public class BusinessDataServiceImpl implements BusinessDataService { + @Resource + private BusinessDataMapper businessDataMapper; + @Resource + private BusinessDataFileService businessDataFileService; + + // 从配置文件中读取基础路径(默认值:D:/upload/businessData) + // ,新建文件夹的时候,如果没指定父文件夹Id,就用这个 + @Value("${file.upload.businessDataPath:D:/upload/businessData}") + private String businessDataPath; + + @ApiOperation(value = "分页查询") + @Override + public PageBean pageSelect(Integer page, Integer pageSize) { + // 分页查询,pageHelper.startPage()方法会返回一个Page对象,该对象包含了分页信息,如总记录数和当前页数据 + PageHelper.startPage(page, pageSize); + // 查询所有数据 + List businessDataEntityList = businessDataMapper.List(); + // 返回分页结果 + Page p = (Page) businessDataEntityList; + // 返回分页结果 + PageBean pageBean = new PageBean(p.getTotal(), p.getResult()); + + return pageBean; + } + + @ApiOperation(value = "创建文件夹") + @Override + public Result createFolder(String folderName, Long parentId) { + //获取ID + Long loginIdAsLong = 888L; +// loginIdAsLong = StpUtil.getLoginIdAsLong(); +// + // 文件夹名称不能为空 + //TODO: 添加文件夹名称校验,后续最好更规范些,写个工具类专门校验,用正则表达式 + if (folderName == null || folderName.trim().isEmpty()) { + return Result.error("文件夹名称不能为空"); + } + if (folderName.length() > 50) { + return Result.error("文件夹名称过长"); + } + + // 文件夹名称前置一个/ + String folderName1 = "/" + folderName; + // 目标文件夹 + File targetDir=Paths.get(businessDataPath, folderName1).toFile(); + if(parentId != 0L){ + // 获取父文件夹路径 + targetDir = Paths.get(businessDataMapper.getPath(parentId), folderName1).toFile(); + } + // 创建文件夹和新增文件夹路径 + if (!targetDir.exists()) { + // 创建文件夹 + boolean created = targetDir.mkdirs(); + if (!created) { + throw new RuntimeException("文件夹创建失败: " + targetDir.getAbsolutePath()); + } + //上面是新增文件夹功能,但没有往数据库插入文件夹相关数据,所以下面新增 + // 创建BusinessDataEntity对象并设置属性 + BusinessDataEntity businessDataEntity = new BusinessDataEntity( + null, + folderName, + parentId, + loginIdAsLong, + LocalDateTime.now(), + LocalDateTime.now(), + false, + targetDir.getAbsolutePath() + ); + // 插入到数据库 + businessDataMapper.insert(businessDataEntity); + return Result.okM( "文件夹创建成功"); + } else { + return Result.error("文件夹已存在: "); + } + } + + @ApiOperation("获取文件夹路径") + public String getPath(Long parentId) { + return businessDataMapper.getPath(parentId); + } + +// @ApiOperation("删除文件夹") +// @Override +// public Result delete(Long folderId) { +// // 获取文件夹路径 +// String folderPath = businessDataMapper.getPath(folderId); +// +// // 创建File对象并删除文件夹 +// File folder = new File(folderPath); +// if (folder.exists()) { +// boolean deleted = folder.delete(); +// if (!deleted) { +// // throw new RuntimeException("文件夹删除失败: " + folderPath); +// // TODO: 以后可以用全局异常处理器捕获,或者用try catch捕获 +// return Result.error("文件夹删除失败: " + folderPath); +// } +// //删除数据库中文件夹的数据 +// businessDataMapper.delete(folderId); +// //删除文件夹下文件的数据 +// businessDataFileService.delete(folderId); +// return Result.okM("删除成功"); +// } else { +// // throw new RuntimeException("文件夹不存在: " + folderPath); +// return Result.error("文件夹不存在: " + folderPath); +// } +// } + @ApiOperation("删除文件夹") + @Override + public Result delete(Long folderId) { + // 获取文件夹路径 + String folderPath = businessDataMapper.getPath(folderId); + + // 创建Path对象并删除文件夹 + Path folder = Paths.get(folderPath); + if (Files.exists(folder)) { + try { + // 使用Files.walk获取所有文件和目录,按深度排序后删除 + java.util.stream.Stream filePaths = Files.walk(folder); + filePaths.sorted(Comparator.reverseOrder()) + .map(Path::toFile) + .forEach(File::delete); + filePaths.close(); + + //删除数据库中文件夹的数据 + businessDataMapper.delete(folderId); + //删除文件夹下文件的数据 + businessDataFileService.delete(null , folderId); + return Result.okM("删除成功"); + } catch (Exception e) { + return Result.okM("删除成功"); + } + } else { + return Result.error("文件夹不存在: " + folderPath); + } + } + @ApiOperation("重命名文件夹") + @Override + public Result reName(Long folderId, String newName) { + // 获取文件夹路径 + String folderPath = businessDataMapper.getPath(folderId); + String newPath = folderPath.substring(0, folderPath.lastIndexOf('\\'))+"\\" + newName; + System.out.printf("7777777"+newPath); +// +// //想命名的原文件的路径 +// File file = new File("f:/a/a.xlsx"); +// //将原文件更改为f:\a\b.xlsx,其中路径是必要的。注意 +// file.renameTo(new File("f:/a/b.xlsx")); + //想命名的原文件夹的路径 + File file1 = new File(folderPath); + //将原文件夹更改为A,其中路径是必要的。注意 + file1.renameTo(new File(newPath)); + LocalDateTime now = LocalDateTime.now(); + + BusinessDataEntity businessDataEntity = new BusinessDataEntity( + folderId, + newName, + null, + null, + null, + now, + null, + newPath + ); + System.out.println(businessDataEntity); + businessDataMapper.reName(businessDataEntity); + return Result.okM("重命名成功"); + } + +} diff --git a/core/src/main/resources/mapper/BusinessDataFileMapper.xml b/core/src/main/resources/mapper/BusinessDataFileMapper.xml new file mode 100644 index 0000000..9e15fff --- /dev/null +++ b/core/src/main/resources/mapper/BusinessDataFileMapper.xml @@ -0,0 +1,41 @@ + + + + + + delete from business_data_part_file + + + and file_id = #{fileId} + + + and folder_id = #{folderId} + + + + + + + insert into business_data_part_file (file_id, folder_id, file_name, file_path, file_type, file_size, upload_time, uploader_id, is_deleted) + values (#{fileId}, #{folderId}, #{fileName}, #{filePath}, #{fileType}, #{fileSize}, #{uploadTime}, #{uploaderId}, #{isDeleted}) + + + + diff --git a/core/src/main/resources/mapper/BusinessDataMapper.xml b/core/src/main/resources/mapper/BusinessDataMapper.xml new file mode 100644 index 0000000..bd57aa7 --- /dev/null +++ b/core/src/main/resources/mapper/BusinessDataMapper.xml @@ -0,0 +1,47 @@ + + + + + insert into business_data_part + + folder_name, + parent_id, + creator_id, + create_time, + update_time, + is_deleted, + folder_path, + + + #{folderName}, + #{parentId}, + #{creatorId}, + #{createTime}, + #{updateTime}, + #{isDeleted}, + #{folderPath}, + + + + + + + + + delete from business_data_part where folder_id = #{folderId} + + + update business_data_part + + folder_name = #{folderName}, + update_time = #{updateTime}, + folder_path = #{folderPath}, + + where folder_id = #{folderId} + + + diff --git a/web/src/main/java/com/dite/znpt/web/controller/BusinessDataController.java b/web/src/main/java/com/dite/znpt/web/controller/BusinessDataController.java new file mode 100644 index 0000000..868f3cc --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/BusinessDataController.java @@ -0,0 +1,58 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.dto.FolderDto; +import com.dite.znpt.domain.page.PageBean; +import com.dite.znpt.service.BusinessDataService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; + +/* + * @Description: 商务资料管理,文件夹层 + * 虽然文件夹本质也是文件,但我们页面上很多地方,光查文件信息,根据文件夹ID + * 获取文件列表,如果文件夹和文件都放一张表,不好区分,接口也不好区分,这样分开写方便 + */ +@Api(tags = "文件夹接口") +@RestController +@Slf4j +@RequestMapping("/businessData/folder") +@ApiOperation("商务资料管理,文件夹contrller层") +public class BusinessDataController { + @Resource + private BusinessDataService businessDataService; + + @ApiOperation(value = "分页查询文件夹", httpMethod = "GET") + @GetMapping("/list") + public Result pageSelect(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer pageSize){ + + PageBean pageBean = businessDataService.pageSelect(page, pageSize); + + return Result.ok(pageBean); + } + + @ApiOperation(value = "增加文件夹", httpMethod = "POST") + @PostMapping("/creatFolder") + public Result createFolder(@RequestBody FolderDto folderDto) { + return businessDataService.createFolder(folderDto.getName(), folderDto.getParentId()); + } + + @ApiOperation(value = "删除文件夹", httpMethod = "DELETE") + @DeleteMapping("/delete") + public Result delete(@RequestParam Long folderId) { + + return businessDataService.delete(folderId); + } + + + @ApiOperation(value = "重命名文件夹", httpMethod = "PUT") + @PutMapping("/rename") + public Result Rename(@RequestParam Long folderId, @RequestParam String newName) { + + return businessDataService.reName(folderId, newName); + } + +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/BusinessDataFileController.java b/web/src/main/java/com/dite/znpt/web/controller/BusinessDataFileController.java new file mode 100644 index 0000000..8606122 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/BusinessDataFileController.java @@ -0,0 +1,137 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.BusinessDataFileEntity; +import com.dite.znpt.domain.page.PageBean; +import com.dite.znpt.mapper.BusinessDataFileMapper; +import com.dite.znpt.mapper.BusinessDataMapper; +import com.dite.znpt.service.BusinessDataFileService; +import com.dite.znpt.service.BusinessDataService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; +import java.util.UUID; + +import com.dite.znpt.domain.entity.BusinessDataFileEntity; +import org.springframework.web.multipart.MultipartFile; + +/* + * @Description: 商务资料管理,文件夹层 + */ + +@Api(tags = "文件接口") +@RestController +@Slf4j +@RequestMapping("/businessData/file") +@ApiOperation("商务资料管理,文件层") +public class BusinessDataFileController { + @Resource + private BusinessDataFileService businessDataFileService; + @Resource + private BusinessDataService businessDataService; + @Resource + private BusinessDataFileMapper businessDataFileMapper; + + @ApiOperation(value = "分页查询文件", httpMethod = "GET") + @GetMapping("/list") + public Result pageSelect(@RequestParam(defaultValue = "1") Integer page, + @RequestParam(defaultValue = "10") Integer pageSize, + @RequestParam(defaultValue = "0") Long folderId) { + PageBean pageBean = businessDataFileService.pageSelect(page, pageSize, folderId); + return Result.ok(pageBean); + } + + @ApiOperation(value = "增加文件") + @PostMapping("/add") + public Result add(@RequestParam("file") MultipartFile file, + @RequestParam Long folderId) { + System.out.println(file+" 77777777777777777777777777"+folderId); + + if (file.isEmpty()) { + return Result.error("上传文件为空"); + } + //TODO 以后可以优化,就算文件名一样,加个(1),(2)这种 + + try { + byte[] bytes = file.getBytes(); + String uploadDir = businessDataService.getPath(folderId); + + File uploadedFile = new File(uploadDir + "\\" + file.getOriginalFilename()); + if(uploadedFile.exists()){ + return Result.error("文件已存在"); + } + file.transferTo(uploadedFile); + + //保存文件信息到数据 + BusinessDataFileEntity fileEntity = new BusinessDataFileEntity(); + fileEntity.setFolderId(folderId); + fileEntity.setFileName(file.getOriginalFilename()); + fileEntity.setFilePath(uploadDir+"\\"+file.getOriginalFilename()); + fileEntity.setFileType(file.getContentType()); + fileEntity.setFileSize(file.getSize()); + fileEntity.setUploadTime(new Date() ); + fileEntity.setUploaderId(0L); + System.out.println(uploadDir+"\\"+file.getOriginalFilename()); + businessDataFileService.add(fileEntity); + + return Result.okM("上传成功"); + } catch (IOException e) { + e.printStackTrace(); + return Result.error("上传失败"); + } + } + + @ApiOperation(value = "删除文件") + @DeleteMapping("/delete") + public Result delete(@RequestParam Long fileId) { + businessDataFileService.delete(fileId,null); + return Result.okM("删除成功"); + } + @ApiOperation(value = "下载文件") + @GetMapping("/download") + public void download(@RequestParam("fileId") Long fileId , HttpServletResponse response) { + String path = businessDataFileService.getPath(fileId); + try { + // path是指想要下载的文件的路径 + File file = new File(path); + log.info(file.getPath()); + // 获取文件名 + String filename = file.getName(); + // 获取文件后缀名 + String ext = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase(); + log.info("文件后缀名:" + ext); + + // 将文件写入输入流 + FileInputStream fileInputStream = new FileInputStream(file); + InputStream fis = new BufferedInputStream(fileInputStream); + byte[] buffer = new byte[fis.available()]; + fis.read(buffer); + fis.close(); + + // 清空response + response.reset(); + // 设置response的Header + response.setCharacterEncoding("UTF-8"); + response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); + // 告知浏览器文件的大小 + response.addHeader("Content-Length", "" + file.length()); + OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); + response.setContentType("application/octet-stream"); + outputStream.write(buffer); + outputStream.flush(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + + +} From 14428ca9aef6804dabaa553703b8b9fe664f4f6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=9D=E5=BD=AC?= <14779346+xswl_123@user.noreply.gitee.com> Date: Mon, 4 Aug 2025 16:02:39 +0800 Subject: [PATCH 2/2] =?UTF-8?q?8-4=20=E9=A1=B9=E7=9B=AE=E4=B8=8E=E5=90=88?= =?UTF-8?q?=E5=90=8C=E5=85=B3=E8=81=94=E3=80=81=E9=A1=B9=E7=9B=AE=E9=A2=84?= =?UTF-8?q?=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dite/znpt/converts/Impl/ConvertsImpl.java | 5 +++++ .../dite/znpt/domain/vo/ProjectListReq.java | 6 ++++++ .../dite/znpt/domain/vo/ProjectListResp.java | 6 ++++++ .../com/dite/znpt/domain/vo/ProjectReq.java | 8 ++++++++ .../com/dite/znpt/domain/vo/ProjectResp.java | 9 +++++++++ .../main/resources/mapper/ProjectMapper.xml | 18 +++++++++--------- 6 files changed, 43 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/com/dite/znpt/converts/Impl/ConvertsImpl.java b/core/src/main/java/com/dite/znpt/converts/Impl/ConvertsImpl.java index 6b8bcf7..0156ed3 100644 --- a/core/src/main/java/com/dite/znpt/converts/Impl/ConvertsImpl.java +++ b/core/src/main/java/com/dite/znpt/converts/Impl/ConvertsImpl.java @@ -232,6 +232,9 @@ public class ConvertsImpl implements Converts { projectResp.setAuditorId( entity.getAuditorId() ); projectResp.setQualityOfficerId( entity.getQualityOfficerId() ); projectResp.setProjectManagerId( entity.getProjectManagerId() ); + projectResp.setProjectOrigin( entity.getProjectOrigin() ); + projectResp.setProjectBudget( entity.getProjectBudget() ); + if ( entity.getStatus() != null ) { projectResp.setStatus( entity.getStatus() ); } @@ -270,6 +273,8 @@ public class ConvertsImpl implements Converts { projectEntity.setStatus( req.getStatus() ); projectEntity.setStartDate( req.getStartDate() ); projectEntity.setEndDate( req.getEndDate() ); + projectEntity.setProjectOrigin( req.getProjectOrigin() ); + projectEntity.setProjectBudget( req.getProjectBudget() ); return projectEntity; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectListReq.java index a285e33..9ba2992 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectListReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectListReq.java @@ -23,6 +23,12 @@ public class ProjectListReq implements Serializable { @ApiModelProperty("项目名称") private String projectName; + @ApiModelProperty(value = "项目来源") + private String projectOrigin; + + @ApiModelProperty(value = "项目预算") + private Integer projectBudget; + @ApiModelProperty("风场名称") private String farmName; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java index f0578ef..cd29090 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java @@ -31,6 +31,12 @@ public class ProjectListResp implements Serializable { @ApiModelProperty("项目名称") private String projectName; + @ApiModelProperty(value = "项目来源") + private String projectOrigin; + + @ApiModelProperty(value = "项目预算") + private Integer projectBudget; + @ApiModelProperty("风场名称") private String farmName; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java index 501ac49..fdd2304 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java @@ -28,6 +28,14 @@ public class ProjectReq implements Serializable { @ApiModelProperty("项目id") private String projectId; + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目来源不能为空") + @ApiModelProperty("项目来源") + private String projectOrigin; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目预算不能为空") + @ApiModelProperty("项目预算") + private Integer projectBudget; + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目名称不能为空") @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "项目名称长度不能超过50字符") @ApiModelProperty("项目名称") diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectResp.java index 826a0f5..055af72 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectResp.java @@ -27,6 +27,15 @@ public class ProjectResp extends ProjectReq implements Serializable { @Serial private static final long serialVersionUID = -1883901559600186726L; + @ApiModelProperty("项目ID") + private String projectId; + + @ApiModelProperty("项目来源") + private String projectOrigin; + + @ApiModelProperty("项目预算") + private Integer projectBudget; + @ApiModelProperty("施工人员") private String constructorName; diff --git a/core/src/main/resources/mapper/ProjectMapper.xml b/core/src/main/resources/mapper/ProjectMapper.xml index 25aabf1..636db3f 100644 --- a/core/src/main/resources/mapper/ProjectMapper.xml +++ b/core/src/main/resources/mapper/ProjectMapper.xml @@ -3,17 +3,17 @@