parent
3595d104dc
commit
611a4ae50d
@ -0,0 +1,124 @@ |
||||
package com.dky.utils; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.math.RoundingMode; |
||||
|
||||
/** |
||||
* double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型 |
||||
* 整型地方法适合于货币精度已知的情况,比如12.11+1.10转成1211+110计算,最后再/100即可 |
||||
* 以下是摘抄的BigDecimal方法: |
||||
* @author Stone |
||||
*/ |
||||
public class CalculateUtils { |
||||
|
||||
private static final long serialVersionUID = -3345205828566485102L; |
||||
// 默认除法运算精度
|
||||
private static final Integer DEF_DIV_SCALE = 2; |
||||
|
||||
/** |
||||
* 提供精确的加法运算。 |
||||
* |
||||
* @param value1 被加数 |
||||
* @param value2 加数 |
||||
* @return 两个参数的和 |
||||
*/ |
||||
public static Double add(Double value1, Double value2) { |
||||
if (null == value1){ |
||||
value1 = 0.0; |
||||
} |
||||
if (null == value2){ |
||||
value2 = 0.0; |
||||
} |
||||
BigDecimal b1 = new BigDecimal(Double.toString(value1)); |
||||
BigDecimal b2 = new BigDecimal(Double.toString(value2)); |
||||
return b1.add(b2).doubleValue(); |
||||
} |
||||
|
||||
/** |
||||
* 提供精确的减法运算。 |
||||
* |
||||
* @param value1 被减数 |
||||
* @param value2 减数 |
||||
* @return 两个参数的差 |
||||
*/ |
||||
public static double sub(Double value1, Double value2) { |
||||
if (null == value1){ |
||||
value1 = 0.0; |
||||
} |
||||
if (null == value2){ |
||||
value2 = 0.0; |
||||
} |
||||
BigDecimal b1 = new BigDecimal(Double.toString(value1)); |
||||
BigDecimal b2 = new BigDecimal(Double.toString(value2)); |
||||
return b1.subtract(b2).doubleValue(); |
||||
} |
||||
|
||||
/** |
||||
* 提供精确的乘法运算。 |
||||
* |
||||
* @param value1 被乘数 |
||||
* @param value2 乘数 |
||||
* @return 两个参数的积 |
||||
*/ |
||||
public static Double mul(Double value1, Double value2) { |
||||
if (null == value1){ |
||||
value1 = 0.0; |
||||
} |
||||
if (null == value2){ |
||||
value2 = 0.0; |
||||
} |
||||
BigDecimal b1 = new BigDecimal(Double.toString(value1)); |
||||
BigDecimal b2 = new BigDecimal(Double.toString(value2)); |
||||
return b1.multiply(b2).doubleValue(); |
||||
} |
||||
|
||||
/** |
||||
* 提供(相对)精确的除法运算,当发生除不尽的情况时, 精确到小数点以后10位,以后的数字四舍五入。 |
||||
* |
||||
* @param dividend 被除数 |
||||
* @param divisor 除数 |
||||
* @return 两个参数的商 |
||||
*/ |
||||
public static Double divide(Double dividend, Double divisor) { |
||||
if (null == dividend){ |
||||
dividend = 0.0; |
||||
} |
||||
if (null == divisor){ |
||||
divisor = 1.0; |
||||
} |
||||
return divide(dividend, divisor, DEF_DIV_SCALE); |
||||
} |
||||
|
||||
/** |
||||
* 提供(相对)精确的除法运算。 当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。 |
||||
* |
||||
* @param dividend 被除数 |
||||
* @param divisor 除数 |
||||
* @param scale 表示表示需要精确到小数点以后几位。 |
||||
* @return 两个参数的商 |
||||
*/ |
||||
public static Double divide(Double dividend, Double divisor, Integer scale) { |
||||
if (scale < 0) { |
||||
throw new IllegalArgumentException("The scale must be a positive integer or zero"); |
||||
} |
||||
BigDecimal b1 = new BigDecimal(Double.toString(dividend)); |
||||
BigDecimal b2 = new BigDecimal(Double.toString(divisor)); |
||||
return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue(); |
||||
} |
||||
|
||||
/** |
||||
* 提供指定数值的(精确)小数位四舍五入处理。 |
||||
* |
||||
* @param value 需要四舍五入的数字 |
||||
* @param scale 小数点后保留几位 |
||||
* @return 四舍五入后的结果 |
||||
*/ |
||||
public static double round(double value, int scale) { |
||||
if (scale < 0) { |
||||
throw new IllegalArgumentException("The scale must be a positive integer or zero"); |
||||
} |
||||
BigDecimal b = new BigDecimal(Double.toString(value)); |
||||
BigDecimal one = new BigDecimal("1"); |
||||
return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue(); |
||||
} |
||||
} |
@ -0,0 +1,34 @@ |
||||
package com.dky.utils.enums; |
||||
|
||||
|
||||
public enum MetalKinTemps { |
||||
|
||||
Metal_Kiln_Direct_Heat_Min_Temp(648.0, "直接加热电阻炉"), |
||||
Metal_Kiln_Direct_Heat_Max_Temp(857.9, "直接加热电阻炉"), |
||||
Metal_Kiln_Interstitial_Heat_Min_Temp(858.0, "间接加热电阻炉(钟罩式光亮退火炉)"), |
||||
Metal_Kiln_Interstitial_Heat_Max_Temp(996.9, "间接加热电阻炉(钟罩式光亮退火炉)"), |
||||
Metal_Kiln_Induction_Min_Temp(997.0, "中/高频感应电炉"), |
||||
Metal_Kiln_Induction_Max_Temp(1285.7, "中/高频感应电炉"); |
||||
|
||||
/** |
||||
* 温度 |
||||
*/ |
||||
private final Double temp; |
||||
/** |
||||
* 描述 |
||||
*/ |
||||
private final String desc; |
||||
|
||||
public Double getTemp() { |
||||
return temp; |
||||
} |
||||
|
||||
public String getDesc() { |
||||
return desc; |
||||
} |
||||
|
||||
MetalKinTemps(Double temp, String desc) { |
||||
this.temp = temp; |
||||
this.desc = desc; |
||||
} |
||||
} |
@ -1 +1 @@ |
||||
industry_code=21 |
||||
industry_code=3200 |
@ -0,0 +1,139 @@ |
||||
package com.dky.generate; |
||||
|
||||
import calculate.MetalKilnScheme; |
||||
import cn.hutool.json.JSONObject; |
||||
import com.dky.calculate.*; |
||||
import com.dky.modelI.DntdModelI; |
||||
import com.dky.utils.GetTargetDeviceList; |
||||
import com.dky.utils.entity.SysDeviceHeatScene; |
||||
import com.dky.utils.enums.DeviceSubType; |
||||
import com.dky.utils.result.MatchedDevice; |
||||
|
||||
import java.text.DecimalFormat; |
||||
import java.util.ArrayList; |
||||
import java.util.Collections; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
|
||||
public class MetalKilnScene implements DntdModelI { |
||||
|
||||
DecimalFormat decimalFormat = new DecimalFormat("#.00"); |
||||
|
||||
// 首先A=由运行/合同容量折合成kW(x0.9)x85%,
|
||||
static final Double COEFFICIENT_1 = 0.9; |
||||
static final Double COEFFICIENT_2 = 0.85; |
||||
|
||||
|
||||
@Override |
||||
public JSONObject createReport(JSONObject jsonObject, List<SysDeviceHeatScene> list) { |
||||
|
||||
List<SysDeviceHeatScene> alternateDeviceList = GetTargetDeviceList.main(DeviceSubType.Metal_Kiln.getDesc(), list); |
||||
|
||||
JSONObject distInfo = new JSONObject(); |
||||
JSONObject heatUseNeedInfo = new JSONObject(); |
||||
JSONObject originalDevInfo = new JSONObject(); |
||||
|
||||
try { |
||||
distInfo = (JSONObject) jsonObject.get("distInfo"); |
||||
heatUseNeedInfo = (JSONObject) jsonObject.get("heatUseNeedInfo"); |
||||
originalDevInfo = (JSONObject) jsonObject.get("originalDevInfo"); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
|
||||
// 运行容量
|
||||
Double runCapacity = Double.parseDouble(distInfo.get("runCapacity").toString()); |
||||
// 上年最大需量
|
||||
Double lastYearNeed = Double.parseDouble(distInfo.get("lastYearNeed").toString()); |
||||
// 工作容积(单位: m³)【 1 立方米=1000 升 】
|
||||
Double workArea = Double.parseDouble(heatUseNeedInfo.get("workArea").toString()) / 1000; |
||||
// 预计年产量(吨)
|
||||
Double yearOutPut = Double.parseDouble(heatUseNeedInfo.get("yearOutPut").toString()); |
||||
// 温度要求(摄氏度)
|
||||
Double needTemp = Double.parseDouble(heatUseNeedInfo.get("needTemp").toString()); |
||||
// 用户所属行业编码
|
||||
String userIndustry = jsonObject.get("userIndustry").toString(); |
||||
// 上年运行费用(元)
|
||||
Double lastYearFee = Double.parseDouble(originalDevInfo.get("lastYearFee").toString()); |
||||
|
||||
// 根据供热需量设备功率计算出不同技术类型下所需要不同功率设备数据
|
||||
List<SysDeviceHeatScene> schemeList = MetalKilnScheme.getSchemeList(userIndustry, needTemp, alternateDeviceList); |
||||
List<MatchedDevice> matchedDeviceGroupList = MetalKilnScheme.calSchemeByTechType(workArea, schemeList); |
||||
|
||||
// 实际可承载容量A = 运行(或合同容量)x0.9 [将运行容量或合同容量折算成容量] x85%
|
||||
double A = runCapacity * COEFFICIENT_1 * COEFFICIENT_2; |
||||
// 根据供热需量设备功率计算每个技术类型下需要的不同功率的设备的数量,然后将不同功率及对应的数量进行计算得出总功率C1,取最大
|
||||
Double C1 = CalC.getC1(Collections.singletonList(matchedDeviceGroupList)); |
||||
|
||||
// 改造后最大需量
|
||||
double D1 = lastYearNeed + C1; |
||||
|
||||
String remark = ""; |
||||
|
||||
// 同时考虑热泵和电锅炉
|
||||
if (A < D1) { |
||||
remark = "本方案存在扩容投资需求,扩容投资不计入初次投资费用"; |
||||
} |
||||
|
||||
|
||||
/* |
||||
封装返回 |
||||
*/ |
||||
JSONObject returnJsonObject = new JSONObject(); |
||||
Double startCost = 0.0; |
||||
Double runCost = 0.0; |
||||
Double allCost = 0.0; |
||||
Double calculateAnnualCarbon = 0.0; |
||||
Double laborFee1 = 0.0; |
||||
Double electric = 0.0; |
||||
List<HashMap<String, Object>> deviceList = new ArrayList<>(); |
||||
for (MatchedDevice matchedDevice : matchedDeviceGroupList) { |
||||
HashMap<String, Object> map = new HashMap<>(); |
||||
map.put("devSubType", matchedDevice.getDeviceHeatScene().getDevSubType()); |
||||
map.put("devTechType", matchedDevice.getDeviceHeatScene().getDevTechType()); |
||||
map.put("devCount", matchedDevice.getCount()); |
||||
map.put("devPrice", matchedDevice.getDeviceHeatScene().getDevPrice()); |
||||
deviceList.add(map); |
||||
|
||||
startCost = startCost + (matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getDevPrice()); |
||||
|
||||
runCost = runCost + (MaterialKilnModel.calculateAnnualOperatingCost(matchedDevice.getDeviceHeatScene().getDevPower(), matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevSubstituteLaborCost(), matchedDevice.getDeviceHeatScene().getDevAnnualOperationTime())); |
||||
|
||||
allCost = allCost + (MaterialKilnModel.calculateAnnualTotalCost(matchedDevice.getDeviceHeatScene().getDevPower(), matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevSubstituteLaborCost(), |
||||
matchedDevice.getDeviceHeatScene().getDevAnnualOperationTime(), matchedDevice.getDeviceHeatScene().getDevPrice(), matchedDevice.getDeviceHeatScene().getDevServiceLife())); |
||||
|
||||
electric = electric + (MaterialKilnModel.calculateSubstituteElectricity(matchedDevice.getDeviceHeatScene().getDevPower(), matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevAnnualOperationTime())); |
||||
|
||||
laborFee1 = laborFee1 + (matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getLaborCost() / matchedDevice.getDeviceHeatScene().getDevServiceLife()); |
||||
|
||||
} |
||||
//初次投资费用
|
||||
returnJsonObject.set("startCost", decimalFormat.format(startCost)); |
||||
// 设备总价
|
||||
returnJsonObject.set("devCost", decimalFormat.format(startCost)); |
||||
//年运行费用
|
||||
returnJsonObject.set("yearRunCost", decimalFormat.format(runCost)); |
||||
//年总费用
|
||||
returnJsonObject.set("yearCost", decimalFormat.format(allCost)); |
||||
//年减碳量
|
||||
calculateAnnualCarbon = MaterialKilnModel.calculateAnnualCarbonReduction(lastYearFee, laborFee1, electric); |
||||
returnJsonObject.set("calculate", decimalFormat.format(calculateAnnualCarbon / 1000)); |
||||
//替代电量
|
||||
returnJsonObject.set("electric", decimalFormat.format(electric)); |
||||
//备注
|
||||
returnJsonObject.set("remark", remark); |
||||
//封装需配置设备情况
|
||||
returnJsonObject.set("deviceList", deviceList); |
||||
|
||||
//封装方案优势
|
||||
returnJsonObject.set("safety", BuildHeatingAdvantage.safety()); |
||||
returnJsonObject.set("economy", Advantage.economy(startCost, runCost, lastYearFee)); |
||||
returnJsonObject.set("intelligence", BuildHeatingAdvantage.intelligence()); |
||||
returnJsonObject.set("environment", BuildHeatingAdvantage.environment(Double.valueOf(decimalFormat.format(calculateAnnualCarbon / 1000)))); |
||||
|
||||
|
||||
return returnJsonObject; |
||||
} |
||||
|
||||
|
||||
} |
@ -0,0 +1,146 @@ |
||||
package com.dky.stirtpar; |
||||
|
||||
|
||||
import cn.hutool.json.JSONObject; |
||||
import com.dky.modelI.DntdModelI; |
||||
import com.dky.utils.CalculateUtils; |
||||
import com.dky.utils.entity.SysDeviceHeatScene; |
||||
|
||||
import java.io.BufferedReader; |
||||
import java.io.InputStream; |
||||
import java.io.InputStreamReader; |
||||
import java.nio.charset.StandardCharsets; |
||||
import java.text.DecimalFormat; |
||||
import java.util.List; |
||||
|
||||
public class StirparModelCalculate implements DntdModelI { |
||||
|
||||
DecimalFormat df = new DecimalFormat("#.00"); |
||||
|
||||
/** |
||||
* 计算热源消耗总量 |
||||
* @param provinceCode 省份编码 |
||||
* @param peopleNum 人口 |
||||
* @param averageGdp 人均GDP |
||||
* @param U 城市化率 |
||||
* @param I 工业增加值 |
||||
* @param II 工业能源强度 |
||||
* @return |
||||
*/ |
||||
public static Double energyConsumeStirCoefficient(String provinceCode, Integer peopleNum, Double averageGdp, Double U, Double I, Double II) { |
||||
JSONObject jo = (JSONObject) toJSON("energyConsumeStirpatCoefficient.json").get(provinceCode); |
||||
Double a = Double.parseDouble(jo.get("a").toString()); |
||||
Double b1 = Double.parseDouble(jo.get("b1").toString()); |
||||
Double b2 = Double.parseDouble(jo.get("b2").toString()); |
||||
Double b3 = Double.parseDouble(jo.get("b3").toString()); |
||||
Double b4 = Double.parseDouble(jo.get("b4").toString()); |
||||
Double b5 = Double.parseDouble(jo.get("b5").toString()); |
||||
Double b6 = Double.parseDouble(jo.get("b6").toString()); |
||||
Double e = Double.parseDouble(jo.get("e").toString()); |
||||
|
||||
Double add1 = CalculateUtils.add(a, b1 * Math.log(peopleNum)); |
||||
Double add2 = CalculateUtils.add(add1, b2 * Math.log(U)); |
||||
Double add3 = CalculateUtils.add(add2, b3 * Math.log(averageGdp)); |
||||
Double add4 = CalculateUtils.add(add3, b4 * Math.pow(Math.log(averageGdp), 2)); |
||||
Double add5 = CalculateUtils.add(add4, b5 * Math.log(I)); |
||||
Double add6 = CalculateUtils.add(add5, b6 * Math.log(II)); |
||||
Double add7 = CalculateUtils.add(add6, e); |
||||
|
||||
return Math.round(Math.exp(add7) * 100) / 100.0; |
||||
} |
||||
|
||||
/** |
||||
* 计算电耗消耗总量 |
||||
* @param provinceCode 省份编码 |
||||
* @param CT 能源消耗量 |
||||
* @param peopleNum 人口 |
||||
* @param averageGdp 人均GDP |
||||
* @param U 城市化率 |
||||
* @param PR 电力价格 |
||||
* @param T 年均温度 |
||||
* @return |
||||
*/ |
||||
public static Double electricConsumeStirCoefficient(String provinceCode, Double CT, Integer peopleNum, Double averageGdp, Double U, Double PR, Double T) { |
||||
JSONObject jo = (JSONObject) toJSON("electricConsumeStirpatCoefficient.json").get(provinceCode); |
||||
Double a = Double.parseDouble(jo.get("a").toString()); |
||||
Double b1 = Double.parseDouble(jo.get("b1").toString()); |
||||
Double b2 = Double.parseDouble(jo.get("b2").toString()); |
||||
Double b3 = Double.parseDouble(jo.get("b3").toString()); |
||||
Double b4 = Double.parseDouble(jo.get("b4").toString()); |
||||
Double b5 = Double.parseDouble(jo.get("b5").toString()); |
||||
Double b6 = Double.parseDouble(jo.get("b6").toString()); |
||||
Double b7 = Double.parseDouble(jo.get("b7").toString()); |
||||
Double e = Double.parseDouble(jo.get("e").toString()); |
||||
|
||||
Double add1 = CalculateUtils.add(a, b1 * Math.log(CT)); |
||||
Double add2 = CalculateUtils.add(add1, b2 * Math.log(peopleNum)); |
||||
Double add3 = CalculateUtils.add(add2, b3 * Math.log(U)); |
||||
Double add4 = CalculateUtils.add(add3, b4 * Math.log(U)); |
||||
Double add5 = CalculateUtils.add(add4, b5 * Math.log(averageGdp)); |
||||
Double add6 = CalculateUtils.add(add5, b6 * Math.log(PR)); |
||||
Double add7 = CalculateUtils.add(add6, b7 * Math.log(T)); |
||||
Double add8 = CalculateUtils.add(add7, e); |
||||
|
||||
return Math.round(Math.exp(add8) * 100) / 100.0; |
||||
} |
||||
|
||||
|
||||
|
||||
public static JSONObject toJSON(String fileName) { |
||||
// 使用ClassLoader的getResourceAsStream方法读取资源文件
|
||||
InputStream inputStream = StirparModelCalculate.class.getClassLoader().getResourceAsStream(fileName); |
||||
if (inputStream == null) { |
||||
System.out.println("读取文件失败"); |
||||
} |
||||
// 使用BufferedReader读取InputStream中的内容
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); |
||||
StringBuilder stringBuilder = new StringBuilder(); |
||||
String currentLine; |
||||
try { |
||||
while ((currentLine = reader.readLine()) != null) { |
||||
stringBuilder.append(currentLine); |
||||
} |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
// 关闭BufferedReader
|
||||
try { |
||||
reader.close(); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
|
||||
return new JSONObject(stringBuilder.toString()); |
||||
} |
||||
|
||||
|
||||
|
||||
@Override |
||||
public JSONObject createReport(JSONObject jsonObject, List<SysDeviceHeatScene> alternateDeviceList) { |
||||
JSONObject electricInfo = new JSONObject(); |
||||
JSONObject energyInfo = new JSONObject(); |
||||
|
||||
try { |
||||
energyInfo = (JSONObject) jsonObject.get("energyInfo"); |
||||
electricInfo = (JSONObject) jsonObject.get("electricInfo"); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
|
||||
String provinceCode = jsonObject.get("provinceCode").toString(); |
||||
Integer peopleNum = Integer.parseInt(new DecimalFormat("#").format(energyInfo.get("peopleNum"))); |
||||
Double averageGdp = Double.parseDouble(energyInfo.get("averageGdp").toString()); |
||||
Double U = Double.parseDouble(energyInfo.get("ut").toString()); |
||||
Double I = Double.parseDouble(energyInfo.get("i1").toString()); |
||||
Double II = Double.parseDouble(energyInfo.get("i2").toString()); |
||||
Double PR = Double.parseDouble(electricInfo.get("PR").toString()); |
||||
Double CT = Double.parseDouble(electricInfo.get("CT").toString()); |
||||
Double T = Double.parseDouble(electricInfo.get("T").toString()); |
||||
|
||||
JSONObject resultJsonObject = new JSONObject(); |
||||
resultJsonObject.put("CT", df.format(energyConsumeStirCoefficient(provinceCode, peopleNum, averageGdp, U, I, II))); |
||||
resultJsonObject.put("CE", df.format(electricConsumeStirCoefficient(provinceCode, CT, peopleNum, averageGdp, U, PR, T))); |
||||
|
||||
return resultJsonObject; |
||||
} |
||||
} |
@ -0,0 +1,46 @@ |
||||
{ |
||||
"110000": { |
||||
"a": 1, |
||||
"b1": 2, |
||||
"b2": 3, |
||||
"b3": 4, |
||||
"b4": 5, |
||||
"b5": 6, |
||||
"b6": 7, |
||||
"b7": 9, |
||||
"e": 8 |
||||
}, |
||||
"120000": { |
||||
"a": 1, |
||||
"b1": 2, |
||||
"b2": 3, |
||||
"b3": 4, |
||||
"b4": 5, |
||||
"b5": 6, |
||||
"b6": 7, |
||||
"b7": 9, |
||||
"e": 8 |
||||
}, |
||||
"310000": { |
||||
"a": 1, |
||||
"b1": 2, |
||||
"b2": 3, |
||||
"b3": 4, |
||||
"b4": 5, |
||||
"b5": 6, |
||||
"b6": 7, |
||||
"b7": 9, |
||||
"e": 8 |
||||
}, |
||||
"500000": { |
||||
"a": 1, |
||||
"b1": 2, |
||||
"b2": 3, |
||||
"b3": 4, |
||||
"b4": 5, |
||||
"b5": 6, |
||||
"b6": 7, |
||||
"b7": 9, |
||||
"e": 8 |
||||
} |
||||
} |
@ -0,0 +1,42 @@ |
||||
{ |
||||
"110000": { |
||||
"a": 1, |
||||
"b1": 2, |
||||
"b2": 3, |
||||
"b3": 4, |
||||
"b4": 5, |
||||
"b5": 6, |
||||
"b6": 7, |
||||
"e": 8 |
||||
}, |
||||
"120000": { |
||||
"a": 1, |
||||
"b1": 2, |
||||
"b2": 3, |
||||
"b3": 4, |
||||
"b4": 5, |
||||
"b5": 6, |
||||
"b6": 7, |
||||
"e": 8 |
||||
}, |
||||
"310000": { |
||||
"a": 1, |
||||
"b1": 2, |
||||
"b2": 3, |
||||
"b3": 4, |
||||
"b4": 5, |
||||
"b5": 6, |
||||
"b6": 7, |
||||
"e": 8 |
||||
}, |
||||
"500000": { |
||||
"a": 1, |
||||
"b1": 2, |
||||
"b2": 3, |
||||
"b3": 4, |
||||
"b4": 5, |
||||
"b5": 6, |
||||
"b6": 7, |
||||
"e": 8 |
||||
} |
||||
} |
@ -1,4 +1,6 @@ |
||||
0101=generate.BuildHeatingScene |
||||
0102=generate.HeatBoilerScene |
||||
0103=generate.KitchenCookScene |
||||
0104=generate.MaterialKilnScene |
||||
0104=generate.MaterialKilnScene |
||||
0105=generate.MetalKilnScene |
||||
0106=stirtpar.StirparModelCalculate |
Loading…
Reference in new issue