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 | 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 = { | ... | ... |