package com.xly.service; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson2.JSONObject; import com.xly.agent.SystemPromptGenerator; import com.xly.constant.ErrorCode; import com.xly.constant.ProcedureConstant; import com.xly.entity.ParamRule; import com.xly.entity.ToolMeta; import com.xly.entity.UserSceneSession; import com.xly.exception.dto.BusinessException; import com.xly.mapper.DynamicExeDbMapper; import com.xly.util.DeepCopyUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; /*** * @Author 钱豹 * @Date 0:06 2026/7/7 * @Param * @return * @Description 报价业务类 **/ @Slf4j @Service("quoService") @RequiredArgsConstructor public class QuoService { /*** * @Author 钱豹 * @Date 1:25 2026/7/7 * @Param [argsNew, session, dynamicParamRule] * @return java.util.Map * @Description 报价获取参数组装 **/ public Map getQuoData(Map argsNew, UserSceneSession session, List dynamicParamRule){ //获取当前方法 Map retData = new HashMap<>(); ToolMeta meta = session.getCurrentTool(); //放入方法动态参数中 meta.setDynamicParamRule(dynamicParamRule); session.setCurrentTool(meta); Map argsOld = session.getArgs(); Map args = DeepCopyUtils.deepCopy(argsNew); if(ObjectUtil.isEmpty(argsOld)){ argsOld = new HashMap<>(); } argsOld.putAll(args); session.setArgs(argsOld); List dataAll = session.getCurrentTool().getParamRuleListAll(); //获取产品的参数 List dataProduct = dataAll.stream().filter(one-> "产品".equals(one.getSGroup()) && !one.getBDynamicParam() ).collect(Collectors.toUnmodifiableList()); List dataPart = dataAll.stream().filter(one-> "部件".equals(one.getSGroup()) && !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList()); List datasDynamicPart = dataAll.stream().filter(one-> "sDynamicPart".equals(one.getSParamValue()) && !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList()); List> sAll = new ArrayList<>(); List> productList = new ArrayList<>(); Map finalArgsOld = argsOld; dataProduct.forEach(p->{ Map product = new HashMap<>(); 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); product.put("sName",p.getSParamValue()); product.put("showName",p.getSParam()); product.put("bEmpty",p.getBEmpty()); product.put("sValue", sValue); product.put("sParamMissMemo", p.getSParamMissMemo()==null?StrUtil.EMPTY:p.getSParamMissMemo()); product.put("iOrder", p.getIOrder()); product.put("sParamConfigValue",p.getSParamConfigValue()==null?StrUtil.EMPTY:p.getSParamConfigValue()); productList.add(product); }); List> partList = new ArrayList<>(); dataPart.forEach(p->{ Map part = new HashMap<>(); 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); part.put("sPartName",p.getSParam().split("-")[0]); part.put("sName",p.getSParamValue()); part.put("showName",p.getSParam()); part.put("bEmpty",p.getBEmpty()); part.put("sValue", sValue); part.put("iOrder", p.getIOrder()); part.put("sParamMissMemo", p.getSParamMissMemo()==null?StrUtil.EMPTY:p.getSParamMissMemo()); part.put("sParamConfigValue",p.getSParamConfigValue()==null?StrUtil.EMPTY:p.getSParamConfigValue()); //获取动态参数 if(ObjectUtil.isNotEmpty(sValue)){ List dataParamDynamic = dataAll.stream().filter(d -> sValue.equals(d.getSDynamicParam()) && p.getSParamValue().equals(d.getSDynamicParamName())&&d.getBDynamicParam()).collect(Collectors.toUnmodifiableList()); if(ObjectUtil.isNotEmpty(dataParamDynamic)){ List> dynamicData = new ArrayList<>(); dataParamDynamic.forEach(dynamic->{ Map dynamicOne = new HashMap<>(); 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); dynamicOne.put("sName",dynamic.getSParamValue()); dynamicOne.put("showName",dynamic.getSParam()); dynamicOne.put("bEmpty",dynamic.getBEmpty()); dynamicOne.put("sValue", dynamicValue); dynamicOne.put("iOrder", dynamic.getIOrder()); dynamicOne.put("sParamMissMemo", dynamic.getSParamMissMemo()==null?StrUtil.EMPTY:dynamic.getSParamMissMemo()); dynamicOne.put("sParamConfigValue",dynamic.getSParamConfigValue()==null?StrUtil.EMPTY:dynamic.getSParamConfigValue()); //获取动态参数 dynamicData.add(dynamicOne); }); sAll.addAll(dynamicData); part.put("dynamicData",dynamicData); } } partList.add(part); }); //动态部件 if(ObjectUtil.isNotEmpty(datasDynamicPart)){ String datasDynamicPartValue = ObjectUtil.isNotEmpty(finalArgsOld.get("sDynamicPart"))? finalArgsOld.get("sDynamicPart").toString(): StrUtil.EMPTY; // :(ObjectUtil.isNotEmpty(finalArgsOld.get(p.getSParam()))? finalArgsOld.get(p.getSParam()).toString():StrUtil.EMPTY); if(StrUtil.isNotEmpty(datasDynamicPartValue)){ List datasDynamicPartArray = Collections.singletonList(JSONObject.parseObject(datasDynamicPartValue, String.class)); datasDynamicPartArray.forEach(one->{ List dataPartDynamic = dataAll.stream().filter(d -> one.equals(d.getSDynamicParam()) && "sDynamicPart".equals(d.getSDynamicParamName())&&d.getBDynamicParam()).collect(Collectors.toUnmodifiableList()); if(ObjectUtil.isNotEmpty(dataPartDynamic)){ dataPartDynamic.forEach(dynamic->{ Map part = new HashMap<>(); 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); part.put("sPartName",one); part.put("sName",dynamic.getSParamValue()); part.put("showName",dynamic.getSParam()); part.put("bEmpty",dynamic.getBEmpty()); part.put("sValue", sValue); part.put("iOrder", dynamic.getIOrder()); part.put("sParamConfigValue",dynamic.getSParamConfigValue()); part.put("sParamMissMemo", dynamic.getSParamMissMemo()); //获取动态参数 if(ObjectUtil.isNotEmpty(sValue)){ List dataParamDynamic = dataAll.stream().filter(d -> sValue.equals(d.getSDynamicParam()) && dynamic.getSParamValue().equals(d.getSDynamicParamName())&&d.getBDynamicParam()).collect(Collectors.toUnmodifiableList()); if(ObjectUtil.isNotEmpty(dataParamDynamic)){ List> dynamicData = new ArrayList<>(); dataParamDynamic.forEach(dynamicD->{ Map dynamicOne = new HashMap<>(); 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); dynamicOne.put("sName",dynamicD.getSParamValue()); dynamicOne.put("showName",dynamicD.getSParam()); dynamicOne.put("bEmpty",dynamicD.getBEmpty()); dynamicOne.put("sValue", dynamicValue); dynamicOne.put("iOrder", dynamicD.getIOrder()); dynamicOne.put("sParamMissMemo", dynamicD.getSParamMissMemo()==null?StrUtil.EMPTY:dynamicD.getSParamMissMemo()); dynamicOne.put("sParamConfigValue",dynamicD.getSParamConfigValue()==null?StrUtil.EMPTY:dynamicD.getSParamConfigValue()); //获取动态参数 dynamicData.add(dynamicOne); }); sAll.addAll(dynamicData); part.put("dynamicData",dynamicData); } } partList.add(part); }); } }); } } sAll.addAll(productList); sAll.addAll(partList); retData.put("sAll",sAll); retData.put("product",productList); retData.put("partList",partList); return retData; } }