Browse Source

moonshotAi关联附件上传功能调整

zjc 9 months ago
parent
commit
23db2375a4

+ 88 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/moonshot/MoonshotFileController.java

@@ -0,0 +1,88 @@
+package com.ruoyi.web.controller.moonshot;
+
+
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.FileType;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.file.FileUtils;
+import com.ruoyi.common.utils.moonshot.Client;
+import com.ruoyi.common.utils.moonshot.vo.FileUploadResult;
+import com.ruoyi.framework.config.ServerConfig;
+import com.ruoyi.tool.domain.TUnifyFile;
+import com.ruoyi.tool.service.ITUnifyFileService;
+import com.ruoyi.web.controller.common.CommonController;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+@RestController
+@RequestMapping("/moonshot/file")
+public class MoonshotFileController extends BaseController {
+
+    private static final Logger log = LoggerFactory.getLogger(CommonController.class);
+
+    @Autowired
+    private ServerConfig serverConfig;
+
+    @Autowired
+    private ITUnifyFileService tUnifyFileService;
+
+    @Value("${moonshot.api_key}")
+    private String API_KEY;
+
+    /**
+     * 通用上传请求(单个)
+     */
+    @PostMapping("/upload")
+    public AjaxResult uploadFile(MultipartFile file) throws Exception
+    {
+        AjaxResult ajax = AjaxResult.success();
+        try
+        {
+            if (API_KEY == null) {
+                System.out.println("Please set MOONSHOT_API_KEY env");
+                ajax.put("API_KEY","接口API_KEY不存在");
+                return ajax;
+            }
+            Client client = new Client(API_KEY);
+
+            FileUploadResult resuat = client.uploadFile(file);
+
+            // 上传文件路径
+            String filePath = RuoYiConfig.getUploadPath();
+            // 上传并返回新文件名称
+            String fileName = FileUploadUtils.upload(filePath, file);
+            String url = serverConfig.getUrl() + fileName;
+            TUnifyFile tUnifyFile = new TUnifyFile();
+            tUnifyFile.setUploadPath(url);
+            tUnifyFile.setUploadName(fileName);
+            tUnifyFile.setNewUploadName(FileUtils.getName(fileName));
+            tUnifyFile.setUploadFormat(file.getOriginalFilename());
+            tUnifyFile.setUploadType(String.valueOf(FileType.RESUME.ordinal()));//简历附件
+            tUnifyFile.setCreateBy(getNickName());
+
+            //moonshot AI 附件上传返回附件信息
+
+
+
+
+            tUnifyFileService.insertTUnifyFile(tUnifyFile);
+
+            ajax.put("FileUploadResult", resuat);
+            return ajax;
+        }
+        catch (Exception e)
+        {
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+
+
+}

+ 208 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TUnifyFileController.java

@@ -0,0 +1,208 @@
+package com.ruoyi.web.controller.tool;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.FileType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.file.FileUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.config.ServerConfig;
+import com.ruoyi.tool.domain.TUnifyFile;
+import com.ruoyi.tool.service.ITUnifyFileService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.List;
+
+/**
+ * 附件Controller
+ * 
+ * @author ruoyi
+ * @date 2024-02-23
+ */
+@Api(tags = "附件管理")
+@RestController
+@RequestMapping("/system/file")
+public class TUnifyFileController extends BaseController
+{
+    private static final Logger log = LoggerFactory.getLogger(TUnifyFileController.class);
+
+    @Autowired
+    private ITUnifyFileService tUnifyFileService;
+
+    @Autowired
+    private ServerConfig serverConfig;
+
+    /**
+     * 查询附件列表
+     */
+    @ApiOperation("查询附件列表")
+    @GetMapping("/list")
+    public TableDataInfo list(TUnifyFile tUnifyFile)
+    {
+        startPage();
+        List<TUnifyFile> list = tUnifyFileService.selectTUnifyFileList(tUnifyFile);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出附件列表
+     */
+    @ApiOperation("导出附件列表")
+    @Log(title = "附件", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TUnifyFile tUnifyFile)
+    {
+        List<TUnifyFile> list = tUnifyFileService.selectTUnifyFileList(tUnifyFile);
+        ExcelUtil<TUnifyFile> util = new ExcelUtil<TUnifyFile>(TUnifyFile.class);
+        util.exportExcel(response, list, "附件数据");
+    }
+
+    /**
+     * 获取附件详细信息
+     */
+    @ApiOperation("获取附件详细信息")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(tUnifyFileService.selectTUnifyFileById(id));
+    }
+
+    /**
+     * 新增附件
+     */
+    @ApiOperation("新增附件")
+    @Log(title = "附件", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TUnifyFile tUnifyFile)
+    {
+        tUnifyFile.setCreateBy(getNickName());
+        return toAjax(tUnifyFileService.insertTUnifyFile(tUnifyFile));
+    }
+
+    /**
+     * 修改附件
+     */
+    @ApiOperation("修改附件")
+    @Log(title = "附件", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TUnifyFile tUnifyFile)
+    {
+        return toAjax(tUnifyFileService.updateTUnifyFile(tUnifyFile));
+    }
+
+    /**
+     * 删除附件
+     */
+    @ApiOperation("删除附件")
+    @Log(title = "附件", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(tUnifyFileService.updateTUnifyFileByIds(ids));
+    }
+
+    /**
+     * 上传附件
+     */
+    @ApiOperation("上传附件")
+    @Log(title = "附件", businessType = BusinessType.INSERT)
+    @PostMapping("/uploads")
+    public AjaxResult uploadFiles(List<MultipartFile> files)
+    {
+        try
+        {
+            // 上传文件路径
+            String filePath = RuoYiConfig.getUploadPath();
+            for (MultipartFile file : files)
+            {
+                // 上传并返回新文件名称
+                String fileName = FileUploadUtils.upload(filePath, file);
+                String url = serverConfig.getUrl() + fileName;
+                TUnifyFile tUnifyFile = new TUnifyFile();
+                tUnifyFile.setUploadPath(url);
+                tUnifyFile.setUploadName(fileName);
+                tUnifyFile.setNewUploadName(FileUtils.getName(fileName));
+                tUnifyFile.setUploadFormat(file.getOriginalFilename());
+                tUnifyFile.setUploadType(String.valueOf(FileType.OTHER.ordinal()));//其他
+                tUnifyFile.setCreateBy(getNickName());
+                tUnifyFileService.insertTUnifyFile(tUnifyFile);
+            }
+            return  AjaxResult.success();
+        }
+        catch (Exception e)
+        {
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+
+    @ApiOperation("下载")
+    @GetMapping("/download/{id}")
+    public void fileDownload(@PathVariable("id")String id, HttpServletResponse response, HttpServletRequest request){
+        try
+        {
+            TUnifyFile tUnifyFile = tUnifyFileService.selectTUnifyFileById(id);
+
+            String fileName = tUnifyFile.getNewUploadName();
+            if (!FileUtils.checkAllowDownload(tUnifyFile.getNewUploadName()))
+            {
+                throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ",fileName));
+            }
+            // todo 下载文件名
+            String realFileName = System.currentTimeMillis() + fileName.substring(0,fileName.indexOf("_")) + "." + tUnifyFile.getUploadFormat();
+            // todo 下载地址
+            String filePath = RuoYiConfig.getDownloadPath() + realFileName;
+            // todo 根据原文件逻辑拷贝到下载路径
+            String origFile = RuoYiConfig.getProfile() + tUnifyFile.getUploadName();
+            // todo 文件拷贝至下载地址
+            Files.copy(Paths.get(origFile),Paths.get(filePath), StandardCopyOption.REPLACE_EXISTING);
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, realFileName);
+            FileUtils.writeBytes(filePath, response.getOutputStream());
+            // todo 删除拷贝文件
+            FileUtils.deleteFile(filePath);
+        }
+        catch (Exception e)
+        {
+            log.error("下载文件失败", e);
+        }
+    }
+
+
+    /**
+     * 根据附件业务ID()获取附件详情信息列表
+     */
+    @ApiOperation("根据附件业务ID()获取附件详情信息列表")
+    @GetMapping("/listFileBusinessId")
+    public AjaxResult listFileBusinessId(String fileBusinessId,String uploadType)
+    {
+        return success(tUnifyFileService.selectTUnifyFileByBusinessIdList(fileBusinessId,uploadType));
+    }
+
+    /**
+     * 根据fileId()获取项目中所有附件列表
+     */
+    @ApiOperation("根据fileId()获取项目中所有附件列表")
+    @GetMapping("/listFileId")
+    public AjaxResult listFileId(String fileId)
+    {
+        return success(tUnifyFileService.listFileId(fileId));
+    }
+
+}

+ 4 - 0
ruoyi-admin/src/main/resources/application.yml

@@ -149,3 +149,7 @@ dingtalk:
   corp_id: ding870ccf3c4d8fc1bc
   sso_secret: 123
 
+# moonshot
+moonshot:
+  # 月之暗面接口标识API_KEY
+  api_key: sk-6RRz9mTfCnit49IQwpxs3oa2JHqfOVuQvWDy3HauX2CExvwg

+ 9 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java

@@ -199,4 +199,13 @@ public class BaseController
     {
         return getLoginUser().getUsername();
     }
+
+    /**
+     * 获取用户名昵称
+     */
+    public String getNickName()
+    {
+        return getLoginUser().getUser().getNickName();
+    }
+
 }

+ 17 - 0
ruoyi-common/src/main/java/com/ruoyi/common/enums/FileType.java

@@ -0,0 +1,17 @@
+package com.ruoyi.common.enums;
+
+/**
+ * 文件附件类型[t_unify_file.upload_type]
+ * todo 添加枚举类型时,请依次在末尾增加枚举
+ * todo ordinal()使用方式注
+ */
+public enum FileType {
+    /**
+     * 其他
+     */
+    OTHER,
+    /**
+     * 简历附件
+     */
+    RESUME,
+}

+ 37 - 33
ruoyi-common/src/main/java/com/ruoyi/common/utils/moonshot/MoonshotDemoMain.java

@@ -23,10 +23,14 @@ public class MoonshotDemoMain {
         }
         Client client = new Client(apiKey);
 
-        File file = new File("/D:/szty/695b2905-dda7-4e7d-b321-641ea3b06c74.pdf");
+        File file = new File("/D:/szty/test.pdf");
         FileUploadResult resuat = client.uploadFile(file);
+        System.out.println(resuat.getError());
+        if(null != resuat.getError()){
 
-        if(resuat.getStatus().equals("ok")) {
+
+
+        }else if(resuat.getStatus().equals("ok")) {
             String fileId = resuat.getId();
 
             String fileContent = MoonshotAiUtils.getFileContent(fileId,client.getApiKey());
@@ -57,37 +61,37 @@ public class MoonshotDemoMain {
 //            e.printStackTrace();
 //        }
 
-            try {
-                client.ChatCompletionStream(new ChatCompletionRequest(
-                        "moonshot-v1-32k",
-                        messages,
-                        1024,
-                        0.3f,
-                        1
-                )).subscribe(
-                        streamResponse -> {
-                            if (streamResponse.getChoices().isEmpty()) {
-                                return;
-                            }
-                            for (ChatCompletionStreamChoice choice : streamResponse.getChoices()) {
-                                String finishReason = choice.getFinishReason();
-                                if (finishReason != null) {
-                                    System.out.print("finish reason: " + finishReason);
-                                    continue;
-                                }
-                                System.out.print(choice.getDelta().getContent());
-                            }
-                        },
-                        error -> {
-                            error.printStackTrace();
-                        },
-                        () -> {
-                            System.out.println("complete");
-                        }
-                );
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
+//            try {
+//                client.ChatCompletionStream(new ChatCompletionRequest(
+//                        "moonshot-v1-32k",
+//                        messages,
+//                        1024,
+//                        0.3f,
+//                        1
+//                )).subscribe(
+//                        streamResponse -> {
+//                            if (streamResponse.getChoices().isEmpty()) {
+//                                return;
+//                            }
+//                            for (ChatCompletionStreamChoice choice : streamResponse.getChoices()) {
+//                                String finishReason = choice.getFinishReason();
+//                                if (finishReason != null) {
+//                                    System.out.print("finish reason: " + finishReason);
+//                                    continue;
+//                                }
+//                                System.out.print(choice.getDelta().getContent());
+//                            }
+//                        },
+//                        error -> {
+//                            error.printStackTrace();
+//                        },
+//                        () -> {
+//                            System.out.println("complete");
+//                        }
+//                );
+//            } catch (Exception e) {
+//                e.printStackTrace();
+//            }
         }
     }
 

+ 14 - 3
ruoyi-common/src/main/java/com/ruoyi/common/utils/moonshot/vo/FileUploadResult.java

@@ -1,8 +1,11 @@
 package com.ruoyi.common.utils.moonshot.vo;
 
+import lombok.Data;
+
+@Data
 public class FileUploadResult {
 
-    private String error;
+    private ErrorResponse error;
 
     private String id;
 
@@ -20,11 +23,11 @@ public class FileUploadResult {
 
     private String status_details;
 
-    public String getError() {
+    public ErrorResponse getError() {
         return error;
     }
 
-    public void setError(String error) {
+    public void setError(ErrorResponse error) {
         this.error = error;
     }
 
@@ -91,4 +94,12 @@ public class FileUploadResult {
     public void setStatus_details(String status_details) {
         this.status_details = status_details;
     }
+
+    @Data
+    public class ErrorResponse {
+        private String message;
+        private String type;
+    }
+
+
 }

+ 152 - 0
ruoyi-system/src/main/java/com/ruoyi/tool/domain/TUnifyFile.java

@@ -0,0 +1,152 @@
+package com.ruoyi.tool.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 附件对象 t_unify_file
+ * 
+ * @author ruoyi
+ * @date 2024-02-23
+ */
+public class TUnifyFile extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    private String id;
+
+    /** 文件ID */
+    @Excel(name = "文件ID")
+    private String fileId;
+
+    /** 文件名称 */
+    @Excel(name = "文件名称")
+    private String uploadName;
+
+    /** 文件类别 */
+    @Excel(name = "文件类别")
+    private String uploadType;
+
+    /** 文件地址 */
+    @Excel(name = "文件地址")
+    private String uploadPath;
+
+    /** 文件格式 */
+    @Excel(name = "文件格式")
+    private String uploadFormat;
+
+    /** 新文件名称 */
+    @Excel(name = "新文件名称")
+    private String newUploadName;
+
+    /** 状态 */
+    private String delFlag;
+
+    /** 附件业务ID */
+    @Excel(name = "附件业务ID")
+    private String fileBusinessId;
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setFileId(String fileId) 
+    {
+        this.fileId = fileId;
+    }
+
+    public String getFileId() 
+    {
+        return fileId;
+    }
+    public void setUploadName(String uploadName) 
+    {
+        this.uploadName = uploadName;
+    }
+
+    public String getUploadName() 
+    {
+        return uploadName;
+    }
+    public void setUploadType(String uploadType) 
+    {
+        this.uploadType = uploadType;
+    }
+
+    public String getUploadType() 
+    {
+        return uploadType;
+    }
+    public void setUploadPath(String uploadPath) 
+    {
+        this.uploadPath = uploadPath;
+    }
+
+    public String getUploadPath() 
+    {
+        return uploadPath;
+    }
+    public void setUploadFormat(String uploadFormat) 
+    {
+        this.uploadFormat = uploadFormat;
+    }
+
+    public String getUploadFormat() 
+    {
+        return uploadFormat;
+    }
+    public void setNewUploadName(String newUploadName) 
+    {
+        this.newUploadName = newUploadName;
+    }
+
+    public String getNewUploadName() 
+    {
+        return newUploadName;
+    }
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+    public void setFileBusinessId(String fileBusinessId) 
+    {
+        this.fileBusinessId = fileBusinessId;
+    }
+
+    public String getFileBusinessId() 
+    {
+        return fileBusinessId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("fileId", getFileId())
+            .append("uploadName", getUploadName())
+            .append("uploadType", getUploadType())
+            .append("uploadPath", getUploadPath())
+            .append("uploadFormat", getUploadFormat())
+            .append("newUploadName", getNewUploadName())
+            .append("delFlag", getDelFlag())
+            .append("fileBusinessId", getFileBusinessId())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 93 - 0
ruoyi-system/src/main/java/com/ruoyi/tool/mapper/TUnifyFileMapper.java

@@ -0,0 +1,93 @@
+    package com.ruoyi.tool.mapper;
+
+import com.ruoyi.tool.domain.TUnifyFile;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 附件Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2024-02-23
+ */
+public interface TUnifyFileMapper 
+{
+    /**
+     * 查询附件
+     * 
+     * @param id 附件主键
+     * @return 附件
+     */
+    public TUnifyFile selectTUnifyFileById(String id);
+
+    /**
+     * 查询附件列表
+     * 
+     * @param tUnifyFile 附件
+     * @return 附件集合
+     */
+    public List<TUnifyFile> selectTUnifyFileList(TUnifyFile tUnifyFile);
+
+    /**
+     * 新增附件
+     * 
+     * @param tUnifyFile 附件
+     * @return 结果
+     */
+    public int insertTUnifyFile(TUnifyFile tUnifyFile);
+
+    /**
+     * 修改附件
+     * 
+     * @param tUnifyFile 附件
+     * @return 结果
+     */
+    public int updateTUnifyFile(TUnifyFile tUnifyFile);
+
+    /**
+     * 删除附件
+     * 
+     * @param id 附件主键
+     * @return 结果
+     */
+    public int deleteTUnifyFileById(String id);
+
+    /**
+     * 批量删除附件
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTUnifyFileByIds(String[] ids);
+
+    /**
+     * 批量删除附件 (修改del_flag状态)
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int updateTUnifyFileByIds(String[] ids);
+
+    /**
+     * 根据附件业务ID()获取附件详情信息列表
+     * @param fileBusinessId
+     * @return
+     */
+    public List<TUnifyFile> selectTUnifyFileByBusinessIdList(@Param("fileBusinessId")String fileBusinessId,@Param("uploadType")String uploadType);
+
+    /**
+     * 根据fileId()获取项目中所有附件列表
+     * @param fileId
+     * @return
+     */
+    List<TUnifyFile> listFileId(@Param("fileId")String fileId);
+
+    /**
+     * 批量删除附件
+     *
+     * @param fileBusinessIds
+     * @return
+     */
+    int updateTUnifyFileBusinessIds(String[] fileBusinessIds);
+}

+ 105 - 0
ruoyi-system/src/main/java/com/ruoyi/tool/service/ITUnifyFileService.java

@@ -0,0 +1,105 @@
+package com.ruoyi.tool.service;
+
+import com.ruoyi.tool.domain.TUnifyFile;
+
+import java.util.List;
+
+/**
+ * 附件Service接口
+ * 
+ * @author ruoyi
+ * @date 2024-02-23
+ */
+public interface ITUnifyFileService 
+{
+    /**
+     * 查询附件
+     * 
+     * @param id 附件主键
+     * @return 附件
+     */
+    public TUnifyFile selectTUnifyFileById(String id);
+
+    /**
+     * 查询附件列表
+     * 
+     * @param tUnifyFile 附件
+     * @return 附件集合
+     */
+    public List<TUnifyFile> selectTUnifyFileList(TUnifyFile tUnifyFile);
+
+    /**
+     * 新增附件
+     * 
+     * @param tUnifyFile 附件
+     * @return 结果
+     */
+    public int insertTUnifyFile(TUnifyFile tUnifyFile);
+
+    /**
+     * 批量新增关联附件
+     * @param tUnifyFileList
+     * @param fileId
+     * @param fileBusinessId
+     * @param uploadType
+     * @param createBy
+     * @return
+     */
+    public void insertTUnifyFileList(List<TUnifyFile> tUnifyFileList,String fileId,String fileBusinessId,String uploadType,String createBy);
+
+    /**
+     * 修改附件
+     * 
+     * @param tUnifyFile 附件
+     * @return 结果
+     */
+    public int updateTUnifyFile(TUnifyFile tUnifyFile);
+
+    /**
+     * 批量删除附件
+     * 
+     * @param ids 需要删除的附件主键集合
+     * @return 结果
+     */
+    public int deleteTUnifyFileByIds(String[] ids);
+
+    /**
+     * 删除附件信息
+     * 
+     * @param id 附件主键
+     * @return 结果
+     */
+    public int deleteTUnifyFileById(String id);
+
+    /**
+     * 批量删除附件
+     *
+     * @param ids
+     * @return
+     */
+    public int updateTUnifyFileByIds(String[] ids);
+
+    /**
+     * 批量删除附件
+     *
+     * @param fileBusinessIds
+     * @return
+     */
+    public int updateTUnifyFileBusinessIds(String[] fileBusinessIds);
+
+    /**
+     * 根据附件业务ID()获取附件详情信息列表
+     *
+     * @param fileBusinessId
+     * @param uploadType
+     * @return
+     */
+    public List<TUnifyFile> selectTUnifyFileByBusinessIdList(String fileBusinessId,String uploadType);
+
+    /**
+     * 根据fileId()获取项目中所有附件列表
+     * @param fileId
+     * @return
+     */
+    List<TUnifyFile> listFileId(String fileId);
+}

+ 168 - 0
ruoyi-system/src/main/java/com/ruoyi/tool/service/impl/TUnifyFileServiceImpl.java

@@ -0,0 +1,168 @@
+package com.ruoyi.tool.service.impl;
+
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.tool.domain.TUnifyFile;
+import com.ruoyi.tool.mapper.TUnifyFileMapper;
+import com.ruoyi.tool.service.ITUnifyFileService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 附件Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2024-02-23
+ */
+@Service
+public class TUnifyFileServiceImpl implements ITUnifyFileService 
+{
+    @Autowired
+    private TUnifyFileMapper tUnifyFileMapper;
+
+    /**
+     * 查询附件
+     * 
+     * @param id 附件主键
+     * @return 附件
+     */
+    @Override
+    public TUnifyFile selectTUnifyFileById(String id)
+    {
+        return tUnifyFileMapper.selectTUnifyFileById(id);
+    }
+
+    /**
+     * 查询附件列表
+     * 
+     * @param tUnifyFile 附件
+     * @return 附件
+     */
+    @Override
+    public List<TUnifyFile> selectTUnifyFileList(TUnifyFile tUnifyFile)
+    {
+        return tUnifyFileMapper.selectTUnifyFileList(tUnifyFile);
+    }
+
+    /**
+     * 新增附件
+     * 
+     * @param tUnifyFile 附件
+     * @return 结果
+     */
+    @Override
+    public int insertTUnifyFile(TUnifyFile tUnifyFile)
+    {
+        tUnifyFile.setCreateTime(DateUtils.getNowDate());
+        tUnifyFile.setId(IdUtils.fastSimpleUUID());
+        return tUnifyFileMapper.insertTUnifyFile(tUnifyFile);
+    }
+
+    /**
+     * 批量新增关联附件
+     * @param tUnifyFileList
+     * @param fileId
+     * @param fileBusinessId
+     * @param uploadType
+     * @param createBy
+     * @return
+     */
+    @Override
+    public void insertTUnifyFileList(List<TUnifyFile> tUnifyFileList, String fileId, String fileBusinessId, String uploadType, String createBy) {
+        if(null != tUnifyFileList && !tUnifyFileList.isEmpty()){
+            for (TUnifyFile tUnifyFile:
+                    tUnifyFileList) {
+                if(tUnifyFile.getId() == null){
+                    tUnifyFile.setId(IdUtils.fastSimpleUUID());
+                    tUnifyFile.setCreateTime(DateUtils.getNowDate());
+                    tUnifyFile.setFileId(fileId);
+                    tUnifyFile.setFileBusinessId(fileBusinessId);
+                    tUnifyFile.setUploadType(uploadType);//文件类型:公司信息
+                    tUnifyFile.setCreateBy(createBy);
+                    tUnifyFileMapper.insertTUnifyFile(tUnifyFile);
+                }
+            }
+        }
+    }
+
+    /**
+     * 修改附件
+     * 
+     * @param tUnifyFile 附件
+     * @return 结果
+     */
+    @Override
+    public int updateTUnifyFile(TUnifyFile tUnifyFile)
+    {
+        tUnifyFile.setUpdateTime(DateUtils.getNowDate());
+        return tUnifyFileMapper.updateTUnifyFile(tUnifyFile);
+    }
+
+    /**
+     * 批量删除附件
+     * 
+     * @param ids 需要删除的附件主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTUnifyFileByIds(String[] ids)
+    {
+        return tUnifyFileMapper.deleteTUnifyFileByIds(ids);
+    }
+
+    /**
+     * 删除附件信息
+     * 
+     * @param id 附件主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTUnifyFileById(String id)
+    {
+        return tUnifyFileMapper.deleteTUnifyFileById(id);
+    }
+
+    /**
+     * 批量删除附件 (修改del_flag状态)
+     * @param ids
+     * @return
+     */
+    @Override
+    public int updateTUnifyFileByIds(String[] ids) {
+        return tUnifyFileMapper.updateTUnifyFileByIds(ids);
+    }
+
+    /**
+     * 批量删除附件
+     *
+     * @param fileBusinessIds
+     * @return
+     */
+    @Override
+    public int updateTUnifyFileBusinessIds(String[] fileBusinessIds) {
+        return tUnifyFileMapper.updateTUnifyFileBusinessIds(fileBusinessIds);
+    }
+
+    /**
+     * 根据附件业务ID()获取附件详情信息列表
+     * @param fileBusinessId
+     * @return
+     */
+    @Override
+    public List<TUnifyFile> selectTUnifyFileByBusinessIdList(String fileBusinessId,String uploadType) {
+        return tUnifyFileMapper.selectTUnifyFileByBusinessIdList(fileBusinessId,uploadType);
+    }
+
+    /**
+     * 根据fileId()获取项目中所有附件列表
+     * @param fileId
+     * @return
+     */
+    @Override
+    public List<TUnifyFile> listFileId(String fileId) {
+        return tUnifyFileMapper.listFileId(fileId);
+    }
+
+}