QuoService.java 10.4 KB
package com.xly.service;

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.entity.ParamRule;
import com.xly.entity.UserSceneSession;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;
/***
 * @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> args, UserSceneSession session){
        //获取当前方法
        Map<String,Object> retData = new HashMap<>();
        try{
            if(ObjectUtil.isEmpty(args)){
                args = new HashMap<>();
            }
            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 = args;
            dataProduct.forEach(p->{
                Object sVal = getValue( p,finalArgsOld);
                List<String> addValue = new ArrayList<>();
                if(JSONUtil.isTypeJSONArray(sVal.toString())){
                    addValue = JSONUtil.toList(sVal.toString(),String.class);
                }else{
                    addValue.add(sVal.toString());
                }
                for(String sValue:addValue){
                    Map<String,Object> product = new HashMap<>();
                    product.put("sProductName",finalArgsOld.get("产品名称"));
                    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());
                    //获取动态参数
                    adddynamicData( sValue, dataAll, p,  finalArgsOld, sAll,  product);
                    productList.add(product);
                }
            });
            List<Map<String,Object>> partList = new ArrayList<>();
            dataPart.forEach(p->{
                Object sVal = getValue( p,finalArgsOld);
                List<String> addValue = new ArrayList<>();
                if(JSONUtil.isTypeJSONArray(sVal.toString())){
                    addValue = JSONUtil.toList(sVal.toString(),String.class);
                }else{
                    addValue.add(sVal.toString());
                }
                for(String sValue:addValue){
                    Map<String,Object> part = new HashMap<>();
                    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("sGroup",p.getSGroup());
                    part.put("sParamMissMemo", p.getSParamMissMemo()==null?StrUtil.EMPTY:p.getSParamMissMemo());
                    part.put("sParamConfigValue",p.getSParamConfigValue()==null?StrUtil.EMPTY:p.getSParamConfigValue());
                    //获取动态参数
                    adddynamicData( sValue, dataAll, p,  finalArgsOld, sAll,  part);
                    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 = new ArrayList<>();
                    if(JSONUtil.isTypeJSONArray(datasDynamicPartValue.toString())){
                        datasDynamicPartArray = JSONUtil.toList(datasDynamicPartValue.toString(),String.class);
                    }else{
                        datasDynamicPartArray.add(datasDynamicPartValue);
                    }
                    datasDynamicPartArray.forEach(one->{
                        List<ParamRule> dataPartDynamic = dataAll.stream().filter(d ->
                                one.equals(d.getSDynamicParam())
                                        && "新增部件".equals(d.getSDynamicParamName()
                                )&&d.getBDynamicParam()
                        ).collect(Collectors.toUnmodifiableList());
                        if(ObjectUtil.isNotEmpty(dataPartDynamic)){
                            dataPartDynamic.forEach(dynamic->{
                                Object sVal = getValue( dynamic,finalArgsOld);
                                List<String> addValue = new ArrayList<>();
                                if(JSONUtil.isTypeJSONArray(sVal.toString())){
                                    addValue = JSONUtil.toList(sVal.toString(),String.class);
                                }else{
                                    addValue.add(sVal.toString());
                                }
                                for(String sValue:addValue){
                                    Map<String,Object> part = new HashMap<>();
                                    Object dynamicValue = getValue( dynamic,finalArgsOld);
                                    part.put("sPartName",one);
                                    part.put("sName",dynamic.getSParamValue());
                                    part.put("showName",dynamic.getSParam());
                                    part.put("bEmpty",dynamic.getBEmpty());
                                    part.put("sValue", dynamicValue);
                                    part.put("iOrder", dynamic.getIOrder());
                                    part.put("sParamConfigValue",dynamic.getSParamConfigValue());
                                    part.put("sParamMissMemo", dynamic.getSParamMissMemo());
                                    part.put("sGroup",dynamic.getSGroup());
                                    //获取动态参数
                                    adddynamicData(sValue,dataAll, dynamic, finalArgsOld, sAll,  part);
                                    partList.add(part);
                                }
                            });
                        }
                    });
                }
            }
            sAll.addAll(productList);
            sAll.addAll(partList);
            retData.put("sAll",sAll);
            retData.put("product",productList);
            retData.put("partList",partList);
        }catch (Exception e){

        }

        return retData;
    }
    /***
     * @Author 钱豹
     * @Date 23:00 2026/7/7
     * @Param [p, finalArgs]
     * @return void
     * @Description 添加动态参数值
     **/
    private void adddynamicData(Object sValue,List<ParamRule> dataAll,ParamRule p, Map<String, Object> finalArgsOld, List<Map<String,Object>> sAll, Map<String,Object> part){
        if(ObjectUtil.isNotEmpty(sValue)){
            //根据值获取动态部件
            List<ParamRule> dataParamDynamic = dataAll.stream().filter(d ->
                            d.getBDynamicParam()
                            && sValue.equals(d.getSDynamicParam())
                            && p.getSParam().equals(d.getSDynamicParamName())
            ).collect(Collectors.toUnmodifiableList());
            if(ObjectUtil.isNotEmpty(dataParamDynamic)){
                List<Map<String,Object>> dynamicData = new ArrayList<>();
                dataParamDynamic.forEach(dynamic->{
                    Map<String,Object> dynamicOne = new HashMap<>();
                    Object dynamicValue = getValue(dynamic,finalArgsOld);
                    dynamicOne.put("sName",dynamic.getSParamValue());
                    dynamicOne.put("showName",dynamic.getSParam().split("-").length>1?dynamic.getSParam().split("-")[1]:dynamic.getSParam().split("-")[0]);
                    dynamicOne.put("bEmpty",dynamic.getBEmpty());
                    dynamicOne.put("sValue", dynamicValue);
                    dynamicOne.put("iOrder", dynamic.getIOrder());
                    dynamicOne.put("sGroup",dynamic.getSGroup()==null?sValue:dynamic.getSGroup());
                    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);
            }
        }
    }

    private Object getValue(ParamRule p,Map<String, Object> finalArgs){
      Object value =  ObjectUtil.isNotEmpty(finalArgs.get(p.getSParam()))?
              finalArgs.get(p.getSParam()).toString()
              :(ObjectUtil.isNotEmpty(finalArgs.get(p.getSParam()))?
              finalArgs.get(p.getSParam()).toString():StrUtil.EMPTY);
      if("0".equals(value)){
          return StrUtil.EMPTY;
      }else{
          return value;
      }
    }

}