QuoService.java 10.4 KB
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<java.lang.String,java.lang.Object>
     * @Description 报价获取参数组装
     **/
    public Map<String,Object> getQuoData(Map<String,Object> argsNew, UserSceneSession session, List<ParamRule> dynamicParamRule){
        //获取当前方法
        Map<String,Object> retData = new HashMap<>();
        ToolMeta meta = session.getCurrentTool();
        //放入方法动态参数中
        meta.setDynamicParamRule(dynamicParamRule);
        session.setCurrentTool(meta);
        Map<String, Object> argsOld = session.getArgs();
        Map<String, Object> args = DeepCopyUtils.deepCopy(argsNew);
        if(ObjectUtil.isEmpty(argsOld)){
            argsOld = new HashMap<>();
        }
        argsOld.putAll(args);
        session.setArgs(argsOld);
        List<ParamRule> dataAll = session.getCurrentTool().getParamRuleListAll();
        //获取产品的参数
        List<ParamRule> dataProduct = dataAll.stream().filter(one-> "产品".equals(one.getSGroup()) && !one.getBDynamicParam() ).collect(Collectors.toUnmodifiableList());
        List<ParamRule> dataPart = dataAll.stream().filter(one-> "部件".equals(one.getSGroup()) && !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList());
        List<ParamRule> datasDynamicPart = dataAll.stream().filter(one-> "sDynamicPart".equals(one.getSParamValue()) && !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList());
        List<Map<String,Object>> sAll = new ArrayList<>();
        List<Map<String,Object>> productList = new ArrayList<>();
        Map<String, Object> finalArgsOld = argsOld;
        dataProduct.forEach(p->{
            Map<String,Object> 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<Map<String,Object>> partList = new ArrayList<>();
        dataPart.forEach(p->{
            Map<String,Object> 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<ParamRule> dataParamDynamic = dataAll.stream().filter(d -> sValue.equals(d.getSDynamicParam()) && p.getSParamValue().equals(d.getSDynamicParamName())&&d.getBDynamicParam()).collect(Collectors.toUnmodifiableList());
                if(ObjectUtil.isNotEmpty(dataParamDynamic)){
                    List<Map<String,Object>> dynamicData = new ArrayList<>();
                    dataParamDynamic.forEach(dynamic->{
                        Map<String,Object> 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<String> datasDynamicPartArray = Collections.singletonList(JSONObject.parseObject(datasDynamicPartValue, String.class));
                datasDynamicPartArray.forEach(one->{
                    List<ParamRule> 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<String,Object> 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<ParamRule> dataParamDynamic = dataAll.stream().filter(d -> sValue.equals(d.getSDynamicParam()) && dynamic.getSParamValue().equals(d.getSDynamicParamName())&&d.getBDynamicParam()).collect(Collectors.toUnmodifiableList());
                                if(ObjectUtil.isNotEmpty(dataParamDynamic)){
                                    List<Map<String,Object>> dynamicData = new ArrayList<>();
                                    dataParamDynamic.forEach(dynamicD->{
                                        Map<String,Object> 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;
    }

}