Commit 35a28b80e377caa26e525b10f438b99fc006a516

Authored by qianbao
1 parent f57d2eee

AI 对于时间的处理

src/main/java/com/xly/service/XlyErpService.java
1 1 package com.xly.service;
2 2  
  3 +import cn.hutool.core.collection.ListUtil;
3 4 import cn.hutool.core.date.DatePattern;
4 5 import cn.hutool.core.date.DateUtil;
5 6 import cn.hutool.core.util.ObjectUtil;
... ... @@ -36,6 +37,7 @@ import org.springframework.stereotype.Service;
36 37  
37 38 import java.time.Duration;
38 39 import java.util.*;
  40 +import java.util.stream.Collectors;
39 41  
40 42 @Service
41 43 @RequiredArgsConstructor
... ... @@ -452,15 +454,53 @@ public class XlyErpService {
452 454 UserSceneSessionService.ERP_AGENT_CACHE.remove(userId);
453 455 //清除记忆缓存
454 456 operableChatMemoryProvider.clearSpecifiedMemory(userId);
455   - String aiText = "智能体选择成功! 现在可以问她相关问题(如" + String.join("、", session.getCurrentScene().getSSceneContext()) + ")";
  457 + StringBuffer aiText = new StringBuffer().append(" <div style='line-height:1.8;width:100%;'>")
  458 + .append("<div style=\"color: #333;\">")
  459 + .append("智能体选择成功! 现在可以问她相关问题(如" + String.join("、", session.getCurrentScene().getSSceneContext()) + ")")
  460 + .append("</div>");
  461 + //插入用户常用问题
  462 + aiText.append(getSelectAgent(session,1));
456 463 sceneName = ObjectUtil.isNotEmpty(session.getCurrentScene())?session.getCurrentScene().getSSceneName():StrUtil.EMPTY;
457 464 methodName = ObjectUtil.isNotEmpty(session.getCurrentTool())?session.getCurrentTool().getSControlName():StrUtil.EMPTY;
458   - return AiResponseDTO.builder().sSceneName(sceneName).sMethodName(methodName).aiText(aiText).sSceneName(session.getCurrentScene().getSSceneName()).build();
  465 + return AiResponseDTO.builder().sSceneName(sceneName).sMethodName(methodName).aiText(aiText.toString()).sSceneName(session.getCurrentScene().getSSceneName()).build();
459 466 } else {
460 467 // 3. 选择失败:重新展示场景选择提示
461 468 return AiResponseDTO.builder().sSceneName(sceneName).sMethodName(methodName).aiText(session.buildSceneSelectHint()).build();
462 469 }
463 470 }
  471 + /***
  472 + * @Author 钱豹
  473 + * @Date 11:45 2026/3/13
  474 + * @Param []
  475 + * @return java.lang.String
  476 + * @Description 选择智能体成功后获取高频问题列表
  477 + **/
  478 + private String getSelectAgent(UserSceneSession session,Integer page){
  479 + List<ToolMeta> toolMetaAll = session.getAuthTool();
  480 + String sSceneId = session.getCurrentScene().getSId();
  481 + toolMetaAll = toolMetaAll.stream().filter(to-> to.getSSceneId().equals(session.getCurrentScene().getSId())).collect(Collectors.toUnmodifiableList());
  482 + StringBuffer sb = new StringBuffer();
  483 + List<List<ToolMeta>> firstFive = ListUtil.split(toolMetaAll,5);
  484 + List<ToolMeta> showList;
  485 + if(ObjectUtil.isNotEmpty(firstFive.get(page-1))){
  486 + showList = firstFive.get(page-1);
  487 + page = page + 1;
  488 + }else{
  489 + showList = firstFive.get(0);
  490 + page = 1;
  491 + }
  492 + showList.forEach(one->{
  493 + sb.append("<div style=\"color: #4096ff; margin-top: 5px;display:flex;align-items:center;font-size:12px;\" data-action=\"reset\" data-text=\"")
  494 + .append(one.getSMethodName()).append("\" onclick=\"reset(").append(one.getSMethodName()).append("\">")
  495 + .append("<span style=\"display:inline-block; width:5px; height:5px; background-color:#ccc; border-radius:50%; margin-right:5px;\"></span>")
  496 + .append(one.getSMethodName())
  497 + .append(" </div>");
  498 + });
  499 + sb.append("</div>");
  500 + sb.append(" <div style=\"color: #4096ff; margin-top: 5px;width:100%;text-align:right;margin-right:10px;font-size:12px;\" data-action=\"resetTag\" data-text=\"").append(sSceneId).append(",").append(page).append("\" onclick=\"reset(换一换)\">");
  501 + sb.append(" 换一换").append("</div>");
  502 + return sb.toString();
  503 + }
464 504  
465 505 /***
466 506 * @Author 钱豹
... ...
src/main/java/com/xly/tool/DynamicToolProvider.java
... ... @@ -578,11 +578,9 @@ public class DynamicToolProvider implements ToolProvider {
578 578 }
579 579 //{"1":"存储过程","2":"SQL查询","3":"第三方API","4":"ERP未清","5":"ERP列表(报表)","6":"ERP单据","7":"其它","8":"自然语言TEXT2SQL"}
580 580  
581   - if((isConfirmed && 4== meta.getIBizType())
582   - || 1== meta.getIBizType()
  581 + if((isConfirmed && (4== meta.getIBizType() ||1== meta.getIBizType()))
583 582 || 2== meta.getIBizType()
584 583 || 3== meta.getIBizType()
585   - || 5== meta.getIBizType()
586 584 || 6== meta.getIBizType()
587 585 || 7== meta.getIBizType()
588 586 || 8== meta.getIBizType()
... ... @@ -896,7 +894,7 @@ public class DynamicToolProvider implements ToolProvider {
896 894 * @Description 返回结果后 执行业务类
897 895 **/
898 896 private String executeToolAfter(ToolMeta meta, Map<String, Object> args,ToolExecutionRequest toolExecutionRequest,List<ParamRule> paramDefs,UserSceneSession session) {
899   -// {"1":"存储过程","2":"SQL查询","3":"第三方API","4":"窗体查询","5":"按钮执行","6":"其它"}
  897 +// {"1":"存储过程","2":"SQL查询","3":"第三方API","4":"ERP未清","5":"ERP列表(报表)","6":"ERP单据","7":"其它","8":"自然语言TEXT2SQL"}
900 898 String sBizContent = meta.getSBizContent();
901 899 Integer iBizType = meta.getIBizType();
902 900 args.put("sUserId", session.getUserId());
... ...
src/main/resources/templates/chat.html
... ... @@ -468,7 +468,7 @@
468 468 let subsidiaryid= "1111111111";
469 469 let usertype= "sysadmin";
470 470 // let usertype= "General";
471   - let authorization="CE444885A9BCFDDE1FD793F8A0931301E9D7DE6CEDD9DE4B83ECE2219C7829A8F3419238942A93E9AD666629E18D159AF7FE144A6407DE745BA0AEC8B235FC1D5FA8B0D3F9AA55B209A9A2798D3F79A4ECD1B659CAFFD18F0B02D3B44E333373538155B7ADAEE71E899235DC1122F426";
  471 + let authorization="CE444885A9BCFDDE1FD793F8A0931301E9D7DE6CEDD9DE4B83ECE2219C7829A8F3419238942A93E9AD666629E18D159AF7FE144A6407DE745BA0AEC8B235FC1D59FCE41E63C9FE20948A232F9F67AAE5687D4EF8281542FFC87C4EB776974C6A538155B7ADAEE71E899235DC1122F426";
472 472 let hrefLock = window.location.origin+"/xlyAi";
473 473 // ==================== 配置部分 ====================
474 474 const CONFIG = {
... ...