Просмотр исходного кода

新增:无预约二维码场景调用公共知识库

范志成 4 месяцев назад
Родитель
Сommit
0df6e69484

+ 27 - 2
smsb-modules/smsb-digital-promotion/src/main/java/com/inspur/digital/service/impl/SmsbAppointmentInfoServiceImpl.java

@@ -11,9 +11,12 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.therapi.runtimejavadoc.repack.com.eclipsesource.json.JsonObject;
+import com.inspur.device.domain.SmsbDifyDatasetsQuestion;
 import com.inspur.device.domain.vo.DifyDatasetsFileRspData;
 import com.inspur.device.domain.vo.SmsbDeviceGroupRelVo;
+import com.inspur.device.domain.vo.SmsbDifyDatasetsQuestionVo;
 import com.inspur.device.mapper.SmsbDeviceGroupRelMapper;
+import com.inspur.device.mapper.SmsbDifyDatasetsQuestionMapper;
 import com.inspur.digital.domain.*;
 import com.inspur.digital.domain.bo.SmsbAppointmentInfoBo;
 import com.inspur.digital.domain.bo.SmsbStartInfoBo;
@@ -30,6 +33,7 @@ import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.redis.utils.RedisUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
@@ -62,6 +66,7 @@ public class SmsbAppointmentInfoServiceImpl implements ISmsbAppointmentInfoServi
     private final SmsbDeviceChatScSceneMapper smsbDeviceChatScSceneMapper;
     private final SmsbDeviceChatScCaseMapper smsbDeviceChatScCaseMapper;
     private final SmsbDeviceScScanCodeMapper smsbDeviceScScanCodeMapper;
+    private final SmsbDifyDatasetsQuestionMapper smsbDifyDatasetsQuestionMapper;
     @Autowired
     private ThreadPoolTaskExecutor threadPoolTaskExecutor;
     @Value("${sc.api.url}")
@@ -626,9 +631,28 @@ public class SmsbAppointmentInfoServiceImpl implements ISmsbAppointmentInfoServi
             result.setBaseHelloWorld("你好,我是小数智能分析助手,有什么可以帮你?");
             // TODO 同步公共知识库
             // 1、根据redis key 获取redis value
+            String flag = RedisUtils.getCacheObject(REDIS_SYNC_DATASETS_FLAG_KEY);
             // 2、如果value 是空或者是企业enterpris  同步更新四个知识库为公共条目
-            // 3、如果是common 不做操作
-            // 4、同步成功 设置key的value为common
+            if (!REDIS_SYNC_DATASETS_FLAG_VALUE_COMMON.equals(flag)) {
+                // 同步四个知识库为公共知识库
+                List<SmsbDifyDatasetsQuestionVo> questionVoList = smsbDifyDatasetsQuestionMapper
+                    .selectVoList(new LambdaQueryWrapper<SmsbDifyDatasetsQuestion>()
+                        .eq(SmsbDifyDatasetsQuestion::getTenantId, appointmentInfo.getTenantId()));
+                List<String> qaList = questionVoList.stream()
+                    .map(questionVo -> questionVo.getQuestion() + ":" + questionVo.getAnswer())
+                    .toList();
+                // 线程1 更新诊断报告的知识库
+                syncDatasetsReport(qaList, difyScDatasetReportId);
+                // 线程2 更新有样学样的知识库
+                syncDatasetsCase(qaList, difyScDatasetCaseId);
+                // 线程3 更新套餐推荐的知识库
+                syncDatasetsProduct(qaList, difyScDatasetProductId);
+                // 线程4 更新场景推荐的知识库
+                syncDatasetsScene(qaList, difyScDatasetSceneId);
+                // 3、同步成功 设置key的value为common
+                RedisUtils.setCacheObject(REDIS_SYNC_DATASETS_FLAG_KEY, REDIS_SYNC_DATASETS_FLAG_VALUE_COMMON);
+            }
+            // 4、如果是common 不做操作
             return R.ok(result);
         }
         // 存在预约
@@ -764,6 +788,7 @@ public class SmsbAppointmentInfoServiceImpl implements ISmsbAppointmentInfoServi
         // 线程4 更新场景推荐的知识库
         syncDatasetsScene(sceneContentList, difyScDatasetSceneId);
         // TODO redis缓存同步标识为企业扫识
+        RedisUtils.setCacheObject(REDIS_SYNC_DATASETS_FLAG_KEY, REDIS_SYNC_DATASETS_FLAG_VALUE_ENTERPRISE);
         return R.ok(result);
     }