From 577bef7f8ece263c4bc272bab23fcc8aa4b6083b Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Tue, 16 Sep 2025 11:56:01 +0800
Subject: [PATCH] feat(ai): 产品知识点增加分类功能
---
src/main/java/cc/mrbird/febs/ai/service/impl/AiProductPointServiceImpl.java | 23 +++++++++++
src/main/resources/templates/febs/views/modules/ai/productPoint/list.html | 1
src/main/resources/templates/febs/views/modules/ai/productPoint/info.html | 25 +++++++++++-
src/main/java/cc/mrbird/febs/ai/entity/AiProductPoint.java | 9 ++++
src/main/resources/templates/febs/views/modules/ai/productPoint/add.html | 21 ++++++++++
5 files changed, 76 insertions(+), 3 deletions(-)
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 d094130..4abafcd 100644
--- a/src/main/java/cc/mrbird/febs/ai/entity/AiProductPoint.java
+++ b/src/main/java/cc/mrbird/febs/ai/entity/AiProductPoint.java
@@ -1,6 +1,7 @@
package cc.mrbird.febs.ai.entity;
import cc.mrbird.febs.common.entity.AiBaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -17,6 +18,11 @@
* 公司ID (UUID)
*/
private String companyId;
+
+ /**
+ * 类型
+ */
+ private String productCategoryId;
/**
* 类型1:普通内容 2:视频号内容
@@ -47,4 +53,7 @@
* 描述
*/
private String description;
+
+ @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 9d0c44e..c496f82 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
@@ -1,13 +1,16 @@
package cc.mrbird.febs.ai.service.impl;
import cc.mrbird.febs.ai.entity.AiProduct;
+import cc.mrbird.febs.ai.entity.AiProductCategory;
import cc.mrbird.febs.ai.entity.AiProductPoint;
import cc.mrbird.febs.ai.mapper.AiProductPointMapper;
+import cc.mrbird.febs.ai.service.AiProductCategoryService;
import cc.mrbird.febs.ai.service.AiProductPointLinkService;
import cc.mrbird.febs.ai.service.AiProductPointService;
import cc.mrbird.febs.ai.util.UUID;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -21,6 +24,9 @@
import java.util.Date;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
/**
* AI产品知识点 Service实现类
@@ -35,6 +41,7 @@
private final AiProductPointMapper aiProductPointMapper;
private final AiProductPointLinkService aiProductPointLinkService;
+ private final AiProductCategoryService aiProductCategoryService;
@Override
public AiProductPoint getById(String id) {
@@ -49,6 +56,20 @@
query.eq(AiProductPoint::getCompanyId, dto.getCompanyId());
}
Page<AiProductPoint> pages = aiProductPointMapper.selectPage(page, query);
+ List<AiProductPoint> records = pages.getRecords();
+ if (CollUtil.isNotEmpty( records)){
+ Set<String> collect = records.stream().map(AiProductPoint::getProductCategoryId).collect(Collectors.toSet());
+
+ if(CollUtil.isNotEmpty( collect)){
+ Map<String, AiProductCategory> map = aiProductCategoryService.selectMapByIds(collect);
+ for (AiProductPoint record : records){
+ AiProductCategory orDefault = map.getOrDefault(record.getProductCategoryId(), null);
+ if(ObjectUtil.isNotNull(orDefault)){
+ record.setProductCategoryName(orDefault.getName());
+ }
+ }
+ }
+ }
return pages;
}
@@ -56,6 +77,7 @@
public FebsResponse add(AiProductPoint dto) {
AiProductPoint entity = new AiProductPoint();
entity.setId(UUID.getSimpleUUIDString());
+ entity.setProductCategoryId(dto.getProductCategoryId());
entity.setCompanyId(dto.getCompanyId());
entity.setIsNormal(dto.getIsNormal() );
entity.setFinderUserName(dto.getFinderUserName());
@@ -76,6 +98,7 @@
this.update(null,
Wrappers.lambdaUpdate(AiProductPoint.class)
.set(AiProductPoint::getIsNormal, dto.getIsNormal())
+ .set(AiProductPoint::getProductCategoryId, dto.getProductCategoryId())
.set(AiProductPoint::getFinderUserName, dto.getFinderUserName())
.set(AiProductPoint::getFeedId, dto.getFeedId())
.set(AiProductPoint::getTitle, dto.getTitle())
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 02964a8..a045842 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
@@ -9,6 +9,15 @@
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
+
+ <div class="layui-form-item">
+ <label class="layui-form-label febs-form-item-require">分类:</label>
+ <div class="layui-input-block">
+ <select name="productCategoryId" class="news-category" id="news-category" >
+ <option value="">请选择</option>
+ </select>
+ </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>
@@ -117,6 +126,18 @@
form.render();
+ //(下拉框)
+ $.get(ctx + 'admin/productCategory/categoryTree/parent', function (data) {
+ for (var k in data)
+ {
+ $(".news-category").append("<option value='" + data[k].id + "'>" + data[k].name + "</option>");
+ }
+ layui.use('form', function () {
+ var form = layui.form;
+ form.render();
+ });
+ });
+
const E = window.wangEditor;
const editor = new E('#product-point-toolbar-container', '#product-point-text-container'); // 传入两个元素
editor.config.showLinkImg = false;
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 c1addd8..bc08ba8 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
@@ -11,7 +11,14 @@
<input type="text" name="id"
placeholder="" autoComplete="off" class="layui-input febs-hide">
<div class="layui-tab-item layui-show">
-
+ <div class="layui-form-item">
+ <label class="layui-form-label febs-form-item-require">分类:</label>
+ <div class="layui-input-block">
+ <select name="productCategoryId" class="news-category" id="news-category" >
+ <option value="">请选择</option>
+ </select>
+ </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>
@@ -126,6 +133,19 @@
form.render();
+ //(下拉框)
+ $.get(ctx + 'admin/productCategory/categoryTree/parent', function (data) {
+ for (var k in data)
+ {
+ $(".news-category").append("<option value='" + data[k].id + "'>" + data[k].name + "</option>");
+ }
+ layui.use('form', function () {
+ var form = layui.form;
+ $("#news-category").val(aiProductPoint.productCategoryId)
+ form.render();
+ });
+ });
+
const E = window.wangEditor;
const editor = new E('#product-point-toolbar-container', '#product-point-text-container'); // 传入两个元素
editor.config.showLinkImg = false;
@@ -189,10 +209,9 @@
"title": aiProductPoint.title,
"isNormal": aiProductPoint.isNormal,
"finderUserName": aiProductPoint.finderUserName,
+ "productCategoryId": aiProductPoint.productCategoryId,
"feedId": aiProductPoint.feedId,
});
-
-
$('#productPointImageUpload').append('<img src="' + aiProductPoint.feedImg + '" alt="" class="layui-upload-img single-image" style="width: 130px">');
$("#feedImg").val(aiProductPoint.feedImg);
diff --git a/src/main/resources/templates/febs/views/modules/ai/productPoint/list.html b/src/main/resources/templates/febs/views/modules/ai/productPoint/list.html
index b6c4bfb..5abd069 100644
--- a/src/main/resources/templates/febs/views/modules/ai/productPoint/list.html
+++ b/src/main/resources/templates/febs/views/modules/ai/productPoint/list.html
@@ -159,6 +159,7 @@
{type: 'checkbox'},
{type: 'numbers', title: '', width: 80},
{title: '操作', toolbar: '#productPointOption', minWidth: 200, align: 'center'},
+ {field: 'productCategoryName', title: '分类', minWidth: 100,align:'center'},
{field: 'title', title: '标题', minWidth: 100,align:'center'},
{templet:"#pointTypeFormat", title: '类型', minWidth: 140,align:'center'},
{field: 'companyId', title: '公司编码', minWidth: 150,align:'center'},
--
Gitblit v1.9.1