Commit 80001927074cce387c3ff6f6b1e47eaeb8bb7c49

Authored by qianbao
1 parent bba86a8d

添加未清选择 改成动态引导语

src/main/java/com/xly/service/QuoService.java
1 package com.xly.service; 1 package com.xly.service;
2 2
3 -import cn.hutool.core.text.CharSequenceUtil;  
4 import cn.hutool.core.util.ObjectUtil; 3 import cn.hutool.core.util.ObjectUtil;
5 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
6 import cn.hutool.json.JSONUtil; 5 import cn.hutool.json.JSONUtil;
7 import com.alibaba.fastjson2.JSONObject; 6 import com.alibaba.fastjson2.JSONObject;
8 -import com.xly.agent.SystemPromptGenerator;  
9 -import com.xly.constant.ErrorCode;  
10 -import com.xly.constant.ProcedureConstant;  
11 import com.xly.entity.ParamRule; 7 import com.xly.entity.ParamRule;
12 -import com.xly.entity.ToolMeta;  
13 import com.xly.entity.UserSceneSession; 8 import com.xly.entity.UserSceneSession;
14 -import com.xly.exception.dto.BusinessException;  
15 -import com.xly.mapper.DynamicExeDbMapper;  
16 -import com.xly.util.DeepCopyUtils;  
17 import lombok.RequiredArgsConstructor; 9 import lombok.RequiredArgsConstructor;
18 import lombok.extern.slf4j.Slf4j; 10 import lombok.extern.slf4j.Slf4j;
19 -import org.apache.commons.lang3.StringUtils;  
20 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
21 12
22 import java.util.*; 13 import java.util.*;
23 import java.util.stream.Collectors; 14 import java.util.stream.Collectors;
24 -import java.util.stream.Stream;  
25 -  
26 /*** 15 /***
27 * @Author 钱豹 16 * @Author 钱豹
28 * @Date 0:06 2026/7/7 17 * @Date 0:06 2026/7/7
@@ -43,131 +32,160 @@ public class QuoService { @@ -43,131 +32,160 @@ public class QuoService {
43 * @return java.util.Map<java.lang.String,java.lang.Object> 32 * @return java.util.Map<java.lang.String,java.lang.Object>
44 * @Description 报价获取参数组装 33 * @Description 报价获取参数组装
45 **/ 34 **/
46 - public Map<String,Object> getQuoData(Map<String,Object> argsNew, UserSceneSession session, List<ParamRule> dynamicParamRule){ 35 + public Map<String,Object> getQuoData(Map<String,Object> args, UserSceneSession session){
47 //获取当前方法 36 //获取当前方法
48 Map<String,Object> retData = new HashMap<>(); 37 Map<String,Object> retData = new HashMap<>();
49 - ToolMeta meta = session.getCurrentTool();  
50 - //放入方法动态参数中  
51 - meta.setDynamicParamRule(dynamicParamRule);  
52 - session.setCurrentTool(meta);  
53 - Map<String, Object> argsOld = session.getArgs();  
54 - Map<String, Object> args = DeepCopyUtils.deepCopy(argsNew);  
55 - if(ObjectUtil.isEmpty(argsOld)){  
56 - argsOld = new HashMap<>();  
57 - }  
58 - argsOld.putAll(args);  
59 - session.setArgs(argsOld);  
60 - List<ParamRule> dataAll = session.getCurrentTool().getParamRuleListAll();  
61 - //获取产品的参数  
62 - List<ParamRule> dataProduct = dataAll.stream().filter(one-> "产品".equals(one.getSGroup()) && !one.getBDynamicParam() ).collect(Collectors.toUnmodifiableList());  
63 - List<ParamRule> dataPart = dataAll.stream().filter(one-> "部件".equals(one.getSGroup()) && !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList());  
64 - List<ParamRule> datasDynamicPart = dataAll.stream().filter(one-> "sDynamicPart".equals(one.getSParamValue()) && !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList());  
65 - List<Map<String,Object>> sAll = new ArrayList<>();  
66 - List<Map<String,Object>> productList = new ArrayList<>();  
67 - Map<String, Object> finalArgsOld = argsOld;  
68 - dataProduct.forEach(p->{  
69 - Map<String,Object> product = new HashMap<>();  
70 - String sValue = ObjectUtil.isNotEmpty(finalArgsOld.get(p.getSParam()))? finalArgsOld.get(p.getSParam()).toString():(ObjectUtil.isNotEmpty(finalArgsOld.get(p.getSParam()))? finalArgsOld.get(p.getSParam()).toString():StrUtil.EMPTY);  
71 - product.put("sName",p.getSParamValue());  
72 - product.put("showName",p.getSParam());  
73 - product.put("bEmpty",p.getBEmpty());  
74 - product.put("sValue", sValue);  
75 - product.put("sParamMissMemo", p.getSParamMissMemo()==null?StrUtil.EMPTY:p.getSParamMissMemo());  
76 - product.put("iOrder", p.getIOrder());  
77 - product.put("sParamConfigValue",p.getSParamConfigValue()==null?StrUtil.EMPTY:p.getSParamConfigValue());  
78 - productList.add(product);  
79 - });  
80 - List<Map<String,Object>> partList = new ArrayList<>();  
81 - dataPart.forEach(p->{  
82 - Map<String,Object> part = new HashMap<>();  
83 - String sValue = ObjectUtil.isNotEmpty(finalArgsOld.get(p.getSParam()))?finalArgsOld.get(p.getSParam()).toString():(ObjectUtil.isNotEmpty(finalArgsOld.get(p.getSParam()))? finalArgsOld.get(p.getSParam()).toString():StrUtil.EMPTY);  
84 - part.put("sPartName",p.getSParam().split("-")[0]);  
85 - part.put("sName",p.getSParamValue());  
86 - part.put("showName",p.getSParam());  
87 - part.put("bEmpty",p.getBEmpty());  
88 - part.put("sValue", sValue);  
89 - part.put("iOrder", p.getIOrder());  
90 - part.put("sParamMissMemo", p.getSParamMissMemo()==null?StrUtil.EMPTY:p.getSParamMissMemo());  
91 - part.put("sParamConfigValue",p.getSParamConfigValue()==null?StrUtil.EMPTY:p.getSParamConfigValue());  
92 - //获取动态参数  
93 - if(ObjectUtil.isNotEmpty(sValue)){  
94 - List<ParamRule> dataParamDynamic = dataAll.stream().filter(d -> sValue.equals(d.getSDynamicParam()) && p.getSParamValue().equals(d.getSDynamicParamName())&&d.getBDynamicParam()).collect(Collectors.toUnmodifiableList());  
95 - if(ObjectUtil.isNotEmpty(dataParamDynamic)){  
96 - List<Map<String,Object>> dynamicData = new ArrayList<>();  
97 - dataParamDynamic.forEach(dynamic->{  
98 - Map<String,Object> dynamicOne = new HashMap<>();  
99 - String dynamicValue = ObjectUtil.isNotEmpty(finalArgsOld.get(dynamic.getSParam()))?finalArgsOld.get(dynamic.getSParam()).toString():(ObjectUtil.isNotEmpty(finalArgsOld.get(dynamic.getSParam()))? finalArgsOld.get(dynamic.getSParam()).toString():StrUtil.EMPTY);  
100 - dynamicOne.put("sName",dynamic.getSParamValue());  
101 - dynamicOne.put("showName",dynamic.getSParam());  
102 - dynamicOne.put("bEmpty",dynamic.getBEmpty());  
103 - dynamicOne.put("sValue", dynamicValue);  
104 - dynamicOne.put("iOrder", dynamic.getIOrder());  
105 - dynamicOne.put("sParamMissMemo", dynamic.getSParamMissMemo()==null?StrUtil.EMPTY:dynamic.getSParamMissMemo());  
106 - dynamicOne.put("sParamConfigValue",dynamic.getSParamConfigValue()==null?StrUtil.EMPTY:dynamic.getSParamConfigValue());  
107 - //获取动态参数  
108 - dynamicData.add(dynamicOne); 38 + try{
  39 + if(ObjectUtil.isEmpty(args)){
  40 + args = new HashMap<>();
  41 + }
  42 + List<ParamRule> dataAll = session.getCurrentTool().getParamRuleListAll();
  43 + //获取产品的参数
  44 + List<ParamRule> dataProduct = dataAll.stream().filter(one-> "产品".equals(one.getSGroup()) && !one.getBDynamicParam() ).collect(Collectors.toUnmodifiableList());
  45 + List<ParamRule> dataPart = dataAll.stream().filter(one-> "部件".equals(one.getSGroup()) && !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList());
  46 + List<ParamRule> datasDynamicPart = dataAll.stream().filter(one-> "sDynamicPart".equals(one.getSParamValue()) && !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList());
  47 + List<Map<String,Object>> sAll = new ArrayList<>();
  48 + List<Map<String,Object>> productList = new ArrayList<>();
  49 + Map<String, Object> finalArgsOld = args;
  50 + dataProduct.forEach(p->{
  51 + Map<String,Object> product = new HashMap<>();
  52 + Object sValue = getValue( p,finalArgsOld);
  53 + product.put("sName",p.getSParamValue());
  54 + product.put("showName",p.getSParam());
  55 + product.put("bEmpty",p.getBEmpty());
  56 + product.put("sValue", sValue);
  57 + product.put("sParamMissMemo", p.getSParamMissMemo()==null?StrUtil.EMPTY:p.getSParamMissMemo());
  58 + product.put("iOrder", p.getIOrder());
  59 + product.put("sParamConfigValue",p.getSParamConfigValue()==null?StrUtil.EMPTY:p.getSParamConfigValue());
  60 + productList.add(product);
  61 + });
  62 + List<Map<String,Object>> partList = new ArrayList<>();
  63 + dataPart.forEach(p->{
  64 + Object sVal = getValue( p,finalArgsOld);
  65 + List<String> addValue = new ArrayList<>();
  66 + if(JSONUtil.isTypeJSONArray(sVal.toString())){
  67 + addValue = JSONUtil.toList(sVal.toString(),String.class);
  68 + }else{
  69 + addValue.add(sVal.toString());
  70 + }
  71 + for(String sValue:addValue){
  72 + Map<String,Object> part = new HashMap<>();
  73 + part.put("sPartName",p.getSParam().split("-")[0]);
  74 + part.put("sName",p.getSParamValue());
  75 + part.put("showName",p.getSParam());
  76 + part.put("bEmpty",p.getBEmpty());
  77 + part.put("sValue", sValue);
  78 + part.put("iOrder", p.getIOrder());
  79 + part.put("sParamMissMemo", p.getSParamMissMemo()==null?StrUtil.EMPTY:p.getSParamMissMemo());
  80 + part.put("sParamConfigValue",p.getSParamConfigValue()==null?StrUtil.EMPTY:p.getSParamConfigValue());
  81 + //获取动态参数
  82 + adddynamicData( sValue, dataAll, p, finalArgsOld, sAll, part);
  83 + partList.add(part);
  84 + }
  85 + });
  86 + //动态部件
  87 + if(ObjectUtil.isNotEmpty(datasDynamicPart)){
  88 + String datasDynamicPartValue = ObjectUtil.isNotEmpty(finalArgsOld.get("sDynamicPart"))? finalArgsOld.get("sDynamicPart").toString(): StrUtil.EMPTY;
  89 +// :(ObjectUtil.isNotEmpty(finalArgsOld.get(p.getSParam()))? finalArgsOld.get(p.getSParam()).toString():StrUtil.EMPTY);
  90 + if(StrUtil.isNotEmpty(datasDynamicPartValue)){
  91 + List<String> datasDynamicPartArray = new ArrayList<>();
  92 + if(JSONUtil.isTypeJSONArray(datasDynamicPartValue.toString())){
  93 + datasDynamicPartArray = JSONUtil.toList(datasDynamicPartValue.toString(),String.class);
  94 + }else{
  95 + datasDynamicPartArray.add(datasDynamicPartValue);
  96 + }
  97 + datasDynamicPartArray.forEach(one->{
  98 + List<ParamRule> dataPartDynamic = dataAll.stream().filter(d ->
  99 + one.equals(d.getSDynamicParam())
  100 + && "动态部件".equals(d.getSDynamicParamName()
  101 + )&&d.getBDynamicParam()
  102 + ).collect(Collectors.toUnmodifiableList());
  103 + if(ObjectUtil.isNotEmpty(dataPartDynamic)){
  104 + dataPartDynamic.forEach(dynamic->{
  105 + Object sVal = getValue( dynamic,finalArgsOld);
  106 + List<String> addValue = new ArrayList<>();
  107 + if(JSONUtil.isTypeJSONArray(sVal.toString())){
  108 + addValue = JSONUtil.toList(sVal.toString(),String.class);
  109 + }else{
  110 + addValue.add(sVal.toString());
  111 + }
  112 + for(String sValue:addValue){
  113 + Map<String,Object> part = new HashMap<>();
  114 + Object dynamicValue = getValue( dynamic,finalArgsOld);
  115 + part.put("sPartName",one);
  116 + part.put("sName",dynamic.getSParamValue());
  117 + part.put("showName",dynamic.getSParam());
  118 + part.put("bEmpty",dynamic.getBEmpty());
  119 + part.put("sValue", dynamicValue);
  120 + part.put("iOrder", dynamic.getIOrder());
  121 + part.put("sParamConfigValue",dynamic.getSParamConfigValue());
  122 + part.put("sParamMissMemo", dynamic.getSParamMissMemo());
  123 + //获取动态参数
  124 + adddynamicData(sValue,dataAll, dynamic, finalArgsOld, sAll, part);
  125 + partList.add(part);
  126 + }
  127 + });
  128 + }
109 }); 129 });
110 - sAll.addAll(dynamicData);  
111 - part.put("dynamicData",dynamicData);  
112 } 130 }
113 } 131 }
  132 + sAll.addAll(productList);
  133 + sAll.addAll(partList);
  134 + retData.put("sAll",sAll);
  135 + retData.put("product",productList);
  136 + retData.put("partList",partList);
  137 + }catch (Exception e){
114 138
115 - partList.add(part);  
116 - });  
117 - //动态部件  
118 - if(ObjectUtil.isNotEmpty(datasDynamicPart)){  
119 - String datasDynamicPartValue = ObjectUtil.isNotEmpty(finalArgsOld.get("sDynamicPart"))? finalArgsOld.get("sDynamicPart").toString(): StrUtil.EMPTY;  
120 -// :(ObjectUtil.isNotEmpty(finalArgsOld.get(p.getSParam()))? finalArgsOld.get(p.getSParam()).toString():StrUtil.EMPTY);  
121 - if(StrUtil.isNotEmpty(datasDynamicPartValue)){  
122 - List<String> datasDynamicPartArray = Collections.singletonList(JSONObject.parseObject(datasDynamicPartValue, String.class));  
123 - datasDynamicPartArray.forEach(one->{  
124 - List<ParamRule> dataPartDynamic = dataAll.stream().filter(d -> one.equals(d.getSDynamicParam()) && "sDynamicPart".equals(d.getSDynamicParamName())&&d.getBDynamicParam()).collect(Collectors.toUnmodifiableList());  
125 - if(ObjectUtil.isNotEmpty(dataPartDynamic)){  
126 - dataPartDynamic.forEach(dynamic->{  
127 - Map<String,Object> part = new HashMap<>();  
128 - String sValue = ObjectUtil.isNotEmpty(finalArgsOld.get(dynamic.getSParam()))?finalArgsOld.get(dynamic.getSParam()).toString():(ObjectUtil.isNotEmpty(finalArgsOld.get(dynamic.getSParam()))? finalArgsOld.get(dynamic.getSParam()).toString():StrUtil.EMPTY);  
129 - part.put("sPartName",one);  
130 - part.put("sName",dynamic.getSParamValue());  
131 - part.put("showName",dynamic.getSParam());  
132 - part.put("bEmpty",dynamic.getBEmpty());  
133 - part.put("sValue", sValue);  
134 - part.put("iOrder", dynamic.getIOrder());  
135 - part.put("sParamConfigValue",dynamic.getSParamConfigValue());  
136 - part.put("sParamMissMemo", dynamic.getSParamMissMemo());  
137 - //获取动态参数  
138 - if(ObjectUtil.isNotEmpty(sValue)){  
139 - List<ParamRule> dataParamDynamic = dataAll.stream().filter(d -> sValue.equals(d.getSDynamicParam()) && dynamic.getSParamValue().equals(d.getSDynamicParamName())&&d.getBDynamicParam()).collect(Collectors.toUnmodifiableList());  
140 - if(ObjectUtil.isNotEmpty(dataParamDynamic)){  
141 - List<Map<String,Object>> dynamicData = new ArrayList<>();  
142 - dataParamDynamic.forEach(dynamicD->{  
143 - Map<String,Object> dynamicOne = new HashMap<>();  
144 - String dynamicValue = ObjectUtil.isNotEmpty(finalArgsOld.get(dynamicD.getSParam()))?finalArgsOld.get(dynamicD.getSParam()).toString():(ObjectUtil.isNotEmpty(finalArgsOld.get(dynamicD.getSParam()))? finalArgsOld.get(dynamicD.getSParam()).toString():StrUtil.EMPTY);  
145 - dynamicOne.put("sName",dynamicD.getSParamValue());  
146 - dynamicOne.put("showName",dynamicD.getSParam());  
147 - dynamicOne.put("bEmpty",dynamicD.getBEmpty());  
148 - dynamicOne.put("sValue", dynamicValue);  
149 - dynamicOne.put("iOrder", dynamicD.getIOrder());  
150 - dynamicOne.put("sParamMissMemo", dynamicD.getSParamMissMemo()==null?StrUtil.EMPTY:dynamicD.getSParamMissMemo());  
151 - dynamicOne.put("sParamConfigValue",dynamicD.getSParamConfigValue()==null?StrUtil.EMPTY:dynamicD.getSParamConfigValue());  
152 - //获取动态参数  
153 - dynamicData.add(dynamicOne);  
154 - });  
155 - sAll.addAll(dynamicData);  
156 - part.put("dynamicData",dynamicData);  
157 - }  
158 - }  
159 - partList.add(part);  
160 - });  
161 - } 139 + }
  140 +
  141 + return retData;
  142 + }
  143 + /***
  144 + * @Author 钱豹
  145 + * @Date 23:00 2026/7/7
  146 + * @Param [p, finalArgs]
  147 + * @return void
  148 + * @Description 添加动态参数值
  149 + **/
  150 + private void adddynamicData(Object sValue,List<ParamRule> dataAll,ParamRule p, Map<String, Object> finalArgsOld, List<Map<String,Object>> sAll, Map<String,Object> part){
  151 + if(ObjectUtil.isNotEmpty(sValue)){
  152 + //根据值获取动态部件
  153 + List<ParamRule> dataParamDynamic = dataAll.stream().filter(d ->
  154 + d.getBDynamicParam()
  155 + && sValue.equals(d.getSDynamicParam())
  156 + && p.getSParam().equals(d.getSDynamicParamName())
  157 + ).collect(Collectors.toUnmodifiableList());
  158 + if(ObjectUtil.isNotEmpty(dataParamDynamic)){
  159 + List<Map<String,Object>> dynamicData = new ArrayList<>();
  160 + dataParamDynamic.forEach(dynamic->{
  161 + Map<String,Object> dynamicOne = new HashMap<>();
  162 + Object dynamicValue = getValue( p,finalArgsOld);
  163 + dynamicOne.put("sName",dynamic.getSParamValue());
  164 + dynamicOne.put("showName",dynamic.getSParam());
  165 + dynamicOne.put("bEmpty",dynamic.getBEmpty());
  166 + dynamicOne.put("sValue", dynamicValue);
  167 + dynamicOne.put("iOrder", dynamic.getIOrder());
  168 + dynamicOne.put("sParamMissMemo", dynamic.getSParamMissMemo()==null?StrUtil.EMPTY:dynamic.getSParamMissMemo());
  169 + dynamicOne.put("sParamConfigValue",dynamic.getSParamConfigValue()==null?StrUtil.EMPTY:dynamic.getSParamConfigValue());
  170 + //获取动态参数
  171 + dynamicData.add(dynamicOne);
162 }); 172 });
  173 + sAll.addAll(dynamicData);
  174 + part.put("dynamicData",dynamicData);
163 } 175 }
164 } 176 }
165 - sAll.addAll(productList);  
166 - sAll.addAll(partList);  
167 - retData.put("sAll",sAll);  
168 - retData.put("product",productList);  
169 - retData.put("partList",partList);  
170 - return retData; 177 + }
  178 +
  179 + private Object getValue(ParamRule p,Map<String, Object> finalArgs){
  180 + Object value = ObjectUtil.isNotEmpty(finalArgs.get(p.getSParam()))?
  181 + finalArgs.get(p.getSParam()).toString()
  182 + :(ObjectUtil.isNotEmpty(finalArgs.get(p.getSParam()))?
  183 + finalArgs.get(p.getSParam()).toString():StrUtil.EMPTY);
  184 + if("0".equals(value)){
  185 + return StrUtil.EMPTY;
  186 + }else{
  187 + return value;
  188 + }
171 } 189 }
172 190
173 } 191 }
174 \ No newline at end of file 192 \ No newline at end of file
src/main/java/com/xly/service/XlyErpService.java
@@ -460,20 +460,21 @@ public class XlyErpService { @@ -460,20 +460,21 @@ public class XlyErpService {
460 session.setBCleanMemory(false); 460 session.setBCleanMemory(false);
461 session.setCurrentRowData(null); 461 session.setCurrentRowData(null);
462 session.setQuoData(null); 462 session.setQuoData(null);
463 -  
464 ToolMeta toolMeta = session.getCurrentTool(); 463 ToolMeta toolMeta = session.getCurrentTool();
465 - List<ParamRule> data = toolMeta.getParamRuleListAll();  
466 - List<ParamRule> data2 = toolMeta.getParamRuleList();  
467 - List<ParamRule> data3 = toolMeta.getParamRuleListCheck();  
468 - data = data.stream().filter(one-> !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList());  
469 - data2 = data2.stream().filter(one-> !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList());  
470 - data2 = data2.stream().filter(one-> !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList());  
471 - data3 = data3.stream().filter(one-> !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList());  
472 - toolMeta.setDynamicParamRule(null);  
473 - toolMeta.setParamRuleListAll(data);  
474 - toolMeta.setParamRuleList(data2);  
475 - toolMeta.setParamRuleListCheck(data3);  
476 - session.setCurrentTool(toolMeta); 464 + if(toolMeta!=null && ObjectUtil.isNotEmpty(toolMeta)){
  465 + List<ParamRule> data = toolMeta.getParamRuleListAll();
  466 + List<ParamRule> data2 = toolMeta.getParamRuleList();
  467 + List<ParamRule> data3 = toolMeta.getParamRuleListCheck();
  468 + data = data.stream().filter(one-> !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList());
  469 + data2 = data2.stream().filter(one-> !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList());
  470 + data2 = data2.stream().filter(one-> !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList());
  471 + data3 = data3.stream().filter(one-> !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList());
  472 + toolMeta.setDynamicParamRule(null);
  473 + toolMeta.setParamRuleListAll(data);
  474 + toolMeta.setParamRuleList(data2);
  475 + toolMeta.setParamRuleListCheck(data3);
  476 + session.setCurrentTool(toolMeta);
  477 + }
477 session.setCurrentRowData(null); 478 session.setCurrentRowData(null);
478 UserSceneSessionService.USER_SCENE_SESSION_CACHE.put(userId, session); 479 UserSceneSessionService.USER_SCENE_SESSION_CACHE.put(userId, session);
479 // 清空Agent缓存 480 // 清空Agent缓存
src/main/java/com/xly/tool/DynamicToolProvider.java
@@ -6,7 +6,6 @@ import cn.hutool.core.date.DateUtil; @@ -6,7 +6,6 @@ import cn.hutool.core.date.DateUtil;
6 import cn.hutool.core.util.BooleanUtil; 6 import cn.hutool.core.util.BooleanUtil;
7 import cn.hutool.core.util.ObjectUtil; 7 import cn.hutool.core.util.ObjectUtil;
8 import cn.hutool.core.util.StrUtil; 8 import cn.hutool.core.util.StrUtil;
9 -import cn.hutool.json.JSONArray;  
10 import cn.hutool.json.JSONUtil; 9 import cn.hutool.json.JSONUtil;
11 import com.alibaba.fastjson2.JSONObject; 10 import com.alibaba.fastjson2.JSONObject;
12 import com.fasterxml.jackson.core.type.TypeReference; 11 import com.fasterxml.jackson.core.type.TypeReference;
@@ -42,7 +41,6 @@ import java.util.*; @@ -42,7 +41,6 @@ import java.util.*;
42 41
43 import java.util.concurrent.ConcurrentHashMap; 42 import java.util.concurrent.ConcurrentHashMap;
44 import java.util.concurrent.atomic.AtomicReference; 43 import java.util.concurrent.atomic.AtomicReference;
45 -import java.util.function.Function;  
46 import java.util.stream.Collectors; 44 import java.util.stream.Collectors;
47 import java.util.stream.IntStream; 45 import java.util.stream.IntStream;
48 46
@@ -186,18 +184,7 @@ public class DynamicToolProvider implements ToolProvider { @@ -186,18 +184,7 @@ public class DynamicToolProvider implements ToolProvider {
186 if(ObjectUtil.isEmpty(args)) args = new HashMap<>(); 184 if(ObjectUtil.isEmpty(args)) args = new HashMap<>();
187 Map<String, Object> finalArgs = args; 185 Map<String, Object> finalArgs = args;
188 argsNew.forEach((k, v)->{ 186 argsNew.forEach((k, v)->{
189 - //需要移除的老的参数  
190 - List<ParamRule> data = meta.getParamRuleList().stream().filter(  
191 - one-> one.getSParam().equals(k)  
192 - && ObjectUtil.isNotEmpty(v)  
193 - && !"0".equals(v)  
194 - && !"\"\"".equals(v)  
195 - ).collect(Collectors.toUnmodifiableList());  
196 - if(ObjectUtil.isNotEmpty(data) && data.size()>0){  
197 - finalArgs.remove(data.get(0).getSParamValue());  
198 - finalArgs.remove(data.get(0).getSParam());  
199 - }  
200 - if(ObjectUtil.isNotEmpty(v)){ 187 + if(Validator.isValid(v)){
201 finalArgs.put(k,v); 188 finalArgs.put(k,v);
202 } 189 }
203 }); 190 });
@@ -214,24 +201,6 @@ public class DynamicToolProvider implements ToolProvider { @@ -214,24 +201,6 @@ public class DynamicToolProvider implements ToolProvider {
214 // 2.1 【自动补全】应用参数的默认值 201 // 2.1 【自动补全】应用参数的默认值
215 List<ParamRule> paramRuleData = meta.getParamRuleListAll(); 202 List<ParamRule> paramRuleData = meta.getParamRuleListAll();
216 args = applyDefaultValues(args, paramRuleData); 203 args = applyDefaultValues(args, paramRuleData);
217 - //存入已采集参数  
218 - session.setArgs(args);  
219 - // 2.1.1 根据当前获取的新参数判断是否存在有值必填例如动态参数、动态部件  
220 - if(meta.getBQuo()){  
221 - List<ParamRule> dynamicParamRule = doSetParamgetArgsAfter(args, session);  
222 - if(ObjectUtil.isNotEmpty(dynamicParamRule)){  
223 - Map<String,Object> data = quoService.getQuoData( argsNew, session, dynamicParamRule);  
224 - data.remove("sAll");  
225 - data.put("bTs",true);  
226 - String askMsg = JSONObject.toJSONString(data);  
227 - session.setSFunPrompts(askMsg);  
228 - String sSystemPrompt = SystemPromptGenerator.buildMissParamPrompt(session,dynamicParamRule);  
229 - session.setSSystemPrompt(sSystemPrompt);  
230 - // 需要提问用户 → 抛异常停止循环  
231 - return String.valueOf(successResult(toolExecutionRequest, askMsg));  
232 - }  
233 - }  
234 -  
235 //客户选择行号转sSLaveId 204 //客户选择行号转sSLaveId
236 if(ObjectUtil.isNotEmpty(args) 205 if(ObjectUtil.isNotEmpty(args)
237 &&( 206 &&(
@@ -243,6 +212,16 @@ public class DynamicToolProvider implements ToolProvider { @@ -243,6 +212,16 @@ public class DynamicToolProvider implements ToolProvider {
243 } 212 }
244 //存入已采集参数 213 //存入已采集参数
245 session.setArgs(args); 214 session.setArgs(args);
  215 + // 2.1.1 根据当前获取的新参数判断是否存在有值必填例如动态参数、动态部件
  216 + if(meta.getBQuo()){
  217 + List<ParamRule> dynamicParamRule = doSetParamgetArgsAfter(args, session);
  218 + if(ObjectUtil.isNotEmpty(dynamicParamRule)){
  219 +// Map<String,Object> data = quoService.getQuoData( args, session);
  220 + session.getCurrentTool().setDynamicParamRule(dynamicParamRule);
  221 +// String sSystemPrompt = SystemPromptGenerator.buildMissParamPrompt(session,dynamicParamRule);
  222 +// session.setSSystemPrompt(sSystemPrompt);
  223 + }
  224 + }
246 //获取是否缺失参数 225 //获取是否缺失参数
247 String askMsg = getMissParamMsg( meta, session, args); 226 String askMsg = getMissParamMsg( meta, session, args);
248 if(ObjectUtil.isNotEmpty(askMsg)){ 227 if(ObjectUtil.isNotEmpty(askMsg)){
@@ -251,6 +230,8 @@ public class DynamicToolProvider implements ToolProvider { @@ -251,6 +230,8 @@ public class DynamicToolProvider implements ToolProvider {
251 String resp = StrUtil.EMPTY; 230 String resp = StrUtil.EMPTY;
252 if(session.getCurrentTool().getBQuo()){ 231 if(session.getCurrentTool().getBQuo()){
253 resp = JSONUtil.toJsonStr(session.getQuoData()); 232 resp = JSONUtil.toJsonStr(session.getQuoData());
  233 + session.setSFunPrompts(resp);
  234 + return resp;
254 }else{ 235 }else{
255 resp = JSONUtil.toJsonStr(args) ; 236 resp = JSONUtil.toJsonStr(args) ;
256 } 237 }
@@ -275,51 +256,44 @@ public class DynamicToolProvider implements ToolProvider { @@ -275,51 +256,44 @@ public class DynamicToolProvider implements ToolProvider {
275 argsOld = new HashMap<>(); 256 argsOld = new HashMap<>();
276 } 257 }
277 //根据新录入的参数获取规则 258 //根据新录入的参数获取规则
278 - AtomicReference<List<ParamRule>> paramRuleDataAll = new AtomicReference<>(tool.getParamRuleListAll());  
279 - List<ParamRule> paramRuleData = tool.getParamRuleListAll();  
280 - paramRuleData = paramRuleData.stream().filter(one->  
281 - ( ObjectUtil.isNotEmpty(args.get(one.getSParam())) ||ObjectUtil.isNotEmpty(args.get(one.getSParamValue()))) 259 + List<ParamRule> paramRuleDataAll = tool.getParamRuleListAll();
  260 + //动态参数
  261 + List<ParamRule> paramRuleData = paramRuleDataAll.stream().filter(one->
  262 + ( ObjectUtil.isNotEmpty(args.get(one.getSParam())) || ObjectUtil.isNotEmpty(args.get(one.getSParamValue())))
282 && ObjectUtil.isNotEmpty(one.getSDynamicParamRuleSql()) 263 && ObjectUtil.isNotEmpty(one.getSDynamicParamRuleSql())
283 ).collect(Collectors.toUnmodifiableList()); 264 ).collect(Collectors.toUnmodifiableList());
  265 + //为空的时候需要重新插入不为空 表示之前已经放过了
  266 + //根据新参数获取需要填写参数
284 List<ParamRule> dynamicParamRule = new ArrayList<>(); 267 List<ParamRule> dynamicParamRule = new ArrayList<>();
285 - //为空的时候需要重新插入 不为空 表示之前已经放过了 268 + AtomicReference<List<ParamRule>> paramRuleDataAllNew = new AtomicReference<>(paramRuleDataAll);
286 if(ObjectUtil.isNotEmpty(paramRuleData)){ 269 if(ObjectUtil.isNotEmpty(paramRuleData)){
287 Map<String, Object> finalArgsOld = argsOld; 270 Map<String, Object> finalArgsOld = argsOld;
288 paramRuleData.forEach(one->{ 271 paramRuleData.forEach(one->{
289 - //根据新参数获取需要填写参数  
290 Map<String,Object> searMap = new HashMap<>(); 272 Map<String,Object> searMap = new HashMap<>();
291 searMap.putAll(args); 273 searMap.putAll(args);
292 //新参数如果值变了移除掉之前插入的 274 //新参数如果值变了移除掉之前插入的
293 - List<ParamRule> paramRuleDataAllNew = paramRuleDataAll.get().stream().filter(d->  
294 - !one.getSParam().equals(d.getSDynamicParam())  
295 - ||(one.getSParam().equals(d.getSDynamicParam()) && one.getSParamValue().equals(d.getSParamValue()))  
296 - ).collect(Collectors.toUnmodifiableList());  
297 - List<ParamRule> paramRuleList = tool.getParamRuleList().stream().filter(d->  
298 - !one.getSParam().equals(d.getSDynamicParam())  
299 - ||(one.getSParam().equals(d.getSDynamicParam()) && one.getSParamValue().equals(d.getSParamValue()))  
300 - ).collect(Collectors.toUnmodifiableList());  
301 - List<ParamRule> paramRuleListCheck = tool.getParamRuleListCheck().stream().filter(d->  
302 - !one.getSParam().equals(d.getSDynamicParam())  
303 - ||(one.getSParam().equals(d.getSDynamicParam()) && one.getSParamValue().equals(d.getSParamValue()))  
304 - ).collect(Collectors.toUnmodifiableList());  
305 - paramRuleDataAllNew = deduplicateByParamValue(paramRuleDataAllNew);  
306 - paramRuleList = deduplicateByParamValue(paramRuleList);  
307 - paramRuleListCheck = deduplicateByParamValue(paramRuleListCheck);  
308 - session.getCurrentTool().setParamRuleList(paramRuleList);  
309 - session.getCurrentTool().setParamRuleListAll(paramRuleDataAllNew);  
310 - session.getCurrentTool().setParamRuleListCheck(paramRuleListCheck);  
311 -// paramRuleDataAll.set(paramRuleDataAllNew);  
312 - List<ParamRule> paramRuleDataD = paramRuleDataAll.get().stream().filter(d-> searMap.get(one.getSParam()).equals(d.getSDynamicParam())).collect(Collectors.toUnmodifiableList());  
313 - //如果不存在的加入方法参数中  
314 - if(ObjectUtil.isEmpty(paramRuleDataD)){  
315 - String sValue = searMap.get(one.getSParam()).toString();  
316 - List<String> addValue = new ArrayList<>();  
317 - if(JSONUtil.isTypeJSONArray(sValue)){  
318 - addValue = JSONUtil.toList(sValue,String.class);  
319 - }else{  
320 - addValue.add(sValue);  
321 - }  
322 - for(String sVaule:addValue){ 275 + paramRuleDataAllNew.set(paramRuleDataAll.stream().filter(d ->
  276 + !one.getSParam().equals(d.getSDynamicParam())
  277 + || (one.getSParam().equals(d.getSDynamicParam()) && one.getSParamValue().equals(d.getSParamValue()))
  278 + ).collect(Collectors.toUnmodifiableList()));
  279 +
  280 + String sValue = searMap.get(one.getSParam()).toString();
  281 + List<String> addValue = new ArrayList<>();
  282 + if(JSONUtil.isTypeJSONArray(sValue)){
  283 + addValue = JSONUtil.toList(sValue,String.class);
  284 + }else{
  285 + addValue.add(sValue);
  286 + }
  287 + for(String sVaule:addValue){
  288 + //根据值获取动态部件
  289 + List<ParamRule> paramRuleDataD = paramRuleDataAllNew.get().stream().filter(d ->
  290 + d.getBDynamicParam()
  291 + && sValue.equals(d.getSDynamicParam())
  292 + && one.getSParam().equals(d.getSDynamicParamName())
  293 + ).collect(Collectors.toUnmodifiableList());
  294 +
  295 + //如果不存在的加入方法参数中
  296 + if(ObjectUtil.isEmpty(paramRuleDataD)){
323 searMap.put("sRuleId",one.getSId()); 297 searMap.put("sRuleId",one.getSId());
324 searMap.put("sTooId",one.getSParentId()); 298 searMap.put("sTooId",one.getSParentId());
325 searMap.put("sParam",one.getSParam()); 299 searMap.put("sParam",one.getSParam());
@@ -344,77 +318,27 @@ public class DynamicToolProvider implements ToolProvider { @@ -344,77 +318,27 @@ public class DynamicToolProvider implements ToolProvider {
344 //表示过程走自定义参数 318 //表示过程走自定义参数
345 } 319 }
346 if(ObjectUtil.isNotEmpty(dynamicParamRuleOne)){ 320 if(ObjectUtil.isNotEmpty(dynamicParamRuleOne)){
347 - //转换成BEAN  
348 - //添加到方法中去  
349 - List<ParamRule> paramRuleDataAllAdd = tool.getParamRuleListAll().stream().collect(Collectors.toList());  
350 - List<ParamRule> paramRuleListAdd = tool.getParamRuleList().stream().collect(Collectors.toList());  
351 - List<ParamRule> paramRuleListCheckAdd = tool.getParamRuleListCheck().stream().collect(Collectors.toList());  
352 - if(ObjectUtil.isEmpty(paramRuleDataAllAdd)){  
353 - paramRuleDataAllAdd = new ArrayList<>();  
354 - }  
355 - if(ObjectUtil.isEmpty(paramRuleListAdd)){  
356 - paramRuleListAdd = new ArrayList<>();  
357 - }  
358 - if(ObjectUtil.isEmpty(paramRuleListCheckAdd)){  
359 - paramRuleListCheckAdd = new ArrayList<>();  
360 - }  
361 - List<ParamRule> finalParamRuleDataAllAdd = paramRuleDataAllAdd;  
362 - List<ParamRule> finalParamRuleListAdd = paramRuleListAdd;  
363 - List<ParamRule> finalParamRuleListCheckAdd = paramRuleListCheckAdd;  
364 dynamicParamRuleOne.forEach(dynamicParamRuleData->{ 321 dynamicParamRuleOne.forEach(dynamicParamRuleData->{
365 ParamRule paramRule = BeanUtil.toBean(dynamicParamRuleData,ParamRule.class); 322 ParamRule paramRule = BeanUtil.toBean(dynamicParamRuleData,ParamRule.class);
366 dynamicParamRule.add(paramRule); 323 dynamicParamRule.add(paramRule);
367 - try{  
368 - finalParamRuleDataAllAdd.add(paramRule);  
369 - finalParamRuleListAdd.add(paramRule);  
370 - if(paramRule.getBEmpty()){  
371 - finalParamRuleListCheckAdd.add(paramRule);  
372 - }  
373 - }catch (Exception e){  
374 - e.printStackTrace();  
375 - }  
376 }); 324 });
377 - if(ObjectUtil.isNotEmpty(paramRuleDataAllAdd)){  
378 - paramRuleDataAllAdd = deduplicateByParamValue(paramRuleDataAllAdd);  
379 - session.getCurrentTool().setParamRuleListAll(paramRuleDataAllAdd);  
380 - }  
381 - if(ObjectUtil.isNotEmpty(paramRuleListAdd)){  
382 - paramRuleListAdd = deduplicateByParamValue(paramRuleListAdd);  
383 - session.getCurrentTool().setParamRuleList(paramRuleListAdd);  
384 - }  
385 - if(ObjectUtil.isNotEmpty(paramRuleListCheckAdd)){  
386 - paramRuleListCheckAdd = deduplicateByParamValue(paramRuleListCheckAdd);  
387 - session.getCurrentTool().setParamRuleListCheck(paramRuleListCheckAdd);  
388 - }  
389 } 325 }
390 } 326 }
391 } 327 }
392 }); 328 });
393 } 329 }
  330 + List<ParamRule> dataAll = new ArrayList<>(paramRuleDataAllNew.get());
  331 + dataAll.addAll(dynamicParamRule);
  332 + paramRuleDataAllNew.set(dataAll);
  333 + List<ParamRule> newList = new ArrayList<>(paramRuleDataAllNew.get());
  334 + List<ParamRule> dynamicParamRuleAll = Validator.deduplicateByParamValue(newList);
  335 + List<ParamRule> paramRuleList = dynamicParamRuleAll.stream().filter(one-> one.getBTipModel()).collect(Collectors.toUnmodifiableList());
  336 + List<ParamRule> paramRuleListCheck = dynamicParamRuleAll.stream().filter(one->one.getBEmpty()).collect(Collectors.toUnmodifiableList());
  337 + session.getCurrentTool().setParamRuleListAll(dynamicParamRuleAll);
  338 + session.getCurrentTool().setParamRuleListCheck(paramRuleListCheck);
  339 + session.getCurrentTool().setParamRuleList(paramRuleList);
394 return dynamicParamRule; 340 return dynamicParamRule;
395 } 341 }
396 - /***  
397 - * @Author 钱豹  
398 - * @Date 0:58 2026/7/2  
399 - * @Param [source, one]  
400 - * @return java.util.List<com.xly.entity.ParamRule>  
401 - * @Description 去重  
402 - **/  
403 - private List<ParamRule> deduplicateByParamValue(List<ParamRule> source) {  
404 - if (source == null || source.isEmpty()) {  
405 - return new ArrayList<>();  
406 - }  
407 - return source.stream()  
408 - .collect(Collectors.toMap(  
409 - ParamRule::getSParamValue, // 根据 sParamValue 去重  
410 - Function.identity(),  
411 - (existing, replacement) -> existing // 保留第一个  
412 - ))  
413 - .values()  
414 - .stream()  
415 - .collect(Collectors.toList());  
416 - }  
417 -  
418 342
419 private void doSetSlaveIdToArgs(Map<String,Object> args,UserSceneSession session){ 343 private void doSetSlaveIdToArgs(Map<String,Object> args,UserSceneSession session){
420 Map<Integer,Map<String,Object>> data = session.getCurrentRowData(); 344 Map<Integer,Map<String,Object>> data = session.getCurrentRowData();
@@ -695,18 +619,17 @@ public class DynamicToolProvider implements ToolProvider { @@ -695,18 +619,17 @@ public class DynamicToolProvider implements ToolProvider {
695 if(meta.getBQuo()){ 619 if(meta.getBQuo()){
696 List<ParamRule> dataParamDynamic = session.getCurrentTool().getParamRuleListAll().stream().filter(d -> 620 List<ParamRule> dataParamDynamic = session.getCurrentTool().getParamRuleListAll().stream().filter(d ->
697 d.getBDynamicParam()).collect(Collectors.toUnmodifiableList()); 621 d.getBDynamicParam()).collect(Collectors.toUnmodifiableList());
698 - Map<String,Object> data = quoService.getQuoData(args, session, dataParamDynamic); 622 + Map<String,Object> data = quoService.getQuoData(args, session);
699 List<Map<String,Object>> sAll = (List<Map<String, Object>>) data.get("sAll"); 623 List<Map<String,Object>> sAll = (List<Map<String, Object>>) data.get("sAll");
700 - List<Map<String,Object>> sEmpty = sAll.stream().filter(one-> BooleanUtil.toBoolean(one.get("bEmpty").toString())  
701 - && (ObjectUtil.isEmpty(one.get("sValue")) || "0".equals(one.get("sValue")))).collect(Collectors.toUnmodifiableList()); 624 + List<Map<String,Object>> sEmptyData = sAll.stream().filter(one-> BooleanUtil.toBoolean(one.get("bEmpty").toString())
  625 + && (!Validator.isValid(one.get("sValue"))) && !"sDynamicPart".equals(one.get("sName"))).collect(Collectors.toUnmodifiableList());
702 data.remove("sAll"); 626 data.remove("sAll");
703 - if(ObjectUtil.isNotEmpty(sEmpty)){ 627 + if(ObjectUtil.isNotEmpty(sEmptyData)){
704 data.put("bTs",true); 628 data.put("bTs",true);
705 - String askMsg = JSONObject.toJSONString(data);  
706 - session.setSFunPrompts(askMsg);  
707 String sSystemPrompt = SystemPromptGenerator.buildMissParamPrompt(session,dataParamDynamic); 629 String sSystemPrompt = SystemPromptGenerator.buildMissParamPrompt(session,dataParamDynamic);
708 session.setSSystemPrompt(sSystemPrompt); 630 session.setSSystemPrompt(sSystemPrompt);
709 - // 需要提问用户 → 抛异常停止循环 631 + String askMsg = JSONObject.toJSONString(data);
  632 + session.setSFunPrompts(askMsg);
710 return askMsg; 633 return askMsg;
711 } 634 }
712 session.setQuoData(data); 635 session.setQuoData(data);
src/main/java/com/xly/util/Validator.java 0 → 100644
  1 +package com.xly.util;
  2 +
  3 +import cn.hutool.core.util.ObjectUtil;
  4 +import com.xly.entity.ParamRule;
  5 +
  6 +import java.lang.reflect.Array;
  7 +import java.util.ArrayList;
  8 +import java.util.Collection;
  9 +import java.util.List;
  10 +import java.util.Map;
  11 +import java.util.function.Function;
  12 +import java.util.stream.Collectors;
  13 +
  14 +public class Validator {
  15 +
  16 + // 判断对象是否有效(非0,非空字符串,非空数组/集合)
  17 + public static boolean isValid(Object obj) {
  18 + if (obj == null)
  19 + return false;
  20 +
  21 + // 数值
  22 + if (obj instanceof Number) {
  23 + return ((Number) obj).doubleValue() != 0;
  24 + }
  25 +
  26 + // 数组
  27 + if (obj.getClass().isArray()) {
  28 + return Array.getLength(obj) > 0;
  29 + }
  30 +
  31 + // 集合
  32 + if (obj instanceof Collection) {
  33 + return !((Collection<?>) obj).isEmpty();
  34 + }
  35 +
  36 + // Map
  37 + if (obj instanceof Map) {
  38 + return !((Map<?, ?>) obj).isEmpty();
  39 + }
  40 + return ObjectUtil.isNotEmpty(obj);
  41 + }
  42 +
  43 + /**
  44 + * 根据指定 key 对 List<Map<String, Object>> 去重
  45 + *
  46 + * @param list 原始列表
  47 + * @param key 去重依据的 key
  48 + * @return 去重后的列表(保留首次出现的顺序)
  49 + */
  50 + public static List<Map<String, Object>> distinctByKey(
  51 + List<Map<String, Object>> list, String key) {
  52 +
  53 + if (list == null || list.isEmpty()) {
  54 + return new ArrayList<>();
  55 + }
  56 +
  57 + return list.stream()
  58 + .filter(item -> item != null && item.get(key) != null)
  59 + .collect(Collectors.toMap(
  60 + item -> item.get(key),
  61 + Function.identity(),
  62 + (existing, replacement) -> existing
  63 + ))
  64 + .values()
  65 + .stream()
  66 + .collect(Collectors.toList());
  67 + }
  68 + /***
  69 + * @Author 钱豹
  70 + * @Date 0:58 2026/7/2
  71 + * @Param [source, one]
  72 + * @return java.util.List<com.xly.entity.ParamRule>
  73 + * @Description 去重
  74 + **/
  75 + public static List<ParamRule> deduplicateByParamValue(List<ParamRule> source) {
  76 + if (source == null || source.isEmpty()) {
  77 + return new ArrayList<>();
  78 + }
  79 + return source.stream()
  80 + .collect(Collectors.toMap(
  81 + ParamRule::getSParamValue, // 根据 sParamValue 去重
  82 + Function.identity(),
  83 + (existing, replacement) -> existing // 保留第一个
  84 + ))
  85 + .values()
  86 + .stream()
  87 + .collect(Collectors.toList());
  88 + }
  89 +}
0 \ No newline at end of file 90 \ No newline at end of file