Administrator
3 days ago fe5d383211fffdb51b695557f27141d5416a6b33
feat(ai): 添加产品亮点视频关联功能

- 在AiProductPoint实体类中新增videoName字段用于存储视频名称
- 实现fileList/parent接口用于获取公司文件夹下的视频文件列表
- 在前端表单中添加视频选择下拉框并集成layui表单渲染
- 更新产品亮点增改逻辑以支持视频名称的保存和回显
- 修改文件上传逻辑将UUID后置以保持原始文件名可读性
6 files modified
103 ■■■■■ changed files
src/main/java/cc/mrbird/febs/ai/controller/fileUpload/FileUploadController.java 6 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/controller/productPoint/AiProductPointController.java 41 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/entity/AiProductPoint.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiProductPointServiceImpl.java 4 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/ai/productPoint/add.html 22 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/ai/productPoint/info.html 25 ●●●●● patch | view | raw | blame | history
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);
            // 构建公司专属分片目录
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;
        }
    }
}
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;
}
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)
            );
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({
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,
            });