Commit 80001927074cce387c3ff6f6b1e47eaeb8bb7c49

Authored by qianbao
1 parent bba86a8d

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

src/main/java/com/xly/service/QuoService.java
1 1 package com.xly.service;
2 2  
3   -import cn.hutool.core.text.CharSequenceUtil;
4 3 import cn.hutool.core.util.ObjectUtil;
5 4 import cn.hutool.core.util.StrUtil;
6 5 import cn.hutool.json.JSONUtil;
7 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 7 import com.xly.entity.ParamRule;
12   -import com.xly.entity.ToolMeta;
13 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 9 import lombok.RequiredArgsConstructor;
18 10 import lombok.extern.slf4j.Slf4j;
19   -import org.apache.commons.lang3.StringUtils;
20 11 import org.springframework.stereotype.Service;
21 12  
22 13 import java.util.*;
23 14 import java.util.stream.Collectors;
24   -import java.util.stream.Stream;
25   -
26 15 /***
27 16 * @Author 钱豹
28 17 * @Date 0:06 2026/7/7
... ... @@ -43,131 +32,160 @@ public class QuoService {
43 32 * @return java.util.Map<java.lang.String,java.lang.Object>
44 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 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 192 \ No newline at end of file
... ...
src/main/java/com/xly/service/XlyErpService.java
... ... @@ -460,20 +460,21 @@ public class XlyErpService {
460 460 session.setBCleanMemory(false);
461 461 session.setCurrentRowData(null);
462 462 session.setQuoData(null);
463   -
464 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 478 session.setCurrentRowData(null);
478 479 UserSceneSessionService.USER_SCENE_SESSION_CACHE.put(userId, session);
479 480 // 清空Agent缓存
... ...
src/main/java/com/xly/tool/DynamicToolProvider.java
... ... @@ -6,7 +6,6 @@ import cn.hutool.core.date.DateUtil;
6 6 import cn.hutool.core.util.BooleanUtil;
7 7 import cn.hutool.core.util.ObjectUtil;
8 8 import cn.hutool.core.util.StrUtil;
9   -import cn.hutool.json.JSONArray;
10 9 import cn.hutool.json.JSONUtil;
11 10 import com.alibaba.fastjson2.JSONObject;
12 11 import com.fasterxml.jackson.core.type.TypeReference;
... ... @@ -42,7 +41,6 @@ import java.util.*;
42 41  
43 42 import java.util.concurrent.ConcurrentHashMap;
44 43 import java.util.concurrent.atomic.AtomicReference;
45   -import java.util.function.Function;
46 44 import java.util.stream.Collectors;
47 45 import java.util.stream.IntStream;
48 46  
... ... @@ -186,18 +184,7 @@ public class DynamicToolProvider implements ToolProvider {
186 184 if(ObjectUtil.isEmpty(args)) args = new HashMap<>();
187 185 Map<String, Object> finalArgs = args;
188 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 188 finalArgs.put(k,v);
202 189 }
203 190 });
... ... @@ -214,24 +201,6 @@ public class DynamicToolProvider implements ToolProvider {
214 201 // 2.1 【自动补全】应用参数的默认值
215 202 List<ParamRule> paramRuleData = meta.getParamRuleListAll();
216 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 204 //客户选择行号转sSLaveId
236 205 if(ObjectUtil.isNotEmpty(args)
237 206 &&(
... ... @@ -243,6 +212,16 @@ public class DynamicToolProvider implements ToolProvider {
243 212 }
244 213 //存入已采集参数
245 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 226 String askMsg = getMissParamMsg( meta, session, args);
248 227 if(ObjectUtil.isNotEmpty(askMsg)){
... ... @@ -251,6 +230,8 @@ public class DynamicToolProvider implements ToolProvider {
251 230 String resp = StrUtil.EMPTY;
252 231 if(session.getCurrentTool().getBQuo()){
253 232 resp = JSONUtil.toJsonStr(session.getQuoData());
  233 + session.setSFunPrompts(resp);
  234 + return resp;
254 235 }else{
255 236 resp = JSONUtil.toJsonStr(args) ;
256 237 }
... ... @@ -275,51 +256,44 @@ public class DynamicToolProvider implements ToolProvider {
275 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 263 && ObjectUtil.isNotEmpty(one.getSDynamicParamRuleSql())
283 264 ).collect(Collectors.toUnmodifiableList());
  265 + //为空的时候需要重新插入不为空 表示之前已经放过了
  266 + //根据新参数获取需要填写参数
284 267 List<ParamRule> dynamicParamRule = new ArrayList<>();
285   - //为空的时候需要重新插入 不为空 表示之前已经放过了
  268 + AtomicReference<List<ParamRule>> paramRuleDataAllNew = new AtomicReference<>(paramRuleDataAll);
286 269 if(ObjectUtil.isNotEmpty(paramRuleData)){
287 270 Map<String, Object> finalArgsOld = argsOld;
288 271 paramRuleData.forEach(one->{
289   - //根据新参数获取需要填写参数
290 272 Map<String,Object> searMap = new HashMap<>();
291 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 297 searMap.put("sRuleId",one.getSId());
324 298 searMap.put("sTooId",one.getSParentId());
325 299 searMap.put("sParam",one.getSParam());
... ... @@ -344,77 +318,27 @@ public class DynamicToolProvider implements ToolProvider {
344 318 //表示过程走自定义参数
345 319 }
346 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 321 dynamicParamRuleOne.forEach(dynamicParamRuleData->{
365 322 ParamRule paramRule = BeanUtil.toBean(dynamicParamRuleData,ParamRule.class);
366 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 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 343 private void doSetSlaveIdToArgs(Map<String,Object> args,UserSceneSession session){
420 344 Map<Integer,Map<String,Object>> data = session.getCurrentRowData();
... ... @@ -695,18 +619,17 @@ public class DynamicToolProvider implements ToolProvider {
695 619 if(meta.getBQuo()){
696 620 List<ParamRule> dataParamDynamic = session.getCurrentTool().getParamRuleListAll().stream().filter(d ->
697 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 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 626 data.remove("sAll");
703   - if(ObjectUtil.isNotEmpty(sEmpty)){
  627 + if(ObjectUtil.isNotEmpty(sEmptyData)){
704 628 data.put("bTs",true);
705   - String askMsg = JSONObject.toJSONString(data);
706   - session.setSFunPrompts(askMsg);
707 629 String sSystemPrompt = SystemPromptGenerator.buildMissParamPrompt(session,dataParamDynamic);
708 630 session.setSSystemPrompt(sSystemPrompt);
709   - // 需要提问用户 → 抛异常停止循环
  631 + String askMsg = JSONObject.toJSONString(data);
  632 + session.setSFunPrompts(askMsg);
710 633 return askMsg;
711 634 }
712 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 90 \ No newline at end of file
... ...