Commit 35a28b80e377caa26e525b10f438b99fc006a516
1 parent
f57d2eee
AI 对于时间的处理
Showing
3 changed files
with
45 additions
and
7 deletions
src/main/java/com/xly/service/XlyErpService.java
| 1 | package com.xly.service; | 1 | package com.xly.service; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.collection.ListUtil; | ||
| 3 | import cn.hutool.core.date.DatePattern; | 4 | import cn.hutool.core.date.DatePattern; |
| 4 | import cn.hutool.core.date.DateUtil; | 5 | import cn.hutool.core.date.DateUtil; |
| 5 | import cn.hutool.core.util.ObjectUtil; | 6 | import cn.hutool.core.util.ObjectUtil; |
| @@ -36,6 +37,7 @@ import org.springframework.stereotype.Service; | @@ -36,6 +37,7 @@ import org.springframework.stereotype.Service; | ||
| 36 | 37 | ||
| 37 | import java.time.Duration; | 38 | import java.time.Duration; |
| 38 | import java.util.*; | 39 | import java.util.*; |
| 40 | +import java.util.stream.Collectors; | ||
| 39 | 41 | ||
| 40 | @Service | 42 | @Service |
| 41 | @RequiredArgsConstructor | 43 | @RequiredArgsConstructor |
| @@ -452,15 +454,53 @@ public class XlyErpService { | @@ -452,15 +454,53 @@ public class XlyErpService { | ||
| 452 | UserSceneSessionService.ERP_AGENT_CACHE.remove(userId); | 454 | UserSceneSessionService.ERP_AGENT_CACHE.remove(userId); |
| 453 | //清除记忆缓存 | 455 | //清除记忆缓存 |
| 454 | operableChatMemoryProvider.clearSpecifiedMemory(userId); | 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 | sceneName = ObjectUtil.isNotEmpty(session.getCurrentScene())?session.getCurrentScene().getSSceneName():StrUtil.EMPTY; | 463 | sceneName = ObjectUtil.isNotEmpty(session.getCurrentScene())?session.getCurrentScene().getSSceneName():StrUtil.EMPTY; |
| 457 | methodName = ObjectUtil.isNotEmpty(session.getCurrentTool())?session.getCurrentTool().getSControlName():StrUtil.EMPTY; | 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 | } else { | 466 | } else { |
| 460 | // 3. 选择失败:重新展示场景选择提示 | 467 | // 3. 选择失败:重新展示场景选择提示 |
| 461 | return AiResponseDTO.builder().sSceneName(sceneName).sMethodName(methodName).aiText(session.buildSceneSelectHint()).build(); | 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 | * @Author 钱豹 | 506 | * @Author 钱豹 |
src/main/java/com/xly/tool/DynamicToolProvider.java
| @@ -578,11 +578,9 @@ public class DynamicToolProvider implements ToolProvider { | @@ -578,11 +578,9 @@ public class DynamicToolProvider implements ToolProvider { | ||
| 578 | } | 578 | } |
| 579 | //{"1":"存储过程","2":"SQL查询","3":"第三方API","4":"ERP未清","5":"ERP列表(报表)","6":"ERP单据","7":"其它","8":"自然语言TEXT2SQL"} | 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 | || 2== meta.getIBizType() | 582 | || 2== meta.getIBizType() |
| 584 | || 3== meta.getIBizType() | 583 | || 3== meta.getIBizType() |
| 585 | - || 5== meta.getIBizType() | ||
| 586 | || 6== meta.getIBizType() | 584 | || 6== meta.getIBizType() |
| 587 | || 7== meta.getIBizType() | 585 | || 7== meta.getIBizType() |
| 588 | || 8== meta.getIBizType() | 586 | || 8== meta.getIBizType() |
| @@ -896,7 +894,7 @@ public class DynamicToolProvider implements ToolProvider { | @@ -896,7 +894,7 @@ public class DynamicToolProvider implements ToolProvider { | ||
| 896 | * @Description 返回结果后 执行业务类 | 894 | * @Description 返回结果后 执行业务类 |
| 897 | **/ | 895 | **/ |
| 898 | private String executeToolAfter(ToolMeta meta, Map<String, Object> args,ToolExecutionRequest toolExecutionRequest,List<ParamRule> paramDefs,UserSceneSession session) { | 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 | String sBizContent = meta.getSBizContent(); | 898 | String sBizContent = meta.getSBizContent(); |
| 901 | Integer iBizType = meta.getIBizType(); | 899 | Integer iBizType = meta.getIBizType(); |
| 902 | args.put("sUserId", session.getUserId()); | 900 | args.put("sUserId", session.getUserId()); |
src/main/resources/templates/chat.html
| @@ -468,7 +468,7 @@ | @@ -468,7 +468,7 @@ | ||
| 468 | let subsidiaryid= "1111111111"; | 468 | let subsidiaryid= "1111111111"; |
| 469 | let usertype= "sysadmin"; | 469 | let usertype= "sysadmin"; |
| 470 | // let usertype= "General"; | 470 | // let usertype= "General"; |
| 471 | - let authorization="CE444885A9BCFDDE1FD793F8A0931301E9D7DE6CEDD9DE4B83ECE2219C7829A8F3419238942A93E9AD666629E18D159AF7FE144A6407DE745BA0AEC8B235FC1D5FA8B0D3F9AA55B209A9A2798D3F79A4ECD1B659CAFFD18F0B02D3B44E333373538155B7ADAEE71E899235DC1122F426"; | 471 | + let authorization="CE444885A9BCFDDE1FD793F8A0931301E9D7DE6CEDD9DE4B83ECE2219C7829A8F3419238942A93E9AD666629E18D159AF7FE144A6407DE745BA0AEC8B235FC1D59FCE41E63C9FE20948A232F9F67AAE5687D4EF8281542FFC87C4EB776974C6A538155B7ADAEE71E899235DC1122F426"; |
| 472 | let hrefLock = window.location.origin+"/xlyAi"; | 472 | let hrefLock = window.location.origin+"/xlyAi"; |
| 473 | // ==================== 配置部分 ==================== | 473 | // ==================== 配置部分 ==================== |
| 474 | const CONFIG = { | 474 | const CONFIG = { |