package com.dky.generate; import cn.hutool.json.JSONObject; import com.dky.calculate.*; import com.dky.modelI.DntdModelI; import com.dky.tool.ModelTool; import com.dky.utils.entity.SysDeviceHeatScene; import com.dky.utils.result.MatchedDevice; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicReference; public class BuildHeatingSence implements DntdModelI { DecimalFormat decimalFormat = new DecimalFormat("#.00"); @Override public JSONObject createReport(JSONObject jsonObject2) { List list = ModelTool.specList; JSONObject distInfo = (JSONObject) jsonObject2.get("distInfo"); JSONObject buildInfo = (JSONObject) jsonObject2.get("buildInfo"); // 运行容量 Double runCapacity = (Double) distInfo.get("runCapacity"); // 上年最大需量 Double lastYearNeed = (Double) distInfo.get("lastYearNeed"); // 建筑面积 Double heatingArea = (Double) buildInfo.get("heatingArea"); // 年采暖时间(天) Integer days = (Integer) buildInfo.get("days"); // 上年运行费用(万元) Double lastYearFee = (Double) buildInfo.get("lastYearFee"); Double A = runCapacity * 0.9 * 0.85; // 冗余容量 Double B = A - lastYearNeed; AtomicReference C = new AtomicReference<>(); AtomicReference C1 = new AtomicReference<>(); List>>> calScheme = Scheme.calScheme(heatingArea, list); List> mapsC = CalC.getC(calScheme); for (Map map : mapsC) { map.forEach((k, v) -> { if (k.contains("电锅炉")) { C.set(v); } else { C1.set(v); } }); } Double D = lastYearNeed + C.get(); Double D1 = lastYearNeed + C1.get(); List matchedDeviceList = new ArrayList<>(); // 判断只能用热泵 if (D1 < A && A < D) { List deviceList = new ArrayList<>(); list.parallelStream().forEach((sysDeviceHeatScene -> { if (!sysDeviceHeatScene.getDevTechType().contains("电锅炉")) { deviceList.add(sysDeviceHeatScene); } })); matchedDeviceList = SchemeRating.getOptimalScheme(SchemeRating.getOptimalList(Scheme.calScheme(heatingArea, deviceList))); } else { matchedDeviceList = SchemeRating.getOptimalScheme(SchemeRating.getOptimalList(calScheme)); } JSONObject jsonObject = new JSONObject(); AtomicReference planInfos = new AtomicReference<>(); AtomicReference devTechType = new AtomicReference<>(); AtomicReference devSubType = new AtomicReference<>(); AtomicReference devCount = new AtomicReference<>(); AtomicReference devPrice = new AtomicReference<>(); AtomicReference startCost = new AtomicReference<>(0.0); AtomicReference runCost = new AtomicReference<>(0.0); AtomicReference allCost = new AtomicReference<>(0.0); AtomicReference calculateAnnualCarbon = new AtomicReference<>(0.0); AtomicReference electric = new AtomicReference<>(0.0); matchedDeviceList.parallelStream().forEach((matchedDevice -> { planInfos.set(planInfos.get() + "设备: " + matchedDevice.getDeviceHeatScene().getDevType() + ",技术: " + matchedDevice.getDeviceHeatScene().getDevTechType() + ",数量 = " + matchedDevice.getCount() + "。"); devTechType.set(devTechType.get() + "设备: " + matchedDevice.getDeviceHeatScene().getDevType() + ",技术: " + matchedDevice.getDeviceHeatScene().getDevTechType() + "。"); devSubType.set(devSubType.get() + "设备: " + matchedDevice.getDeviceHeatScene().getDevType() + ",设备细类: " + matchedDevice.getDeviceHeatScene().getDevSubType() + "。"); devCount.set(devCount.get() + "设备: " + matchedDevice.getDeviceHeatScene().getDevType() + ",数量 = " + matchedDevice.getCount() + "。"); devPrice.set(devPrice.get() + "设备: " + matchedDevice.getDeviceHeatScene().getDevType() + ",单价 = " + matchedDevice.getDeviceHeatScene().getDevPrice() + "。"); startCost.set(startCost.get() + (matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getDevPrice())); runCost.set(runCost.get() + (BuildHeatingModel.getRunCost(matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevPower(), days, matchedDevice.getDeviceHeatScene().getDevSubstituteLaborCost()))); allCost.set(allCost.get() + (BuildHeatingModel.getYearCost(matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevPrice(), matchedDevice.getDeviceHeatScene().getDevServiceLife(), matchedDevice.getDeviceHeatScene().getDevPower(), days, matchedDevice.getDeviceHeatScene().getDevSubstituteLaborCost()))); calculateAnnualCarbon.set(calculateAnnualCarbon.get() + (BuildHeatingModel.calculateAnnualCarbonReduction(lastYearFee, matchedDevice.getDeviceHeatScene().getLaborCost(), matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevPower(), days))); electric.set(electric.get() + (BuildHeatingModel.getElectric(matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevPower(), days))); })); jsonObject.put("startCost", decimalFormat.format(startCost.get())); jsonObject.put("yearRunCost", decimalFormat.format(runCost.get())); jsonObject.put("yearCost", decimalFormat.format(allCost.get())); jsonObject.put("calculate", decimalFormat.format(calculateAnnualCarbon.get())); jsonObject.put("electric", decimalFormat.format(electric.get())); jsonObject.put("planInfos", planInfos.get().replace("null","")); jsonObject.put("devTechType", devTechType.get().replace("null","")); jsonObject.put("devSubType", devSubType.get().replace("null","")); jsonObject.put("devCount", devCount.get().replace("null","")); jsonObject.put("devPrice", devPrice.get().replace("null","")); jsonObject.put("devCost", decimalFormat.format(startCost.get())); jsonObject.put("economy", Advantage.economy(startCost.get(), allCost.get(), runCost.get(), lastYearFee)); jsonObject.put("intelligence", Advantage.intelligence()); jsonObject.put("environment", Advantage.environment(Double.valueOf(decimalFormat.format(calculateAnnualCarbon.get())))); return jsonObject; } }