From 0388d54af57e8d3d4a99554501b232ca572b50c6 Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期一, 12 十月 2026 17:48:51 +0800
Subject: [PATCH] 客户满意度新增附件与委托单关联;供应商管理新增附件;标准物质接收、记录、验收模块调整;委托单新增已完成列表接口(满意度下拉用);管理记录服务调整

---
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ClientSatisfactionServiceImpl.java |   79 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 79 insertions(+), 0 deletions(-)

diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ClientSatisfactionServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ClientSatisfactionServiceImpl.java
index e38e930..e61d9aa 100644
--- a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ClientSatisfactionServiceImpl.java
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ClientSatisfactionServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.manage.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -9,13 +10,16 @@
 import com.deepoove.poi.config.ConfigureBuilder;
 import com.deepoove.poi.data.Pictures;
 import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.QueryWrappers;
 import com.ruoyi.framework.exception.ErrorException;
 import com.ruoyi.manage.dto.ClientSatisfactionDto;
 import com.ruoyi.manage.mapper.ClientSatisfactionAnalyseFileMapper;
+import com.ruoyi.manage.mapper.ClientSatisfactionAttachmentMapper;
 import com.ruoyi.manage.mapper.ClientSatisfactionMapper;
 import com.ruoyi.manage.pojo.ClientSatisfaction;
 import com.ruoyi.manage.pojo.ClientSatisfactionAnalyseFile;
+import com.ruoyi.manage.pojo.ClientSatisfactionAttachment;
 import com.ruoyi.manage.service.ClientSatisfactionService;
 import com.ruoyi.system.mapper.UserMapper;
 import org.springframework.beans.factory.annotation.Value;
@@ -24,12 +28,14 @@
 import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletResponse;
 import java.io.File;
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URLEncoder;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
+import java.util.List;
 
 
 /**
@@ -43,6 +49,9 @@
 
     @Resource
     private ClientSatisfactionAnalyseFileMapper clientSatisfactionAnalyseFileMapper;
+
+    @Resource
+    private ClientSatisfactionAttachmentMapper clientSatisfactionAttachmentMapper;
 
     @Resource
     private UserMapper userMapper;
@@ -184,5 +193,75 @@
         clientSatisfaction.setConfirmStatus(1);
         baseMapper.updateById(clientSatisfaction);
     }
+
+    /**
+     * 鏌ヨ婊℃剰搴﹂檮浠�
+     *
+     * @param clientSatisfactionId 婊℃剰搴﹁褰昳d
+     * @return
+     */
+    @Override
+    public List<ClientSatisfactionAttachment> selectAttachments(Integer clientSatisfactionId) {
+        return clientSatisfactionAttachmentMapper.selectList(new QueryWrapper<ClientSatisfactionAttachment>().lambda()
+                .eq(ClientSatisfactionAttachment::getClientSatisfactionId, clientSatisfactionId)
+                .orderByAsc(ClientSatisfactionAttachment::getSort, ClientSatisfactionAttachment::getId));
+    }
+
+    /**
+     * 涓婁紶婊℃剰搴﹂檮浠�
+     *
+     * @param clientSatisfactionId 婊℃剰搴﹁褰昳d
+     * @param file
+     * @return
+     */
+    @Override
+    public ClientSatisfactionAttachment uploadAttachment(Integer clientSatisfactionId, MultipartFile file) {
+        if (baseMapper.selectById(clientSatisfactionId) == null) {
+            throw new BaseException("瀹㈡埛婊℃剰搴﹁皟鏌ヤ笉瀛樺湪");
+        }
+        if (file == null || file.isEmpty()) {
+            throw new BaseException("闄勪欢涓嶈兘涓虹┖");
+        }
+        // 绯荤粺鍏ㄥ眬涓婁紶涓婇檺涓�200MB锛岃繖閲屾彁鍓嶇粰鍑哄弸濂芥彁绀�
+        if (file.getSize() > 200L * 1024 * 1024) {
+            throw new BaseException("闄勪欢涓嶈兘瓒呰繃200MB");
+        }
+        String originalName = file.getOriginalFilename();
+        if (originalName == null || originalName.trim().isEmpty()) {
+            originalName = "鏈懡鍚嶆枃浠�";
+        }
+        // 涓埆娴忚鍣ㄥ彲鑳藉甫涓婅矾寰勫墠缂�锛屽彧淇濈暀鏂囦欢鍚嶆湰韬�
+        originalName = originalName.replaceAll(".*[/\\\\]", "");
+        try {
+            // 鍥剧墖鏀惧浘鐗囩洰褰曪紙/img 闈欐�佽矾寰勶級锛屽叾浣欎换鎰忔牸寮忔斁 word 鐩綍锛�/word 闈欐�佽矾寰勶級
+            boolean image = originalName.matches("(?i).+\\.(jpg|jpeg|png|gif)$");
+            File directory = new File(image ? imgUrl : wordUrl);
+            if (!directory.exists()) {
+                directory.mkdirs();
+            }
+            String fileUrl = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmssSSS")) + "-" + originalName;
+            file.transferTo(new File(directory, fileUrl));
+            ClientSatisfactionAttachment attachment = new ClientSatisfactionAttachment();
+            attachment.setClientSatisfactionId(clientSatisfactionId);
+            attachment.setFileName(originalName);
+            attachment.setFileUrl(fileUrl);
+            attachment.setSort(selectAttachments(clientSatisfactionId).size());
+            clientSatisfactionAttachmentMapper.insert(attachment);
+            return attachment;
+        } catch (IOException e) {
+            throw new BaseException("闄勪欢涓婁紶澶辫触");
+        }
+    }
+
+    /**
+     * 鍒犻櫎婊℃剰搴﹂檮浠�
+     *
+     * @param id 闄勪欢id
+     * @return
+     */
+    @Override
+    public boolean deleteAttachment(Long id) {
+        return clientSatisfactionAttachmentMapper.deleteById(id) > 0;
+    }
 }
 

--
Gitblit v1.9.3