فهرست منبع

Merge remote-tracking branch 'origin/master'

1811872455@163.com 6 ساعت پیش
والد
کامیت
2550c49c6a

+ 24 - 15
java/storlead-knowledge/storlead-knowledge-api/src/main/java/com/storlead/knowledge/api/KnowledgeController.java

@@ -2,6 +2,7 @@ package com.storlead.knowledge.api;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.JsonMappingException;
@@ -23,11 +24,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -114,42 +118,38 @@ public class KnowledgeController {
 
     @GetMapping("training/page")
     @ApiOperation("分页获取AI训练记录")
-    public Result<IPage<AiTrainingEntity>> pageTraining(@RequestParam(defaultValue = "1") Integer pageIndex,
+    public Result<IPage<AiTrainingVO>> pageTraining(@RequestParam(defaultValue = "1") Integer pageIndex,
                                                      @RequestParam(defaultValue = "10") Integer pageSize,
                                                      @RequestParam(required = false) String keyword,
                                                      @RequestParam(required = false) String datasetsId) {
         IPage<AiTrainingEntity> result = aiTrainingService.pageVO(pageIndex, pageSize, keyword, datasetsId);
         //https://api.dify.ai/v1/datasets/{dataset_id}/documents/{batch}/indexing-status
         String url = difyProperties.getBaseUrl() ;
+        List <AiTrainingVO> list = new ArrayList<>();
         for (AiTrainingEntity vo : result.getRecords()) {
+            AiTrainingVO vo1 = AiTrainingVO.transformVo(vo);
+
+            vo1.setCompletedDcumentCount(0);
+            List<AiDatasetsFileEntity> files = aiDatasetsFileService.pageVO(1, 1000, null, vo.getId()).getRecords();
+            vo1.setTotalDocumentCount(files.size());
             if (vo.getStatus()==0){
-                List<AiDatasetsFileEntity> files = aiDatasetsFileService.pageVO(1, 1000, null, vo.getId()).getRecords();
                 Boolean flag = true;
+
                 for (AiDatasetsFileEntity file : files) {
                     String url2 = difyProperties.getBaseUrl() + "datasets/"+vo.getDatasetsId()+"/documents/"+file.getBatch()+"/indexing-status";
                     Result<Object> result1 =  httpService.get(url2, null, "Bearer "+difyProperties.getDatasetApiKey(), new TypeReference<>() {});
                     if (result1.isSuccess()) {
                         // 从Dify返回结果中提取document_id
                         Object responseData = result1.getResult();
-
                         JSONObject root = new JSONObject((Map<String, Object>) responseData);
                         JSONArray data = root.getJSONArray("data");
                         String indexing_status = data.getJSONObject(0).getString("indexing_status");
-
-//                        String indexing_status = null;
-//                        if (responseData instanceof Map) {
-//                            Object data = ((Map<?, ?>) responseData).get("data");
-//                            if (data instanceof Map) {
-//                                Object status = ((Map<?, ?>) data).get("indexing_status");
-//                                if (status != null) {
-//                                    indexing_status = status.toString();
-//                                }
-//                            }
-//                        }
                         file.setIndexingStatus(indexing_status);
                         aiDatasetsFileService.updateById(file);
                         if (!"completed".equals(indexing_status)) {
                             flag = false;
+                        }else{
+                            vo1.setCompletedDcumentCount(vo1.getCompletedDcumentCount()+1);
                         }
                     }
                 }
@@ -157,9 +157,18 @@ public class KnowledgeController {
                     vo.setStatus(1);
                     aiTrainingService.updateById(vo);
                 }
+            }else{
+                vo1.setTotalDocumentCount(files.size());
+                vo1.setCompletedDcumentCount(files.size());
             }
+            list.add(vo1);
         }
-        return Result.ok(result);
+        Page<AiTrainingVO> page = new Page<>(pageIndex, pageSize);
+        page.setRecords(list);
+        page.setTotal(result.getTotal());
+        page.setPages(result.getPages());
+        page.setCurrent(result.getCurrent());
+        return Result.ok(page);
     }
 
     @GetMapping("training/{id}")

+ 7 - 0
java/storlead-knowledge/storlead-knowledge-biz/src/main/java/com/storlead/knowledge/mapper/AiMessageMapper.java

@@ -1,6 +1,7 @@
 package com.storlead.knowledge.mapper;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.storlead.framework.mybatis.mapper.MyBaseMapper;
@@ -8,6 +9,8 @@ import com.storlead.knowledge.entity.AiMessageEntity;
 import com.storlead.knowledge.pojo.vo.AiMessageWithReviewVO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * <p>
  * AI对话消息记录 Mapper 接口
@@ -27,4 +30,8 @@ public interface AiMessageMapper extends MyBaseMapper<AiMessageEntity> {
      */
     IPage<AiMessageWithReviewVO> pageQueryWithReview(IPage<?> page,
                                                      @Param(Constants.WRAPPER) Wrapper<AiMessageEntity> wrapper);
+
+    List<AiMessageWithReviewVO> queryList(IPage<?> page, @Param(Constants.WRAPPER) Wrapper<AiMessageEntity> wrapper);
+
+    Integer getTotal( @Param(Constants.WRAPPER)LambdaQueryWrapper<AiMessageEntity> wrapper);
 }

+ 11 - 4
java/storlead-knowledge/storlead-knowledge-biz/src/main/java/com/storlead/knowledge/service/impl/AiMessageServiceImpl.java

@@ -8,10 +8,13 @@ import com.storlead.knowledge.entity.AiMessageEntity;
 import com.storlead.knowledge.mapper.AiMessageMapper;
 import com.storlead.knowledge.pojo.dto.QueryPageDTO;
 import com.storlead.knowledge.pojo.vo.AiMessageWithReviewVO;
+import com.storlead.knowledge.pojo.vo.AiTrainingVO;
 import com.storlead.knowledge.service.AiMessageService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * AI对话消息记录 服务实现类
@@ -36,7 +39,6 @@ public class AiMessageServiceImpl extends MyBaseServiceImpl<AiMessageMapper, AiM
                     .like(AiMessageEntity::getAnswer, page.getKeyword())
             );
         }
-
         // 按创建时间降序排列
         wrapper.orderByDesc(AiMessageEntity::getCreatedAt);
 
@@ -57,10 +59,15 @@ public class AiMessageServiceImpl extends MyBaseServiceImpl<AiMessageMapper, AiM
                     .like(AiMessageEntity::getAnswer, page.getKeyword())
             );
         }
-        wrapper.orderByDesc(AiMessageEntity::getCreatedAt);
-
+        List<AiMessageWithReviewVO> list =  baseMapper.queryList(pageParam, wrapper);
+        Integer total = baseMapper.getTotal(wrapper);
         // 直接调用 Mapper 的 LEFT JOIN 分页查询
-        return baseMapper.pageQueryWithReview(pageParam, wrapper);
+        Page<AiMessageWithReviewVO> result = new Page<>(page.getPageIndex(), page.getPageSize());
+        result.setRecords(list);
+        result.setTotal(total);
+        result.setPages(page.getPageSize());
+        result.setCurrent(page.getPageIndex());
+        return result;
     }
 
     @Override

+ 21 - 0
java/storlead-knowledge/storlead-knowledge-biz/src/main/resources/mapper/AiMessageMapper.xml

@@ -32,4 +32,25 @@
         group by  m.id
     </select>
 
+    <select id="queryList" resultMap="AiMessageWithReviewMap">
+        SELECT
+            m.*,
+            nullif(sum(r.agree), 0) AS agree,
+            nullif(sum(r.disagree), 0) AS disagree
+        FROM ai_messages m
+                 LEFT JOIN ai_messages_review r ON r.ai_message_id = m.id
+            ${ew.customSqlSegment}
+        group by  m.id
+    </select>
+
+
+    <select id="getTotal"  resultType="java.lang.Integer">
+        SELECT count(m.id) as total
+        FROM ai_messages m
+                 LEFT JOIN ai_messages_review r ON r.ai_message_id = m.id
+            ${ew.customSqlSegment}
+
+    </select>
+
+
 </mapper>

+ 12 - 31
java/storlead-knowledge/storlead-knowledge-core/src/main/java/com/storlead/knowledge/pojo/vo/AiTrainingVO.java

@@ -1,9 +1,11 @@
 package com.storlead.knowledge.pojo.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.storlead.knowledge.entity.AiTrainingEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.beans.BeanUtils;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
@@ -19,41 +21,20 @@ import java.util.Date;
  */
 @Data
 @ApiModel(value = "AiTrainingVO", description = "AI训练记录视图对象")
-public class AiTrainingVO implements Serializable {
+public class AiTrainingVO extends AiTrainingEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @ApiModelProperty(value = "主键ID")
-    private Long id;
+    @ApiModelProperty(value = "总文件数")
+    private Integer totalDocumentCount;
 
-    @ApiModelProperty(value = "知识库ID")
-    private String datasetsId;
+    @ApiModelProperty(value = "已完成文件数")
+    private Integer completedDcumentCount;
 
-    @ApiModelProperty(value = "标题")
-    private String name;
+    public static AiTrainingVO transformVo(AiTrainingEntity entity) {
+        AiTrainingVO vo = new AiTrainingVO();
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
 
-    @ApiModelProperty(value = "描述")
-    private String description;
-
-    @ApiModelProperty(value = "状态:0-禁用,1-启用")
-    private Integer status;
-
-    @ApiModelProperty(value = "状态描述")
-    private String statusDesc;
-
-    @ApiModelProperty(value = "更新时间")
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date updateTime;
-
-    @ApiModelProperty(value = "创建时间")
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
-
-    @ApiModelProperty(value = "创建人")
-    private String createBy;
-
-    @ApiModelProperty(value = "更新人")
-    private String updateBy;
 }