From fe5d383211fffdb51b695557f27141d5416a6b33 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 14 Jan 2026 13:58:47 +0800
Subject: [PATCH] feat(ai): 添加产品亮点视频关联功能

---
 src/main/java/cc/mrbird/febs/ai/controller/fileUpload/FileUploadController.java       |    6 +-
 src/main/java/cc/mrbird/febs/ai/service/impl/AiProductPointServiceImpl.java           |    4 ++
 src/main/java/cc/mrbird/febs/ai/controller/productPoint/AiProductPointController.java |   41 ++++++++++++++++++++
 src/main/resources/templates/febs/views/modules/ai/productPoint/info.html             |   25 ++++++++++++
 src/main/java/cc/mrbird/febs/ai/entity/AiProductPoint.java                            |    5 ++
 src/main/resources/templates/febs/views/modules/ai/productPoint/add.html              |   22 +++++++++++
 6 files changed, 100 insertions(+), 3 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/ai/controller/fileUpload/FileUploadController.java b/src/main/java/cc/mrbird/febs/ai/controller/fileUpload/FileUploadController.java
index 97171f2..d951ea6 100644
--- a/src/main/java/cc/mrbird/febs/ai/controller/fileUpload/FileUploadController.java
+++ b/src/main/java/cc/mrbird/febs/ai/controller/fileUpload/FileUploadController.java
@@ -30,10 +30,10 @@
 public class FileUploadController extends BaseController {
 
     // 基础上传目录
-    private String baseUploadDir = "/home/javaweb/webresource/ai/file";
+    public static String baseUploadDir = "/home/javaweb/webresource/ai/file";
 
     // 分片存储目录
-    private String baseChunkDir = "/home/javaweb/webresource/ai/file/chunks";
+    public static String baseChunkDir = "/home/javaweb/webresource/ai/file/chunks";
 
     /**
      * 上传文件分片
@@ -84,7 +84,7 @@
             }
 
             // 生成唯一文件名
-            String uniqueFileName = UUID.randomUUID().toString() + "_" + fileName;
+            String uniqueFileName = fileName+ "_" + UUID.randomUUID().toString() ;
             Path targetFilePath = uploadPath.resolve(uniqueFileName);
 
             // 构建公司专属分片目录
diff --git a/src/main/java/cc/mrbird/febs/ai/controller/productPoint/AiProductPointController.java b/src/main/java/cc/mrbird/febs/ai/controller/productPoint/AiProductPointController.java
index 12a8535..e2e8bf8 100644
--- a/src/main/java/cc/mrbird/febs/ai/controller/productPoint/AiProductPointController.java
+++ b/src/main/java/cc/mrbird/febs/ai/controller/productPoint/AiProductPointController.java
@@ -1,5 +1,7 @@
 package cc.mrbird.febs.ai.controller.productPoint;
 
+import cc.mrbird.febs.ai.controller.fileUpload.FileUploadController;
+import cc.mrbird.febs.ai.entity.AiProductCategory;
 import cc.mrbird.febs.ai.entity.AiProductPoint;
 import cc.mrbird.febs.ai.service.AiProductPointService;
 import cc.mrbird.febs.common.annotation.ControllerEndpoint;
@@ -13,6 +15,13 @@
 
 import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -67,4 +76,36 @@
         String companyId = getCurrentUserCompanyId();
         return new FebsResponse().success().data(service.pointTree(companyId));
     }
+
+    @GetMapping("fileList/parent")
+    @ControllerEndpoint(exceptionMessage = "获取文件列表失败")
+    public List<FileUploadController.FileInfo> parent(){
+        List<FileUploadController.FileInfo> list = new ArrayList<>();
+        try {
+
+            String companyId = getCurrentUserCompanyId();
+            String uploadDir = FileUploadController.baseUploadDir + "/" + companyId;
+            Path uploadPath = Paths.get(uploadDir);
+            if (!Files.exists(uploadPath)) {
+                return list;
+            }
+
+            Files.list(uploadPath).forEach(path -> {
+                if (Files.isRegularFile(path)) {
+                    try {
+                        FileUploadController.FileInfo fileInfo = new FileUploadController.FileInfo();
+                        fileInfo.setFileName(path.getFileName().toString());
+                        list.add(fileInfo);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            });
+
+            return list;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return list;
+        }
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/ai/entity/AiProductPoint.java b/src/main/java/cc/mrbird/febs/ai/entity/AiProductPoint.java
index 4abafcd..3b862ba 100644
--- a/src/main/java/cc/mrbird/febs/ai/entity/AiProductPoint.java
+++ b/src/main/java/cc/mrbird/febs/ai/entity/AiProductPoint.java
@@ -54,6 +54,11 @@
      */
     private String description;
 
+    /**
+     * 视屏名称
+     */
+    private String videoName;
+
     @TableField(exist = false)
     private String productCategoryName;
 }
diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductPointServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductPointServiceImpl.java
index 4bde82d..d611987 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductPointServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductPointServiceImpl.java
@@ -81,11 +81,14 @@
         entity.setCompanyId(dto.getCompanyId());
         entity.setIsNormal(dto.getIsNormal() );
         entity.setFinderUserName(dto.getFinderUserName());
+
         entity.setFeedId(dto.getFeedId());
         entity.setFeedImg(dto.getFeedImg());
         entity.setTitle(dto.getTitle());
+        entity.setVideoName(dto.getVideoName());
         entity.setDescription(dto.getDescription());
         entity.setCreatedTime(new Date());
+
         this.save(entity);
         return new FebsResponse().success().message("操作成功");
     }
@@ -104,6 +107,7 @@
                             .set(AiProductPoint::getTitle, dto.getTitle())
                             .set(AiProductPoint::getFeedImg, dto.getFeedImg())
                             .set(AiProductPoint::getDescription, dto.getDescription())
+                            .set(AiProductPoint::getVideoName, dto.getVideoName())
                             .set(AiProductPoint::getUpdatedTime, new Date())
                             .eq(AiProductPoint::getId, id)
             );
diff --git a/src/main/resources/templates/febs/views/modules/ai/productPoint/add.html b/src/main/resources/templates/febs/views/modules/ai/productPoint/add.html
index a045842..84c72f3 100644
--- a/src/main/resources/templates/febs/views/modules/ai/productPoint/add.html
+++ b/src/main/resources/templates/febs/views/modules/ai/productPoint/add.html
@@ -20,6 +20,16 @@
                                 </div>
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
+                                        <label class="layui-form-label">视屏选择:</label>
+                                        <div class="layui-input-block">
+                                            <select name="videoName" class="video-add-productCategory">
+                                                <option value="">请选择</option>
+                                            </select>
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="layui-row layui-col-space10 layui-form-item">
+                                    <div class="layui-col-lg6">
                                         <label class="layui-form-label febs-form-item-require">类型:</label>
                                         <div class="layui-input-block">
                                             <select name="isNormal" class="point-type" lay-filter="point-type-select">
@@ -192,6 +202,18 @@
             }
         });
 
+        //(下拉框)
+        $.get(ctx + 'admin/fileList/parent', function (data) {
+            for (var k in data)
+            {
+                $(".video-add-productCategory").append("<option value='" + data[k].fileName + "'>" + data[k].fileName + "</option>");
+            }
+            layui.use('form', function () {
+                var form = layui.form;
+                form.render();
+            });
+        });
+
         form.on('submit(productPoint-add-form-submit)', function (data) {
             data.field.description = editor.txt.html();
             $.ajax({
diff --git a/src/main/resources/templates/febs/views/modules/ai/productPoint/info.html b/src/main/resources/templates/febs/views/modules/ai/productPoint/info.html
index bc08ba8..d87bf2b 100644
--- a/src/main/resources/templates/febs/views/modules/ai/productPoint/info.html
+++ b/src/main/resources/templates/febs/views/modules/ai/productPoint/info.html
@@ -19,6 +19,17 @@
                                         </select>
                                     </div>
                                 </div>
+
+                                <div class="layui-row layui-col-space10 layui-form-item">
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label">视屏选择:</label>
+                                        <div class="layui-input-block">
+                                            <select name="videoName" class="video-add-productCategory"  id="video-add-productCategory-select">
+                                                <option value="">请选择</option>
+                                            </select>
+                                        </div>
+                                    </div>
+                                </div>
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
                                         <label class="layui-form-label febs-form-item-require">类型:</label>
@@ -200,6 +211,19 @@
             }
         });
 
+        //(下拉框)
+        $.get(ctx + 'admin/fileList/parent', function (data) {
+            for (var k in data)
+            {
+                $(".video-add-productCategory").append("<option value='" + data[k].fileName + "'>" + data[k].fileName + "</option>");
+            }
+            layui.use('form', function () {
+                var form = layui.form;
+                $("#video-add-productCategory-select").val(aiProductPoint.videoName)
+                form.render();
+            });
+        });
+
         setTimeout(() => {
             initProductPointInfo();
         }, 500);
@@ -210,6 +234,7 @@
                 "isNormal": aiProductPoint.isNormal,
                 "finderUserName": aiProductPoint.finderUserName,
                 "productCategoryId": aiProductPoint.productCategoryId,
+                "videoName": aiProductPoint.videoName,
                 "feedId": aiProductPoint.feedId,
             });
 

--
Gitblit v1.9.1