Commit 80001927074cce387c3ff6f6b1e47eaeb8bb7c49
1 parent
bba86a8d
添加未清选择 改成动态引导语
Showing
4 changed files
with
306 additions
and
275 deletions
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 |