10
10
import com .twelvet .framework .security .utils .SecurityUtils ;
11
11
import com .twelvet .server .ai .mapper .AiDocMapper ;
12
12
import com .twelvet .server .ai .mapper .AiDocSliceMapper ;
13
+ import com .twelvet .server .ai .mq .consumer .domain .AiDocMqVO ;
13
14
import com .twelvet .server .ai .mq .consumer .domain .dto .AiDocMqDTO ;
14
15
import com .twelvet .server .ai .mq .consumer .service .RAGMqTopicService ;
15
16
import org .slf4j .Logger ;
@@ -138,8 +139,7 @@ else if (RAGEnums.DocSourceTypeEnums.UPLOAD.equals(sourceType)) { // 处理上
138
139
139
140
List <AiDocDTO .FileDTO > fileList = aiDocMqDTO .getFileList ();
140
141
141
- List <AiDocSlice > docSliceList = new ArrayList <>();
142
- List <Document > docList = new ArrayList <>();
142
+ List <AiDocMqVO > aiDocMqVOList = new ArrayList <>();
143
143
// 针对文件进行doc插入
144
144
for (AiDocDTO .FileDTO file : fileList ) {
145
145
String fileName = file .getFileName ();
@@ -148,9 +148,13 @@ else if (RAGEnums.DocSourceTypeEnums.UPLOAD.equals(sourceType)) { // 处理上
148
148
TikaDocumentReader tikaDocumentReader = new TikaDocumentReader (fileUrl );
149
149
List <Document > documents = tikaDocumentReader .get ();
150
150
if (CollectionUtil .isEmpty (documents )) {
151
- throw new TWTException ("上传文件识别为空,空数据 " );
151
+ throw new TWTException ("上传文件识别为空数据 " );
152
152
}
153
153
154
+ AiDocMqVO aiDocMqVO = new AiDocMqVO ();
155
+ List <AiDocSlice > docSliceList = new ArrayList <>();
156
+ List <Document > docList = new ArrayList <>();
157
+
154
158
AiDoc aiDoc = new AiDoc ();
155
159
aiDoc .setDocName (fileName );
156
160
aiDoc .setKnowledgeId (knowledgeId );
@@ -159,10 +163,13 @@ else if (RAGEnums.DocSourceTypeEnums.UPLOAD.equals(sourceType)) { // 处理上
159
163
aiDoc .setCreateTime (nowDate );
160
164
aiDoc .setUpdateBy (username );
161
165
aiDoc .setUpdateTime (nowDate );
162
- // TODO 需要优化批量插入
163
- aiDocMapper .insertAiDoc (aiDoc );
164
166
165
- Long docId = aiDoc .getDocId ();
167
+ // 设置vo信息
168
+ aiDocMqVO .setAiDoc (aiDoc );
169
+ aiDocMqVO .setAiDocSliceList (docSliceList );
170
+ aiDocMqVO .setDocumentList (docList );
171
+ // 加入集合
172
+ aiDocMqVOList .add (aiDocMqVO );
166
173
167
174
// 切片文档
168
175
for (Document document : documents ) {
@@ -171,12 +178,10 @@ else if (RAGEnums.DocSourceTypeEnums.UPLOAD.equals(sourceType)) { // 处理上
171
178
for (Document doc : docs ) {
172
179
Map <String , Object > metadata = doc .getMetadata ();
173
180
metadata .put (RAGEnums .VectorMetadataEnums .KNOWLEDGE_ID .getCode (), knowledgeId );
174
- metadata .put (RAGEnums .VectorMetadataEnums .DOC_ID .getCode (), docId );
175
181
176
182
AiDocSlice aiDocSlice = new AiDocSlice ();
177
183
aiDocSlice .setKnowledgeId (knowledgeId );
178
184
aiDocSlice .setVectorId (doc .getId ());
179
- aiDocSlice .setDocId (docId );
180
185
aiDocSlice .setSliceName (fileName );
181
186
aiDocSlice .setContent (doc .getContent ());
182
187
aiDocSlice .setCreateBy (username );
@@ -192,7 +197,32 @@ else if (RAGEnums.DocSourceTypeEnums.UPLOAD.equals(sourceType)) { // 处理上
192
197
}
193
198
}
194
199
195
- if (CollectionUtil .isNotEmpty (docSliceList )) {
200
+ if (CollectionUtil .isNotEmpty (aiDocMqVOList )) {
201
+
202
+ List <AiDoc > aiDocList = aiDocMqVOList .stream ().map (AiDocMqVO ::getAiDoc ).toList ();
203
+ // 批量插入文档
204
+ aiDocMapper .insertAiDocBatch (aiDocList );
205
+
206
+ List <AiDocSlice > docSliceList = new ArrayList <>();
207
+ List <Document > docList = new ArrayList <>();
208
+
209
+ for (AiDocMqVO aiDocMqVO : aiDocMqVOList ) {
210
+ AiDoc aiDoc = aiDocMqVO .getAiDoc ();
211
+ Long docId = aiDoc .getDocId ();
212
+
213
+ List <AiDocSlice > aiDocSliceList = aiDocMqVO .getAiDocSliceList ();
214
+ for (AiDocSlice aiDocSlice : aiDocSliceList ) {
215
+ aiDocSlice .setDocId (docId );
216
+ docSliceList .add (aiDocSlice );
217
+ }
218
+
219
+ List <Document > documentList = aiDocMqVO .getDocumentList ();
220
+ for (Document document : documentList ) {
221
+ Map <String , Object > metadata = document .getMetadata ();
222
+ metadata .put (RAGEnums .VectorMetadataEnums .DOC_ID .getCode (), docId );
223
+ docList .add (document );
224
+ }
225
+ }
196
226
197
227
// 插入切片
198
228
aiDocSliceMapper .insertAiDocSliceBatch (docSliceList );
0 commit comments