cloudpss 3.2.0a2__py3-none-any.whl → 4.0.0a5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. cloudpss/__init__.py +6 -4
  2. cloudpss/dslab/DSLabFinancialResult.py +96 -0
  3. cloudpss/dslab/__init__.py +2 -0
  4. cloudpss/dslab/dataManageModel.py +267 -0
  5. cloudpss/dslab/dslab.py +145 -0
  6. cloudpss/dslab/files/__init__.py +2 -0
  7. cloudpss/dslab/files/curveData.py +140205 -0
  8. cloudpss/dslab/files/files.py +19 -0
  9. cloudpss/dslab/financialAnalysisModel.py +137 -0
  10. cloudpss/function/functionExecution.py +0 -2
  11. cloudpss/ieslab/DataManageModel.py +415 -0
  12. cloudpss/ieslab/EvaluationModel.py +189 -0
  13. cloudpss/ieslab/IESLabPlan.py +132 -0
  14. cloudpss/ieslab/IESLabSimulation.py +54 -0
  15. cloudpss/ieslab/PlanModel.py +143 -0
  16. cloudpss/ieslab/__init__.py +4 -0
  17. cloudpss/model/jobDefinitions.py +34 -0
  18. cloudpss/model/model.py +202 -15
  19. cloudpss/model/revision.py +2 -2
  20. cloudpss/project/project.py +4 -3
  21. cloudpss/runner/DSLabResult.py +92 -0
  22. cloudpss/runner/IESLabEvaluationResult.py +143 -0
  23. cloudpss/runner/IESLabPlanResult.py +195 -0
  24. cloudpss/runner/IESLabTypicalDayResult.py +142 -0
  25. cloudpss/runner/MessageStreamReceiver.py +193 -0
  26. cloudpss/runner/receiver.py +3 -3
  27. cloudpss/runner/result.py +38 -4
  28. cloudpss/runner/runner.py +61 -18
  29. cloudpss/utils/IO.py +153 -0
  30. cloudpss/utils/httprequests.py +14 -11
  31. cloudpss/verify.py +27 -14
  32. cloudpss/version.py +1 -0
  33. {cloudpss-3.2.0a2.dist-info → cloudpss-4.0.0a5.dist-info}/METADATA +2 -4
  34. cloudpss-4.0.0a5.dist-info/RECORD +54 -0
  35. {cloudpss-3.2.0a2.dist-info → cloudpss-4.0.0a5.dist-info}/WHEEL +1 -1
  36. cloudpss-3.2.0a2.dist-info/RECORD +0 -33
  37. {cloudpss-3.2.0a2.dist-info → cloudpss-4.0.0a5.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,19 @@
1
+ from .curveData import 基准出力曲线, 基准出力曲线2, 基准出力曲线3, 负荷曲线, 策略曲线
2
+
3
+ def getCurveData(kind):
4
+ extra_paths = {
5
+ '光伏': 基准出力曲线,
6
+ '风机': 基准出力曲线,
7
+ '燃气': 基准出力曲线2,
8
+ '水电': 基准出力曲线2,
9
+ '常规小火电': 基准出力曲线2,
10
+ '生物质发电': 基准出力曲线2,
11
+ '垃圾电厂': 基准出力曲线2,
12
+ '负荷分类': 负荷曲线,
13
+ '负荷用户': 负荷曲线,
14
+ '储能配置': 策略曲线,
15
+ }
16
+ if kind in extra_paths:
17
+ return extra_paths[kind]
18
+ else :
19
+ return []
@@ -0,0 +1,137 @@
1
+ import time
2
+ from cloudpss.runner.runner import Runner, HttpRunner, DSLabRunner
3
+ from cloudpss.runner.DSLabResult import DSLabResult
4
+ from ..utils import request
5
+ import json
6
+
7
+ class DSLabFinancialAnalysisModel(object):
8
+ _baseUri = 'api/ies/rest/pe/'
9
+
10
+ _kindNameMap = {
11
+ "投资组成": "investmentbanchandproportion",
12
+ "资金来源": "capitalsource",
13
+ "资产形式": "assetformation",
14
+ "生产成本": "productioncost",
15
+ "流动资金及财务费用": "workingcapitalandfinancialexpenses",
16
+ "税率及附加": "projectcalculation",
17
+ }
18
+
19
+ # 财务评价基础参数接口默认值
20
+ _financialParasDefaultValues = {
21
+ "资产形式": {
22
+ "fixedAssetsRatio": "95",
23
+ "residualRrate": "5",
24
+ "depreciationPeriod": "15",
25
+ "reimbursementPeriod": "5"
26
+ },
27
+ "生产成本": {
28
+ 'annualSalary': "8",
29
+ 'capacity': "4",
30
+ 'insuranceRate': "0.25",
31
+ 'materialsExpenses': "5.0",
32
+ 'otherExpenses': "1.0",
33
+ 'welfareFactor': "0"
34
+ },
35
+ "流动资金及财务费用": {
36
+ "annualAPCirculationTimes": "12",
37
+ "annualARCirculationTimes": "12",
38
+ "annualCashCirculationTimes": "12",
39
+ "annualStockCirculationTimes": "12",
40
+ "interestRateAndWorkingCapital": "4",
41
+ "workingCapitalLoanRatio": "70"
42
+ },
43
+ "税率及附加": {
44
+ "aleatoricAccumulationFundRate": "0",
45
+ "basicDiscountRate": "8",
46
+ "cityMaintenanceConstructionTaxTate": "5",
47
+ "corporateIncomeTaxRate": "25",
48
+ "educationFeePlus": "5",
49
+ "electricityVATRate": "18",
50
+ "fuelBoughtVATRate": "10",
51
+ "hotColdVATRate": "12",
52
+ "legalAccumulationFundRate": "10",
53
+ "localEducationPlus": "2",
54
+ "materialBoughtVATRate": "17",
55
+ "steamSaleVATRate": "12"
56
+ }
57
+ }
58
+
59
+ def __init__(self, simulationId):
60
+ '''
61
+ 初始化
62
+ '''
63
+ self.simulationId = simulationId
64
+
65
+ def _saveItemData(self, url, data):
66
+ '''
67
+ 保存url链接对应的优化方案下财务评估模块的基础信息
68
+ :param url string类型,表示优化方案的接口链接
69
+
70
+ :return: dict 类型,代表方案对应的财务评价基础参数信息
71
+ '''
72
+ r = request('POST', url, None, data=json.dumps(data))
73
+ return json.loads(r.text)
74
+
75
+ def _fetchItemData(self, url, planID):
76
+ '''
77
+ 获取planID对应的优化方案下财务评估模块的基础信息
78
+ :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
79
+
80
+ :return: dict 类型,为源数据的引用,代表方案对应的财务评价基础参数信息
81
+ '''
82
+ r = request('GET',
83
+ url,
84
+ params={
85
+ "planId": planID,
86
+ "simu": self.simulationId
87
+ })
88
+ return json.loads(r.text)
89
+
90
+ def run(self, planID) -> Runner[DSLabResult]:
91
+ '''
92
+ 运行财务评价概览计算
93
+
94
+ :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
95
+
96
+ :return: Runner[DSLabResult]
97
+ '''
98
+ url = 'api/ies/rest/saveDataToclickhouse'
99
+ try:
100
+ r = request('GET',
101
+ url,
102
+ params={
103
+ "planId": planID,
104
+ "simu": self.simulationId,
105
+ "CMD_TYPE": 'financialEvaluation'
106
+ })
107
+ data = json.loads(r.text)
108
+ return DSLabRunner({'rid': 'function/ieslab/evaluation'},
109
+ self.simulationId,
110
+ planId=planID,
111
+ cmdType='financialEvaluation')
112
+ except:
113
+ raise Exception('财务评价概览计算失败')
114
+
115
+ def GetFinancialParams(self, planID):
116
+ '''
117
+ 获取planID对应的优化方案下财务评估模块的基础信息
118
+ :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
119
+
120
+ :return: dict 类型,为源数据的引用,代表方案对应的财务评价基础参数信息
121
+ '''
122
+ dict_result = dict()
123
+ for k, v in self._kindNameMap.items():
124
+ kind = self._kindNameMap.get(k, k)
125
+ url = f"{self._baseUri}{kind}"
126
+ list_data = self._fetchItemData(url, planID)
127
+ if not list_data :
128
+ data = {
129
+ "simu": self.simulationId,
130
+ "planId": planID,
131
+ }
132
+ if k in self._financialParasDefaultValues:
133
+ data.update(self._financialParasDefaultValues[k])
134
+ dict_result[v] = self._saveItemData(url, data)
135
+ else:
136
+ dict_result[v] = list_data
137
+ return dict_result
@@ -50,8 +50,6 @@ class FunctionExecution(object):
50
50
  """
51
51
  获取表示当前执行的 FunctionExecution 单例
52
52
  """
53
- if FunctionExecution._current is not None:
54
- return FunctionExecution._current
55
53
  jobId = os.environ.get('CLOUDPSS_JOB_ID', None)
56
54
  functionId = os.environ.get('CLOUDPSS_FUNCTION_ID', None)
57
55
  executorId = os.environ.get('CLOUDPSS_EXECUTOR_ID', None)
@@ -0,0 +1,415 @@
1
+ from ..utils import request, fileLoad, graphql_request
2
+ import json
3
+ import time, datetime
4
+ import copy
5
+
6
+
7
+ class DataManageModel(object):
8
+ _kindUrlMap = {}
9
+ _kindNameMap = {}
10
+ _weatherUrl = ''
11
+ _baseUri = ''
12
+ _itemDataMap={}
13
+ _kindItemDataMap={}
14
+ _kindIdMap={}
15
+ def __init__(self, simulationId):
16
+ self.simulationId = simulationId
17
+ self._getAllData()
18
+ def _fetchItemData(self, url, kind):
19
+ '''
20
+ 私有方法,获取kind类型对应所有数据项的列表
21
+
22
+ :params: url string类型,request请求对应的url链接
23
+
24
+ :params: kind string类型,数据的种类标识,比如PhotovoltaicSys, WindPowerGenerator, GasTurbine等等
25
+
26
+ :return: list类型,返回该种类下所有数据项的的列表
27
+ '''
28
+ r = request('GET',
29
+ url,
30
+ params={
31
+ "simu_id": self.simulationId,
32
+ "kind": kind
33
+ })
34
+ str = url.split('/')[-2]
35
+ if(str in ['typhoon', 'rainfall', 'earthquake', 'extremeCold'] and r.status_code == 404):
36
+ return {}
37
+ else :
38
+ data = json.loads(r.text)
39
+ return data['results']
40
+
41
+ def _deleteItemData(self, url):
42
+ '''
43
+ 私有方法,删除url链接对应的数据
44
+
45
+ :params: url string类型,request请求对应的url链接
46
+
47
+ :return: 无
48
+ '''
49
+ r = request('DELETE',
50
+ url)
51
+ return r.text
52
+ def _saveItemData(self, url, data):
53
+ '''
54
+ 私有方法,保存url链接对应的data数据
55
+
56
+ :params: url string类型,request请求对应的url链接
57
+
58
+ :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
59
+
60
+ :return: dict类型,表示成功添加的数据内容
61
+ '''
62
+ r = request('POST', url, data=json.dumps(data))
63
+ dataList = json.loads(r.text)
64
+ return dataList
65
+
66
+ def _updateItemData(self, url, data):
67
+ '''
68
+ 私有方法,更新url链接对应的data数据
69
+
70
+ :params: url string类型,request请求对应的url链接
71
+
72
+ :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
73
+
74
+ :return: dict类型,表示成功更新的数据内容
75
+ '''
76
+ r = request('PATCH', url, data=json.dumps(data))
77
+ dataList = json.loads(r.text)
78
+ return dataList
79
+
80
+ def _getAllData(self):
81
+ '''
82
+ 私有方法,获取数据管理模块全部数据,函数初始化时调用
83
+
84
+ :return: 无
85
+ '''
86
+ list = ['thermalLoads', 'electricLoads', 'fuels', 'typhoon', 'rainfall', 'earthquake', 'extremeCold']
87
+ for kind,value in self._kindUrlMap.items():
88
+ try:
89
+
90
+ if kind in list:
91
+ dataList = self._fetchItemData(self._kindUrlMap[kind], None)
92
+ else:
93
+ dataList = self._fetchItemData(self._kindUrlMap[kind], kind)
94
+ except Exception as e:
95
+ pass
96
+ self._kindItemDataMap[kind]=dataList
97
+ for val in dataList:
98
+ self._itemDataMap[str(val['timeid'])]=val
99
+ self._itemDataMap[str(val['id'])]=val
100
+ self._kindIdMap[str(val['timeid'])]=kind
101
+ self._kindIdMap[str(val['id'])]=kind
102
+
103
+ def GetDataItem(self, ID: str):
104
+ '''
105
+ 获取ID对应的元素信息
106
+
107
+ :params: ID string类型,代表数据项的标识符,可以在所有类型的数据项中实现唯一标识
108
+
109
+ :return: dict类型,为源数据的引用,返回该数据项的信息
110
+ '''
111
+ data = self._itemDataMap.get(str(ID),None)
112
+
113
+ assert (data is not None), "找不到数据"
114
+
115
+ return copy.deepcopy(data)
116
+
117
+ def GetItemList(self, dataType):
118
+ '''
119
+ 获取dataType类型对应所有数据项的列表
120
+
121
+ :params: dataType enum类型,数据的种类标识,包含:"光伏": "PhotovoltaicSys","风机": "WindPowerGenerator","燃气轮机": "GasTurbine","热泵": "HeatPump","燃气锅炉": "GasBoiler","热管式太阳能集热器": "HPSolarCollector","电压缩制冷机": "CompRefrg","吸收式制冷机": "AbsorptionChiller","蓄电池": "Battery","储水罐": "WaterTank","变压器": "Transformer","传输线": "TransferLine","模块化多电平变流器": "MMC","离心泵": "CentrifugalPump","管道": "Pipe","采暖制冷负荷": "thermalLoads","电负荷": "electricLoads","燃料": "fuels","热": "HVACHeating","冷": "HVACCooling","常数电价": "常数电价","分时电价": "分时电价","阶梯电价": "阶梯电价","分时阶梯电价": "分时阶梯电价"
122
+
123
+ :return: list类型,返回该种类下所有数据项的列表
124
+ '''
125
+ assert (dataType in self._kindNameMap
126
+ or dataType in self._kindUrlMap), "数据类型不存在"
127
+ kind = self._kindNameMap.get(dataType, dataType)
128
+ return copy.deepcopy(self._kindItemDataMap[kind])
129
+
130
+ def AddDataItem(self, dataType, data):
131
+ '''
132
+ 向dataType类型的数据库中添加内容为data的数据项
133
+
134
+ :params: dataType enum类型,数据的种类标识,包含:"光伏"、"风机"、"燃气轮机"、"热泵"、"燃气锅炉"、"热管式太阳能集热器"、"电压缩制冷机"、"吸收式制冷机"、"蓄电池"、"储水罐"、"变压器"、"传输线"、"模块化多电平变流器"、"离心泵"、"管道"、"采暖制冷负荷"、"电负荷"、"燃料"、"热"、"冷"、"常数电价"、"分时电价"、"阶梯电价"、"分时阶梯电价"
135
+
136
+ :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
137
+
138
+ :return: string类型,返回新添加数据项的ID,如果数据结构不满足要求,应当抛出异常
139
+ '''
140
+ assert (dataType in self._kindNameMap
141
+ or dataType in self._kindUrlMap), "数据类型不存在"
142
+ kind = self._kindNameMap.get(dataType, dataType)
143
+ r = copy.deepcopy(data)
144
+ if r['id'] is not None:
145
+ del r['id']
146
+ if r['timeid'] is not None:
147
+ del r['timeid']
148
+ try:
149
+ self._saveItemData(self._kindUrlMap[kind], r)
150
+ self._kindIdMap[str(data['timeid'])]=kind
151
+ self._kindIdMap[str(data['id'])]=kind
152
+ self._itemDataMap[str(data['timeid'])]=data
153
+ self._itemDataMap[str(data['id'])]=data
154
+ if kind in ['thermalLoads', 'electricLoads', 'fuels']:
155
+ dataList = self._fetchItemData(self._kindUrlMap[kind], None)
156
+ self._kindItemDataMap[kind] = dataList
157
+ return dataList[-1]['id']
158
+ else:
159
+ dataList = self._fetchItemData(self._kindUrlMap[kind], kind)
160
+ self._kindItemDataMap[kind] = dataList
161
+ return dataList[-1]['id']
162
+ except Exception as e:
163
+ raise Exception(str(e))
164
+
165
+ def UpdateDataItem(self, ID: str, data):
166
+ '''
167
+ 更新数据库ID对应数据项"光伏"、"风机"、"燃气轮机"、"热泵"、"燃气锅炉"、"热管式太阳能集热器"、"电压缩制冷机"、"吸收式制冷机"、"蓄电池"、"储水罐"、"变压器"、"传输线"、"模块化多电平变流器"、"离心泵"、"管道"、"采暖制冷负荷"、"电负荷"、"燃料"、"热"、"冷"、"常数电价"、"分时电价"、"阶梯电价"、"分时阶梯电价"数据
168
+
169
+ :params: id string类型,代表数据项的标识符,可以在所有类型的数据项中实现唯一标识
170
+ :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
171
+
172
+ :return: bool 类型,返回True 更新成功
173
+ '''
174
+ try:
175
+ kind = self._kindNameMap.get(data['kind'], data['kind'])
176
+ if kind is not None:
177
+ url=self._kindUrlMap[kind] + '/' + str(ID) + '/'
178
+ ret = self._updateItemData(url, data)
179
+ for i in range(len(self._kindItemDataMap[kind])):
180
+ if str(self._kindItemDataMap[kind][i]['id']) == str(ID):
181
+ self._kindItemDataMap[kind][i] = data
182
+ break
183
+ else:
184
+ pass
185
+ return True
186
+ else:
187
+ raise Exception('传入的数据缺乏kind类型')
188
+ except Exception as e:
189
+ raise Exception(str(e))
190
+
191
+ def DeleteDataItem(self, ID: str):
192
+ '''
193
+ 向数据库中删除ID对应数据项"光伏"、"风机"、"燃气轮机"、"热泵"、"燃气锅炉"、"热管式太阳能集热器"、"电压缩制冷机"、"吸收式制冷机"、"蓄电池"、"储水罐"、"变压器"、"传输线"、"模块化多电平变流器"、"离心泵"、"管道"、"采暖制冷负荷"、"电负荷"、"燃料"、"热"、"冷"、"常数电价"、"分时电价"、"阶梯电价"、"分时阶梯电价"数据
194
+
195
+ :params: ID string类型,代表数据项的标识符,可以在所有类型的数据项中实现唯一标识
196
+
197
+ :return: bool 类型,删除是否成功,如果ID错误,抛出异常
198
+ '''
199
+ data = self._itemDataMap.get(str(ID),None)
200
+ kind = self._kindIdMap.get(str(ID))
201
+ if data is None or kind is None:
202
+ raise Exception('id错误,未找到该id资源')
203
+ else:
204
+ url=self._kindUrlMap[kind]
205
+ self._deleteItemData(url+str(data['id'])+'/')
206
+ del self._itemDataMap[str(data['timeid'])]
207
+ del self._itemDataMap[str(data['id'])]
208
+ dataList=self._kindItemDataMap[kind]
209
+ for i in range(len(dataList)):
210
+ if dataList[i]['id'] == data['id']:
211
+ del dataList[i]
212
+ break
213
+ return True
214
+
215
+ def SetProjectPosition(self, longitude, latitude):
216
+ '''
217
+ 将项目的经纬度位置坐标设置为(longitude, latitude)
218
+
219
+ :params: longitude float类型,表示经度,范围为气象数据源的经度范围
220
+ :params: latitude float类型,表示纬度,范围为气象数据源的纬度范围
221
+ '''
222
+ if (float(longitude) > 180 or float(longitude) < -180
223
+ or float(latitude) > 90 or float(latitude) < -90):
224
+ raise Exception('经纬度坐标不存在')
225
+ else:
226
+ r = request('GET',
227
+ self._baseUri + 'rest/weather_param/',
228
+ params={"simu": self.simulationId})
229
+ param = json.loads(r.text)
230
+ if (len(param["results"]) == 0):
231
+ r = request('POST',
232
+ self._baseUri + 'rest/weather_param/',
233
+ data=json.dumps({
234
+ "lat": latitude,
235
+ "lng": longitude,
236
+ "simu": self.simulationId,
237
+ "simu_id": self.simulationId,
238
+ }))
239
+ else:
240
+ id = param['results'][0]['id']
241
+ r = request('PUT',
242
+ self._baseUri + 'rest/weather_param/' + str(id) +
243
+ '/',
244
+ data=json.dumps({
245
+ "id": id,
246
+ "lat": latitude,
247
+ "lng": longitude,
248
+ "simu": self.simulationId,
249
+ "simu_id": self.simulationId,
250
+ }))
251
+ r = request('GET',
252
+ self._baseUri + 'load_weather/',
253
+ params={
254
+ "lat": latitude,
255
+ "lng": longitude,
256
+ "simu": self.simulationId,
257
+ "simu_id": self.simulationId,
258
+ })
259
+
260
+ def GetAtmosData(self, startDate, endDate):
261
+ '''
262
+ 获取在startDate到endDate之间的气象数据
263
+
264
+ :params: startDate dateTime类型,表示开始时间
265
+ :params: endDate dateTime类型,表示结束时间
266
+
267
+ :return: list<dict>类型,为源数据的引用,返回当前项目位置对应时间范围内的气象数据序列,每个元素用字典进行表示,字典的key即区分不同的气象数据项(如风速、太阳辐照等)以及标识当前时间点
268
+ '''
269
+ sDate = datetime.date(*map(int, startDate.split('-')))
270
+ eDate = datetime.date(*map(int, endDate.split('-')))
271
+ res = (eDate - sDate).days * 86400 + (eDate - sDate).seconds
272
+ if res < 0:
273
+ raise Exception('超出有效时间范围')
274
+ else:
275
+ r = request('GET',
276
+ self._weatherUrl,
277
+ params={
278
+ "time_after": startDate,
279
+ "time_before": endDate,
280
+ "sid": self.simulationId,
281
+ })
282
+ weatherData = json.loads(r.text)
283
+ return weatherData['results']
284
+
285
+
286
+ class IESSimulationDataManageModel(DataManageModel):
287
+ _baseUri = 'api/ieslab-simulation/'
288
+ _weatherUrl = 'api/ieslab-simulation/rest/weather_data/'
289
+ _kindNameMap = {
290
+ "光伏": "PhotovoltaicSys",
291
+ "风机": "WindPowerGenerator",
292
+ "燃气轮机": "GasTurbine",
293
+ "热泵": "HeatPump",
294
+ "燃气锅炉": "GasBoiler",
295
+ "热管式太阳能集热器": "HPSolarCollector",
296
+ "电压缩制冷机": "CompRefrg",
297
+ "吸收式制冷机": "AbsorptionChiller",
298
+ "蓄电池": "Battery",
299
+ "储水罐": "WaterTank",
300
+ "变压器": "Transformer",
301
+ "传输线": "TransferLine",
302
+ "模块化多电平变流器": "MMC",
303
+ "离心泵": "CentrifugalPump",
304
+ "管道": "Pipe",
305
+ "采暖制冷负荷": "thermalLoads",
306
+ "电负荷": "electricLoads",
307
+ "燃料": "fuels",
308
+ "热": "HVACHeating",
309
+ "冷": "HVACCooling",
310
+ "常数电价": "常数电价",
311
+ "分时电价": "分时电价",
312
+ "阶梯电价": "阶梯电价",
313
+ "分时阶梯电价": "分时阶梯电价",
314
+ "台风灾害": "typhoon",
315
+ "降雨灾害": "rainfall",
316
+ "地震灾害": "earthquake",
317
+ "极寒灾害": "extremeCold"
318
+ }
319
+ _kindUrlMap = {
320
+ "PhotovoltaicSys": "api/ieslab-simulation/rest/dpcs/",
321
+ "WindPowerGenerator": "api/ieslab-simulation/rest/dpcs/",
322
+ "GasTurbine": "api/ieslab-simulation/rest/dpcs/",
323
+ "HeatPump": "api/ieslab-simulation/rest/dhscs/",
324
+ "GasBoiler": "api/ieslab-simulation/rest/dhscs/",
325
+ "HPSolarCollector": "api/ieslab-simulation/rest/dhscs/",
326
+ "CompRefrg": "api/ieslab-simulation/rest/dhscs/",
327
+ "AbsorptionChiller": "api/ieslab-simulation/rest/dhscs/",
328
+ "Battery": "api/ieslab-simulation/rest/escs/",
329
+ "WaterTank": "api/ieslab-simulation/rest/escs/",
330
+ "Transformer": "api/ieslab-simulation/rest/dstcs/",
331
+ "TransferLine": "api/ieslab-simulation/rest/dstcs/",
332
+ "MMC": "api/ieslab-simulation/rest/dstcs/",
333
+ "CentrifugalPump": "api/ieslab-simulation/rest/hstcs/",
334
+ "Pipe": "api/ieslab-simulation/rest/hstcs/",
335
+ "thermalLoads": "api/ieslab-simulation/rest/thermalLoads/",
336
+ "electricLoads": "api/ieslab-simulation/rest/electricLoads/",
337
+ "fuels": "api/ieslab-simulation/rest/fuels/",
338
+ "HVACHeating": "api/ieslab-simulation/rest/hots/",
339
+ "HVACCooling": "api/ieslab-simulation/rest/colds/",
340
+ "常数电价": "api/ieslab-simulation/rest/elects/",
341
+ "分时电价": "api/ieslab-simulation/rest/elects/",
342
+ "阶梯电价": "api/ieslab-simulation/rest/elects/",
343
+ "分时阶梯电价": "api/ieslab-simulation/rest/elects/",
344
+ "typhoon": "api/ieslab-simulation/rest/typhoon/",
345
+ "rainfall": "api/ieslab-simulation/rest/rainfall/",
346
+ "earthquake": "api/ieslab-simulation/rest/earthquake/",
347
+ "extremeCold": "api/ieslab-simulation/rest/extremeCold/"
348
+ }
349
+ pass
350
+
351
+
352
+ class IESPlanDataManageModel(DataManageModel):
353
+ _baseUri = 'api/ieslab-plan/'
354
+ _weatherUrl = 'api/ieslab-plan/rest/weather_data/'
355
+ _kindNameMap = {
356
+ "光伏": "PhotovoltaicSys",
357
+ "风机": "WindPowerGenerator",
358
+ "燃气轮机": "GasTurbine",
359
+ "热泵": "HeatPump",
360
+ "燃气锅炉": "GasBoiler",
361
+ "热管式太阳能集热器": "HPSolarCollector",
362
+ "电压缩制冷机": "CompRefrg",
363
+ "吸收式制冷机": "AbsorptionChiller",
364
+ "蓄电池": "Battery",
365
+ "储水罐": "WaterTank",
366
+ "变压器": "Transformer",
367
+ "传输线": "TransferLine",
368
+ "模块化多电平变流器": "MMC",
369
+ "离心泵": "CentrifugalPump",
370
+ "管道": "Pipe",
371
+ "采暖制冷负荷": "thermalLoads",
372
+ "电负荷": "electricLoads",
373
+ "燃料": "fuels",
374
+ "热": "HVACHeating",
375
+ "冷": "HVACCooling",
376
+ "常数电价": "常数电价",
377
+ "分时电价": "分时电价",
378
+ "阶梯电价": "阶梯电价",
379
+ "分时阶梯电价": "分时阶梯电价",
380
+ "台风灾害": "typhoon",
381
+ "降雨灾害": "rainfall",
382
+ "地震灾害": "earthquake",
383
+ "极寒灾害": "extremeCold"
384
+ }
385
+ _kindUrlMap = {
386
+ "PhotovoltaicSys": "api/ieslab-plan/rest/dpcs/",
387
+ "WindPowerGenerator": "api/ieslab-plan/rest/dpcs/",
388
+ "GasTurbine": "api/ieslab-plan/rest/dpcs/",
389
+ "HeatPump": "api/ieslab-plan/rest/dhscs/",
390
+ "GasBoiler": "api/ieslab-plan/rest/dhscs/",
391
+ "HPSolarCollector": "api/ieslab-plan/rest/dhscs/",
392
+ "CompRefrg": "api/ieslab-plan/rest/dhscs/",
393
+ "AbsorptionChiller": "api/ieslab-plan/rest/dhscs/",
394
+ "Battery": "api/ieslab-plan/rest/escs/",
395
+ "WaterTank": "api/ieslab-plan/rest/escs/",
396
+ "Transformer": "api/ieslab-plan/rest/dstcs/",
397
+ "TransferLine": "api/ieslab-plan/rest/dstcs/",
398
+ "MMC": "api/ieslab-plan/rest/dstcs/",
399
+ "CentrifugalPump": "api/ieslab-plan/rest/hstcs/",
400
+ "Pipe": "api/ieslab-plan/rest/hstcs/",
401
+ "thermalLoads": "api/ieslab-plan/rest/thermalLoads/",
402
+ "electricLoads": "api/ieslab-plan/rest/electricLoads/",
403
+ "fuels": "api/ieslab-plan/rest/fuels/",
404
+ "HVACHeating": "api/ieslab-plan/rest/hots/",
405
+ "HVACCooling": "api/ieslab-plan/rest/colds/",
406
+ "常数电价": "api/ieslab-plan/rest/elects/",
407
+ "分时电价": "api/ieslab-plan/rest/elects/",
408
+ "阶梯电价": "api/ieslab-plan/rest/elects/",
409
+ "分时阶梯电价": "api/ieslab-plan/rest/elects/",
410
+ "typhoon": "api/ieslab-plan/rest/typhoon/",
411
+ "rainfall": "api/ieslab-plan/rest/rainfall/",
412
+ "earthquake": "api/ieslab-plan/rest/earthquake/",
413
+ "extremeCold": "api/ieslab-plan/rest/extremeCold/"
414
+ }
415
+ pass