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