Răsfoiți Sursa

优化:新增产品界面的提示信息
新增:查看知识库的知识条目
修复:无法新增产品的问题

范志成 4 luni în urmă
părinte
comite
96b17e495e

+ 9 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/controller/SmsbDifyDatasetsQuestionController.java

@@ -46,6 +46,15 @@ public class SmsbDifyDatasetsQuestionController extends BaseController {
         return smsbDifyDatasetsQuestionService.queryPageList(bo, pageQuery);
     }
 
+    /**
+     * 查询所有的Dify产品推荐列表
+     */
+    @SaCheckPermission("device:difyDatasetsProduct:list")
+    @GetMapping("/listByDatasetsId/{datasetsId}")
+    public R<List<SmsbDifyDatasetsQuestionVo>> listByDatasetsId(@PathVariable("datasetsId") Long datasetsId) {
+        return R.ok(smsbDifyDatasetsQuestionService.queryListByDatasetsId(datasetsId));
+    }
+
     /**
      * 导出Dify知识问答列表
      */

+ 2 - 2
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/bo/SmsbDifyDatasetsProductBo.java

@@ -66,13 +66,13 @@ public class SmsbDifyDatasetsProductBo extends BaseEntity {
     /**
      * 关键词
      */
-    @NotBlank(message = "属性不能为空", groups = {AddGroup.class, EditGroup.class})
+    @NotNull(message = "属性不能为空", groups = {AddGroup.class, EditGroup.class})
     private int property;
 
     /**
      * 关键词
      */
-    @NotBlank(message = "价格不能为空", groups = {AddGroup.class, EditGroup.class})
+//    @NotNull(message = "价格不能为空", groups = {AddGroup.class, EditGroup.class})
     private int price;
 
     /**

+ 7 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/ISmsbDifyDatasetsQuestionService.java

@@ -67,6 +67,13 @@ public interface ISmsbDifyDatasetsQuestionService {
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
+    /**
+     * 根据知识库ID 查询当前下发的知识条目内容
+     * @param datasetsId
+     * @return
+     */
+    List<SmsbDifyDatasetsQuestionVo> queryListByDatasetsId(Long datasetsId);
+
     /**
      * 根据知识库ID、下发记录ID 查询历史下发的问答内容
      * @param datasetsId

+ 22 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/impl/SmsbDifyDatasetsQuestionServiceImpl.java

@@ -1,5 +1,8 @@
 package com.inspur.device.service.impl;
 
+import com.inspur.device.domain.SmsbDatasetsPushRecord;
+import com.inspur.device.domain.vo.SmsbDatasetsPushRecordVo;
+import com.inspur.device.mapper.SmsbDatasetsPushRecordMapper;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -16,6 +19,7 @@ import com.inspur.device.domain.SmsbDifyDatasetsQuestion;
 import com.inspur.device.mapper.SmsbDifyDatasetsQuestionMapper;
 import com.inspur.device.service.ISmsbDifyDatasetsQuestionService;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Collection;
@@ -31,6 +35,7 @@ import java.util.Collection;
 public class SmsbDifyDatasetsQuestionServiceImpl implements ISmsbDifyDatasetsQuestionService {
 
     private final SmsbDifyDatasetsQuestionMapper baseMapper;
+    private final SmsbDatasetsPushRecordMapper smsbDatasetsPushRecordMapper;
 
     /**
      * 查询Dify知识问答
@@ -133,6 +138,23 @@ public class SmsbDifyDatasetsQuestionServiceImpl implements ISmsbDifyDatasetsQue
         return baseMapper.deleteByIds(ids) > 0;
     }
 
+    /**
+     * 根据知识库ID 查询当前下发的知识条目内容
+     * @param datasetsId
+     * @return
+     */
+    @Override
+    public List<SmsbDifyDatasetsQuestionVo> queryListByDatasetsId(Long datasetsId) {
+        // 1、根据产品库Id查询最近的一次下发记录
+        SmsbDatasetsPushRecordVo lastPushRecord = smsbDatasetsPushRecordMapper.selectVoOne(new LambdaQueryWrapper<SmsbDatasetsPushRecord>()
+            .eq(SmsbDatasetsPushRecord::getDatasetsId,datasetsId).orderByDesc(SmsbDatasetsPushRecord::getId).last("limit 1"));
+        if (null == lastPushRecord) {
+            return new ArrayList<>();
+        }
+        // 2、根据下发记录ID + datasetsId 查询关联关系获取产品信息
+        return baseMapper.selectVoListByRIdAndDid(lastPushRecord.getId(),datasetsId);
+    }
+
     /**
      * 根据知识库ID、下发记录ID 查询历史下发的问答内容
      * @param datasetsId

+ 7 - 1
smsb-plus-ui/src/api/smsb/device/difyDatasetsQuestion_index.ts

@@ -8,7 +8,6 @@ import {DifyDatasetsProductVO} from "@/api/smsb/device/difyDatasetsProduct_types
  * @param query
  * @returns {*}
  */
-
 export const listDifyDatasetsQuestion = (query?: DifyDatasetsQuestionQuery): AxiosPromise<DifyDatasetsQuestionVO[]> => {
   return request({
     url: '/device/difyDatasetsQuestion/list',
@@ -17,6 +16,13 @@ export const listDifyDatasetsQuestion = (query?: DifyDatasetsQuestionQuery): Axi
   });
 };
 
+export const listQuestionByDatasetsId = (datasetsId: string | number): AxiosPromise<DifyDatasetsQuestionVO[]> => {
+  return request({
+    url: '/device/difyDatasetsQuestion/listByDatasetsId/' + datasetsId,
+    method: 'get'
+  });
+};
+
 export const listQuestionByRidAndDid= (recordId:string | number ,datasetsId: string | number): AxiosPromise<DifyDatasetsProductVO[]> => {
   return request({
     url: '/device/difyDatasetsQuestion/listQuestionByRidAndDid/' + recordId + "/" + datasetsId,

+ 48 - 11
smsb-plus-ui/src/views/smsb/datasets/question.vue

@@ -30,8 +30,8 @@
       <div class="table-content">
         <el-table v-loading="loading" :data="difyDatasetsList" @selection-change="handleSelectionChange">
           <el-table-column type="selection" width="55" align="center"/>
-<!--          <el-table-column label="ID" align="left" prop="id" v-if="true" width="175"/>-->
-          <el-table-column label="问答库ID" align="left" prop="difyId" width="180" :show-overflow-tooltip = "true"/>
+          <!--          <el-table-column label="ID" align="left" prop="id" v-if="true" width="175"/>-->
+          <el-table-column label="问答库ID" align="left" prop="difyId" width="180" :show-overflow-tooltip="true"/>
           <el-table-column label="问答库" align="left" prop="name" width="200" :show-overflow-tooltip="true"/>
           <el-table-column label="描述" align="left" prop="description" :show-overflow-tooltip="true"/>
           <el-table-column label="索引模式" align="center" prop="indexingTechnique" width="80">
@@ -57,10 +57,14 @@
                 <el-button link type="primary" icon="Position" @click="handlePush(scope.row)"
                            v-hasPermi="['device:datasets:edit']"></el-button>
               </el-tooltip>
-<!--              <el-tooltip content="文件列表" placement="top">
-                <el-button link type="primary" icon="Document" @click="handleToFileList(scope.row)"
-                           v-hasPermi="['device:datasetsFile:list']"></el-button>
-              </el-tooltip>-->
+              <el-tooltip content="产品条目" placement="top">
+                <el-button link type="primary" icon="View" @click="handleEntryList(scope.row)"
+                           v-hasPermi="['device:datasets:query']"></el-button>
+              </el-tooltip>
+              <!--              <el-tooltip content="文件列表" placement="top">
+                              <el-button link type="primary" icon="Document" @click="handleToFileList(scope.row)"
+                                         v-hasPermi="['device:datasetsFile:list']"></el-button>
+                            </el-tooltip>-->
               <el-tooltip content="删除" placement="top">
                 <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
                            v-hasPermi="['device:datasets:remove']"></el-button>
@@ -112,6 +116,22 @@
         </div>
       </template>
     </el-dialog>
+
+    <!-- 知识条目列表 -->
+    <el-dialog :title="viewDialog.title" v-model="viewDialog.visible" width="1200px" append-to-body>
+      <div class="table-content">
+        <el-table v-loading="entryLoading" :data="questionList">
+          <el-table-column label="问题" align="left" prop="question" width="250" :show-overflow-tooltip="true"/>
+          <el-table-column label="回答" align="left" prop="answer" :show-overflow-tooltip="true"/>
+          <el-table-column label="创建人" align="left" prop="createUser" width="100" :show-overflow-tooltip="true"/>
+        </el-table>
+      </div>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -124,20 +144,22 @@ import {
   updateDifyDatasets
 } from '@/api/smsb/device/datasets';
 import {DifyDatasetsForm, DifyDatasetsQuery, DifyDatasetsVO} from '@/api/smsb/device/datasets_type';
-import {listAllProduct} from "@/api/smsb/device/difyDatasetsProduct_index";
-import {listAllQuestion, listDifyDatasetsQuestion} from "@/api/smsb/device/difyDatasetsQuestion_index";
+import {listDifyDatasetsQuestion, listQuestionByDatasetsId} from "@/api/smsb/device/difyDatasetsQuestion_index";
+import {DifyDatasetsQuestionVO} from "@/api/smsb/device/difyDatasetsQuestion_types";
 
 const {proxy} = getCurrentInstance() as ComponentInternalInstance;
 
 const difyDatasetsList = ref<DifyDatasetsVO[]>([]);
 const buttonLoading = ref(false);
 const loading = ref(true);
+const entryLoading = ref(true);
 const showSearch = ref(true);
 const ids = ref<Array<string | number>>([]);
 const single = ref(true);
 const multiple = ref(true);
 const total = ref(0);
 const entryList = ref([]);
+const questionList = ref<DifyDatasetsQuestionVO>([]);
 const selectedEntry = ref([]);
 const datasetsId = ref<number | string>();
 
@@ -146,6 +168,11 @@ const pushDialog = reactive<DialogOption>({
   title: ''
 });
 
+const viewDialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
 const queryFormRef = ref<ElFormInstance>();
 const difyDatasetsFormRef = ref<ElFormInstance>();
 
@@ -166,7 +193,7 @@ const initFormData: DifyDatasetsForm = {
   documentCount: undefined,
   appCount: undefined,
   difyId: undefined,
-  tag:1
+  tag: 1
 }
 const data = reactive<PageData<DifyDatasetsForm, DifyDatasetsQuery>>({
   form: {...initFormData},
@@ -178,7 +205,7 @@ const data = reactive<PageData<DifyDatasetsForm, DifyDatasetsQuery>>({
     params: {}
   },
   rules: {
-    name: [{ required: true, message: '问答库名称不能为空', trigger: 'blur' }],
+    name: [{required: true, message: '问答库名称不能为空', trigger: 'blur'}],
   }
 });
 
@@ -193,6 +220,16 @@ const getList = async () => {
   loading.value = false;
 }
 
+const handleEntryList = async (row?: DifyDatasetsVO) => {
+  entryLoading.value = true;
+  viewDialog.visible = true;
+  viewDialog.title = '知识条目';
+  const datasetsId = row.id;
+  const res = await listQuestionByDatasetsId(datasetsId);
+  questionList.value = res.data;
+  entryLoading.value = false;
+}
+
 /** 取消按钮 */
 const cancel = () => {
   reset();
@@ -291,7 +328,7 @@ const submitEntry = async () => {
 }
 
 /** 跳转至文件列表页面  */
-const handleToFileList = (row?: DifyDatasetsVO) =>{
+const handleToFileList = (row?: DifyDatasetsVO) => {
   proxy.$router.push('/device/datasetsFile?datasetsId=' + row.difyId);
 }
 

+ 6 - 6
smsb-plus-ui/src/views/smsb/difyDatasetsProduct/index.vue

@@ -19,11 +19,11 @@
                          v-hasPermi="['system:difyDatasetsProduct:add']">新增
               </el-button>
             </el-form-item>
-            <el-form-item>
+<!--            <el-form-item>
               <el-button type="primary" plain icon="Plus" @click="handleAdd"
                          v-hasPermi="['system:difyDatasetsProduct:add']">新增
               </el-button>
-<!--              <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
+              <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
                          v-hasPermi="['system:difyDatasetsProduct:edit']">修改
               </el-button>
               <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
@@ -31,8 +31,8 @@
               </el-button>
               <el-button type="warning" plain icon="Download" @click="handleExport"
                          v-hasPermi="['system:difyDatasetsProduct:export']">导出
-              </el-button>-->
-            </el-form-item>
+              </el-button>
+            </el-form-item>-->
           </el-form>
         </el-card>
       </div>
@@ -87,7 +87,7 @@
           <el-form-item label="产品名称" prop="name">
             <el-input v-model="form.name" placeholder="请输入名称" style="width: 300px"/>
           </el-form-item>
-          <el-form-item label="产品序号" prop="keyword">
+          <el-form-item label="产品序号" prop="sort">
             <el-input-number v-model="form.sort" controls-position="right" placeholder="请输入序号" :min="1"
                              :max="100000" style="width: 180px" :maxlength="6"/>
           </el-form-item>
@@ -209,7 +209,7 @@ const data = reactive<PageData<DifyDatasetsProductForm, DifyDatasetsProductQuery
       {required: true, message: "简介不能为空", trigger: "blur"}
     ],
     sort: [
-      {required: true, message: "序号不能为空", trigger: "blur"}
+      {required: true, message: "产品序号不能为空", trigger: "blur"}
     ],
     imgUrl: [
       {required: true, message: "产品图片不能为空", trigger: "blur"}