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 * @Description 报价获取参数组装 **/ public Map getQuoData(Map args, UserSceneSession session){ //获取当前方法 Map retData = new HashMap<>(); try{ if(ObjectUtil.isEmpty(args)){ args = new HashMap<>(); } 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 = args; dataProduct.forEach(p->{ Map product = new HashMap<>(); Object sValue = getValue( p,finalArgsOld); 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->{ Object sVal = getValue( p,finalArgsOld); List 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 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 datasDynamicPartArray = new ArrayList<>(); if(JSONUtil.isTypeJSONArray(datasDynamicPartValue.toString())){ datasDynamicPartArray = JSONUtil.toList(datasDynamicPartValue.toString(),String.class); }else{ datasDynamicPartArray.add(datasDynamicPartValue); } datasDynamicPartArray.forEach(one->{ List 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 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 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 dataAll,ParamRule p, Map finalArgsOld, List> sAll, Map part){ if(ObjectUtil.isNotEmpty(sValue)){ //根据值获取动态部件 List dataParamDynamic = dataAll.stream().filter(d -> d.getBDynamicParam() && sValue.equals(d.getSDynamicParam()) && p.getSParam().equals(d.getSDynamicParamName()) ).collect(Collectors.toUnmodifiableList()); if(ObjectUtil.isNotEmpty(dataParamDynamic)){ List> dynamicData = new ArrayList<>(); dataParamDynamic.forEach(dynamic->{ Map dynamicOne = new HashMap<>(); Object dynamicValue = getValue(dynamic,finalArgsOld); 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("sGroup",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 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; } } }