cloudpss 3.1.2__py3-none-any.whl → 3.1.3b1__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.
cloudpss/__init__.py CHANGED
@@ -6,14 +6,18 @@ from .model import Model, ModelRevision, ModelTopology
6
6
  from .project import Project
7
7
  from .utils import MatlabDataEncoder, DateTimeEncode
8
8
  from . import function
9
+
9
10
  from .function import FunctionExecution
11
+ from .dslab import DSLab
10
12
 
11
13
  __all__ = [
12
14
  'setToken', 'Model', 'ModelRevision', 'ModelTopology', 'Runner', 'Result',
13
15
  'PowerFlowResult', 'EMTResult', 'MatlabDataEncoder', 'DateTimeEncode',
14
- 'function', 'Project', 'currentJob', 'IESLabSimulation', 'IESLabPlan'
16
+ 'function', 'Project', 'currentJob', 'IESLabSimulation', 'IESLabPlan',
17
+ 'DSLab'
18
+
15
19
  ]
16
- __version__ = '3.1.2'
20
+ __version__ = '3.1.3-beta.1'
17
21
 
18
22
 
19
23
  def currentJob():
@@ -0,0 +1,96 @@
1
+ import json
2
+ from ..utils.httprequests import request
3
+
4
+ class DSLabResult(object):
5
+ _baseUri = 'api/ies/rest/'
6
+ _kindNameMap = {
7
+ "利润与利润分配": "getEconomyResult",
8
+ "财务计划现金": "getFinancialPlanCashFlowResult",
9
+ "资产负债": "getLiabilityAssetsResult",
10
+ "投资使用计划与资金筹措": "getInvestPlanDataResult",
11
+ "借款还本付息计划": "getLoanRepaymentPlanResult",
12
+ "流动资金估算": "getFlowCashEvaluteResult",
13
+ "资产折旧与摊销估算": "getFlowCashEvaluteResult",
14
+ "总成本费用估算表": "getSumCostResult",
15
+ "项目总投资现金流量": "getSumInvestFlowCashResult",
16
+ "项目资本金现金流量": "getProjectCashFlowResult",
17
+ "营业收入、税金、附加和增值税估算": "getIncomeTaxResult",
18
+ }
19
+
20
+ def __init__(self, simulationId, taskId=None, **keywords) -> None:
21
+ """
22
+ 初始化
23
+ """
24
+ self.simulationId = simulationId
25
+ self.timeId = keywords.get('timeId', 0)
26
+ self.planId = keywords.get('planId', 0)
27
+ self.cmdType = keywords.get('cmdType', None)
28
+
29
+ def _fetchItemData(self, url, planID):
30
+ '''
31
+ 获取planID对应的优化方案下resultType财务评估结果
32
+
33
+ :param planID int 类型,表示优化方案的ID,数值位于0~优化方案数量之间
34
+ :param resultType enum 类型,表示财务评价结果表格的类型
35
+
36
+ :return: dict 类型,为源数据的引用,代表方案对应的财务评价基础参数信息
37
+ '''
38
+ r = request('GET',
39
+ url,
40
+ params={
41
+ "simu": self.simulationId,
42
+ "planId": planID,
43
+ "time": 0
44
+ })
45
+ data = json.loads(r.text)
46
+ return data
47
+
48
+ # def status(self):
49
+ # '''
50
+ # 获取运行状态
51
+
52
+ # :return: boolean 类型
53
+ # '''
54
+ # result = None
55
+ # if self.cmdType is None:
56
+ # result = self.GetOverviewResult()
57
+ # if result is None:
58
+ # return False
59
+ # return True
60
+
61
+ def GetFinancialResult(self, resultType):
62
+ '''
63
+ 获取planID对应的优化方案下resultType财务评估结果
64
+ :param planID int 类型,表示优化方案的ID,数值位于0~优化方案数量之间
65
+ :param resultType enum 类型,表示财务评价结果表格的类型
66
+
67
+ :return: dict 类型,为源数据的引用,代表方案对应的财务评价基础参数信息
68
+
69
+ '''
70
+ assert (resultType in self._kindNameMap), "数据类型不存在"
71
+ kind = self._kindNameMap.get(resultType, resultType)
72
+ url = f'{self._baseUri}{kind}'
73
+ list = self._fetchItemData(url, self.planId)
74
+ dict_result = dict()
75
+ for val in list:
76
+ for k, v in val.items():
77
+ dict_result[k] = v
78
+ return dict_result['data']
79
+
80
+ def GetOverviewResult(self):
81
+ '''
82
+ 获取当前结果类对应的概览结果
83
+
84
+ :return: array类型,代表该方案对应的概览结果
85
+ '''
86
+ r = request('GET',
87
+ "api/ies/rest/getOverviewResult",
88
+ params={
89
+ "simu": self.simulationId,
90
+ "planId": self.planId,
91
+ "time": self.timeId
92
+ })
93
+ result = json.loads(r.text)
94
+ if len(result) > 0:
95
+ return result[0]['data']
96
+ return None
@@ -0,0 +1,2 @@
1
+ from .dslab import DSLab
2
+ __all__ = ['DSLab']
@@ -0,0 +1,259 @@
1
+ from ..utils import request, fileLoad, graphql_request
2
+ import json
3
+ import time, datetime
4
+ import copy
5
+ import os
6
+
7
+ class DataManageModel(object):
8
+ _weatherUrl = ''
9
+ _baseUri = ''
10
+ _kindUrlMap = {}
11
+ _itemDataMap={}
12
+ _kindItemDataMap={}
13
+ _kindIdMap={}
14
+
15
+ def __init__(self, resourceId):
16
+ self.resourceId = resourceId
17
+
18
+ def _fetchItemData(self, url):
19
+ '''
20
+ 私有方法,获取simu对应所有数据项的列表
21
+ :params: url string类型,request请求对应的url链接
22
+
23
+ :return: list类型,返回该种类下所有数据项的的列表
24
+ '''
25
+ r = request('GET',
26
+ url,
27
+ params={
28
+ "simu": self.resourceId,
29
+ })
30
+ return json.loads(r.text)
31
+
32
+ def _saveItemData(self, url, data):
33
+ '''
34
+ 私有方法,保存url链接对应的data数据
35
+ :params: url string类型,request请求对应的url链接
36
+ :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
37
+
38
+ :return: 无
39
+ '''
40
+ r = request('POST', url, data=json.dumps(data))
41
+
42
+
43
+ def _updateItemData(self, url, data):
44
+ '''
45
+ 私有方法,更新url链接对应的data数据
46
+ :params: url string类型,request请求对应的url链接
47
+ :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
48
+
49
+ :return: 无
50
+ '''
51
+ r = request('PUT', url, data=json.dumps(data))
52
+
53
+ def _deleteItemData(self, url):
54
+ '''
55
+ 私有方法,删除url链接对应的数据
56
+ :params: url string类型,request请求对应的url链接
57
+
58
+ :return: 无
59
+ '''
60
+ r = request('DELETE',url)
61
+
62
+ def LocationGet(self):
63
+ '''
64
+ 获取气象定位点数据
65
+
66
+ :return: list<dict>类型,为源数据的引用,包含id,经度坐标,纬度坐标,定位点名称
67
+ '''
68
+ url = f"{self._baseUri}rest/location"
69
+ r = request('GET',
70
+ url,
71
+ params={"simu": self.resourceId})
72
+ return json.loads(r.text)
73
+
74
+ def LocationCreate(self, name=None, longitude=None, latitude=None):
75
+ '''
76
+ 创建气象定位点
77
+ :param: name 定位点名称,可选
78
+ :params: longitude float类型,可选,表示经度,范围为气象数据源的经度范围
79
+ :params: latitude float类型,可选,表示纬度,范围为气象数据源的纬度范围
80
+
81
+ :return: 无
82
+ '''
83
+ url = f"{self._baseUri}rest/location"
84
+ r = request('POST',
85
+ url,
86
+ data=json.dumps({
87
+ "lat": '34.734492',
88
+ "lng": '113.648906',
89
+ "simu": self.resourceId,
90
+ "name": '定位点'
91
+ }))
92
+ d = json.loads(r.text)
93
+ if name is not None and longitude is not None and latitude is not None:
94
+ if (float(longitude) > 180 or float(longitude) < -180
95
+ or float(latitude) > 90 or float(latitude) < -90):
96
+ raise Exception('经纬度坐标不存在')
97
+ else:
98
+ r = request('PUT',
99
+ url,
100
+ data=json.dumps({
101
+ "lat": latitude,
102
+ "lng": longitude,
103
+ "simu": self.resourceId,
104
+ "name": name,
105
+ "id": d['id']
106
+ }))
107
+ else:
108
+ raise Exception('参数缺失')
109
+
110
+ def LocationUpdate(self, id, name, longitude, latitude):
111
+ '''
112
+ 修改气象定位点
113
+ :param id: 定位点id
114
+ :param: name 定位点名称,可选
115
+ :params: longitude float类型,可选,表示经度,范围为气象数据源的经度范围
116
+ :params: latitude float类型,可选,表示纬度,范围为气象数据源的纬度范围
117
+
118
+ :return: 无
119
+ '''
120
+ if (float(longitude) > 180 or float(longitude) < -180
121
+ or float(latitude) > 90 or float(latitude) < -90):
122
+ raise Exception('经纬度坐标不存在')
123
+ else:
124
+ url = f"{self._baseUri}rest/location"
125
+ r = request('PUT',
126
+ url,
127
+ data=json.dumps({
128
+ "lat": latitude,
129
+ "lng": longitude,
130
+ "simu": self.resourceId,
131
+ "name": name,
132
+ "id": id
133
+ }))
134
+
135
+ def LocationDelete(self, id):
136
+ '''
137
+ 删除气象定位点
138
+ :param id: 定位点id
139
+
140
+ :return: 无
141
+ '''
142
+ url = f"{self._baseUri}rest/location/{str(id)}"
143
+ r = request('DELETE',
144
+ url)
145
+
146
+ def LoadWeather(self):
147
+ '''
148
+ 加载气象数据
149
+
150
+ :return: 无
151
+ '''
152
+ url = f"{self._baseUri}rest/load_weather/"
153
+ r = request('GET',
154
+ url,
155
+ params = {
156
+ "simu": self.resourceId,
157
+ })
158
+
159
+ def GetAtmosData(self, locationId, date):
160
+ '''
161
+ 获取日期在date的气象数据
162
+ :params: locationId str类型,表示定位点id
163
+ :params: date dateTime类型,表示时间
164
+
165
+ :return: list<dict>类型,为源数据的引用,返回当前项目位置对应时间范围内的气象数据序列,每个元素用字典进行表示,字典的key即区分不同的气象数据项(如风速、太阳辐照等)以及标识当前时间点
166
+ '''
167
+ rDate = datetime.date(*map(int, date.split('-')))
168
+ r = request('GET',
169
+ self._weatherUrl,
170
+ params={
171
+ "locationId": str(locationId),
172
+ "date": rDate,
173
+ })
174
+ return json.loads(r.text)
175
+
176
+ def AddDataItem(self, kind, data):
177
+ '''
178
+ 向kind类型的数据库中添加内容为data的数据项
179
+ :params: kind str类型,数据的种类标识,包含:光伏、风机、燃气、水电、常规小火电、生物质发电、垃圾电厂、传输线、变压器、开关、负荷分类、负荷用户、储能配置、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
180
+ :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
181
+
182
+ :return: list<dict>类型,返回该种类下所有数据项的列表
183
+ '''
184
+ assert (kind in self._kindUrlMap), "数据类型不存在"
185
+ extra_paths = {
186
+ '光伏': '基准出力曲线.json',
187
+ '风机': '基准出力曲线.json',
188
+ '燃气': '基准出力曲线2.json',
189
+ '水电': '基准出力曲线2.json',
190
+ '常规小火电': '基准出力曲线2.json',
191
+ '生物质发电': '基准出力曲线2.json',
192
+ '垃圾电厂': '基准出力曲线2.json',
193
+ '负荷分类': '负荷曲线.json',
194
+ '负荷用户': '负荷曲线.json',
195
+ '储能配置': '策略曲线.json',
196
+ }
197
+ extra = data.get('extra')
198
+ if extra is None or not extra:
199
+ if kind in extra_paths:
200
+ path = os.path.join(os.path.dirname(__file__), 'data', extra_paths[kind])
201
+ with open(path) as f:
202
+ extra = json.load(f)
203
+ r = copy.deepcopy(data)
204
+ r['extra'] = extra
205
+ url = f"{self._baseUri}rest/{kind}"
206
+ self._saveItemData(url, r)
207
+ return self._fetchItemData(url)
208
+ else:
209
+ r = copy.deepcopy(data)
210
+ url = f"{self._baseUri}rest/{kind}"
211
+ self._saveItemData(url, r)
212
+ return self._fetchItemData(url)
213
+
214
+ def DeleteDataItem(self, id, kind):
215
+ '''
216
+ 获取kind类型对应所有数据项的列表
217
+ :params: id int类型,数据的id
218
+ :params: kind str类型,数据的类型
219
+
220
+ :return: list<dict>类型,返回该种类下所有数据项的列表
221
+ '''
222
+ url = f"{self._baseUri}rest/id/{str(id)}"
223
+ self._deleteItemData(url)
224
+ return self._fetchItemData(f"{self._baseUri}rest/{kind}")
225
+
226
+
227
+ def UpdateDataItem(self, kind, data):
228
+ '''
229
+ 更新kind类型对应数据项
230
+ :params: kind str类型,数据的类型
231
+ :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
232
+
233
+ :return: list<dict>类型,返回该种类下所有数据项的列表
234
+ '''
235
+ url = f"{self._baseUri}rest/{kind}"
236
+ self._updateItemData(url, data)
237
+ return self._fetchItemData(url)
238
+
239
+
240
+ def GetItemList(self, kind):
241
+ '''
242
+ 获取kind类型对应所有数据项的列表
243
+ :params: kind str类型,数据的种类标识,包含:光伏、风机、燃气、水电、常规小火电、生物质发电、垃圾电厂、传输线、变压器、开关、负荷分类、负荷用户、储能配置、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
244
+
245
+ :return: list<dict>类型,返回该种类下所有数据项的列表
246
+ '''
247
+ assert (kind in self._kindUrlMap), "数据类型不存在"
248
+ url = f"{self._baseUri}rest/{kind}"
249
+ return self._fetchItemData(url)
250
+
251
+ class DSLabDataManageModel(DataManageModel):
252
+ _baseUri = 'api/ies/'
253
+ _weatherUrl = 'api/ies/rest/weather'
254
+ _kindUrlMap = {kind: f"api/ies/rest/{kind}" for kind in [
255
+ "光伏", "风机", "燃气", "水电", "常规小火电", "生物质发电", "垃圾电厂",
256
+ "传输线", "变压器", "开关", "负荷分类", "负荷用户", "储能配置",
257
+ "上网电价", "输配电价", "常数电价", "阶梯电价", "分时电价", "分时阶梯电价"
258
+ ]}
259
+
@@ -0,0 +1,66 @@
1
+ import json
2
+ from ..utils import request
3
+ from ..model.model import Model
4
+ from .dataManageModel import DSLabDataManageModel
5
+ from .financialAnalysisModel import DSLabFinancialAnalysisModel
6
+ from .DSLabFinancialResult import DSLabResult
7
+
8
+ class DSLab(object):
9
+ def __init__(self, project={}):
10
+ '''
11
+ 初始化
12
+ '''
13
+ self.id = project.get('id', None)
14
+ self.resource = project.get('resource', None)
15
+ self.name = project.get('name', None)
16
+ self.__modelRid = project.get('model', None)
17
+ if self.__modelRid is not None:
18
+ self.model = Model.fetch(self.__modelRid)
19
+ self.dataManageModel = DSLabDataManageModel(self.resource)
20
+ self.financialAnalysisModel = DSLabFinancialAnalysisModel(self.resource)
21
+ self.dsLabResult = DSLabResult(self.resource)
22
+
23
+ @staticmethod
24
+ def fetch(simulationId):
25
+ '''
26
+ 获取算例信息
27
+
28
+ :params: simulationId string类型,代表数据项的算例id
29
+
30
+ :return: DSLab
31
+ '''
32
+ try:
33
+ r = request(
34
+ 'GET', 'api/ies/rest/simulation/{0}'.format(simulationId))
35
+ project = json.loads(r.text)
36
+ return DSLab(project)
37
+ except Exception as e:
38
+ if 'Unauthorized' in str(e):
39
+ raise Exception('token 无效')
40
+ else:
41
+ raise Exception('未查询到当前算例')
42
+
43
+ def run(self, job=None, name=None):
44
+ '''
45
+ 调用仿真
46
+
47
+ :params job: 调用仿真时使用的计算方案,不指定将使用算例保存时选中的计算方案
48
+ :params name: 任务名称,为空时使用项目的参数方案名称和计算方案名称
49
+
50
+ :return: 返回一个运行实例
51
+ '''
52
+ if job is None:
53
+ currentJob = self.model.context['currentJob']
54
+ job = self.model.jobs[currentJob]
55
+
56
+ job['args']['simulationId'] = self.id
57
+ return self.model.run(job, name=name)
58
+
59
+ def dsLabRun(self):
60
+ '''
61
+ 生成方案优选算例
62
+
63
+ :return: 方案优选运行实例
64
+ '''
65
+ pass
66
+
@@ -0,0 +1,113 @@
1
+ import time
2
+ from cloudpss.runner.runner import Runner
3
+ from cloudpss.dslab.DSLabFinancialResult import DSLabResult
4
+ from ..utils import request
5
+ import json
6
+
7
+
8
+ class DSLabFinancialAnalysisModel(object):
9
+ _baseUri = 'api/ies/rest/pe/'
10
+
11
+ _kindNameMap = {
12
+ "投资组成": "investmentbanchandproportion",
13
+ "资金来源": "capitalsource",
14
+ "资产形式": "assetformation",
15
+ "生产成本": "productioncost",
16
+ "流动资金及财务费用": "workingcapitalandfinancialexpenses",
17
+ "税率及附加": "projectcalculation",
18
+ }
19
+
20
+ # 财务评价基础参数接口默认值
21
+ _financialParasDefaultValues = {
22
+ "资产形式": {
23
+ "fixedAssetsRatio": "95",
24
+ "residualRrate": "5",
25
+ "depreciationPeriod": "15",
26
+ "reimbursementPeriod": "5"
27
+ },
28
+ "生产成本": {
29
+ 'annualSalary': "8",
30
+ 'capacity': "4",
31
+ 'insuranceRate': "0.25",
32
+ 'materialsExpenses': "5.0",
33
+ 'otherExpenses': "1.0",
34
+ 'welfareFactor': "0"
35
+ },
36
+ "流动资金及财务费用": {
37
+ "annualAPCirculationTimes": "12",
38
+ "annualARCirculationTimes": "12",
39
+ "annualCashCirculationTimes": "12",
40
+ "annualStockCirculationTimes": "12",
41
+ "interestRateAndWorkingCapital": "4",
42
+ "workingCapitalLoanRatio": "70"
43
+ },
44
+ "税率及附加": {
45
+ "aleatoricAccumulationFundRate": "0",
46
+ "basicDiscountRate": "8",
47
+ "cityMaintenanceConstructionTaxTate": "5",
48
+ "corporateIncomeTaxRate": "25",
49
+ "educationFeePlus": "5",
50
+ "electricityVATRate": "18",
51
+ "fuelBoughtVATRate": "10",
52
+ "hotColdVATRate": "12",
53
+ "legalAccumulationFundRate": "10",
54
+ "localEducationPlus": "2",
55
+ "materialBoughtVATRate": "17",
56
+ "steamSaleVATRate": "12"
57
+ }
58
+ }
59
+
60
+ def __init__(self, simulationId):
61
+ '''
62
+ 初始化
63
+ '''
64
+ self.simulationId = simulationId
65
+
66
+ def _saveItemData(self, url, data):
67
+ '''
68
+ 保存url链接对应的优化方案下财务评估模块的基础信息
69
+ :param url string类型,表示优化方案的接口链接
70
+
71
+ :return: dict 类型,代表方案对应的财务评价基础参数信息
72
+ '''
73
+ r = request('POST', url, data=json.dumps(data))
74
+ return json.loads(r.text)
75
+
76
+ def _fetchItemData(self, url, planID):
77
+ '''
78
+ 获取planID对应的优化方案下财务评估模块的基础信息
79
+ :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
80
+
81
+ :return: dict 类型,为源数据的引用,代表方案对应的财务评价基础参数信息
82
+ '''
83
+ r = request('GET',
84
+ url,
85
+ params={
86
+ "planId": planID,
87
+ "simu": self.simulationId
88
+ })
89
+ return json.loads(r.text)
90
+
91
+ def GetFinancialParams(self, planID):
92
+ '''
93
+ 获取planID对应的优化方案下财务评估模块的基础信息
94
+ :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
95
+
96
+ :return: dict 类型,为源数据的引用,代表方案对应的财务评价基础参数信息
97
+ '''
98
+ dict_result = dict()
99
+ for k, v in self._kindNameMap.items():
100
+ kind = self._kindNameMap.get(k, k)
101
+ url = f"{self._baseUri}{kind}"
102
+ list_data = self._fetchItemData(url, planID)
103
+ if not list_data :
104
+ data = {
105
+ "simu": self.simulationId,
106
+ "planId": planID,
107
+ }
108
+ if k in self._financialParasDefaultValues:
109
+ data.update(self._financialParasDefaultValues[k])
110
+ dict_result[v] = self._saveItemData(url, data)
111
+ else:
112
+ dict_result[v] = list_data
113
+ return dict_result
@@ -146,19 +146,19 @@ class DataManageModel(object):
146
146
  if r['timeid'] is not None:
147
147
  del r['timeid']
148
148
  try:
149
- ret = self._saveItemData(self._kindUrlMap[kind], r)
149
+ self._saveItemData(self._kindUrlMap[kind], r)
150
150
  self._kindIdMap[str(data['timeid'])]=kind
151
151
  self._kindIdMap[str(data['id'])]=kind
152
152
  self._itemDataMap[str(data['timeid'])]=data
153
153
  self._itemDataMap[str(data['id'])]=data
154
154
  if kind in ['thermalLoads', 'electricLoads', 'fuels']:
155
155
  dataList = self._fetchItemData(self._kindUrlMap[kind], None)
156
- self._kindItemDataMap[kind].append(dataList)
157
- return dataList[len(dataList) - 1]['id']
156
+ self._kindItemDataMap[kind] = dataList
157
+ return dataList[-1]['id']
158
158
  else:
159
159
  dataList = self._fetchItemData(self._kindUrlMap[kind], kind)
160
- self._kindItemDataMap[kind].append(dataList)
161
- return dataList[len(dataList) - 1]['id']
160
+ self._kindItemDataMap[kind] = dataList
161
+ return dataList[-1]['id']
162
162
  except Exception as e:
163
163
  raise Exception(str(e))
164
164
 
@@ -5,7 +5,6 @@ from ..utils import request
5
5
  import json
6
6
  from enum import IntEnum, unique
7
7
 
8
-
9
8
  class IESLabEvaluationModel(object):
10
9
  _baseUri = 'api/ieslab-plan/rest/'
11
10
  _taskUri = 'api/ieslab-plan/taskmanager/getSimuLastTasks'
@@ -58,6 +57,12 @@ class IESLabEvaluationModel(object):
58
57
  }
59
58
  }
60
59
 
60
+ # 评价基础参数接口默认值
61
+ _evaluationType = {
62
+ "环保评价": "environmentalEvaluation",
63
+ "能效评价": "energyEvaluation"
64
+ }
65
+
61
66
  def __init__(self, simulationId):
62
67
  '''
63
68
  初始化
@@ -91,7 +96,7 @@ class IESLabEvaluationModel(object):
91
96
  data = json.loads(r.text)
92
97
  return data
93
98
 
94
- def GetFinancialParas(self, planID):
99
+ def GetFinancialParams(self, planID):
95
100
  '''
96
101
  获取planID对应的优化方案下财务评估模块的基础信息
97
102
  :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
@@ -135,20 +140,20 @@ class IESLabEvaluationModel(object):
135
140
  params={
136
141
  "simuid": self.simulationId,
137
142
  "planId": planID,
138
- "CMD_TYPE": type
143
+ "CMD_TYPE": self._evaluationType[type]
139
144
  })
140
145
  data = json.loads(r.text)
141
146
  return HttpRunner({'rid': 'function/ieslab/evaluation'},
142
147
  self.simulationId,
143
148
  timeId=timeId,
144
149
  planId=planID,
145
- cmdType=type)
150
+ cmdType=self._evaluationType[type])
146
151
  except:
147
152
  raise Exception('方案评估开始计算失败')
148
153
 
149
154
  def EnvironmentalEvaluationRun(self, planID):
150
155
  '''
151
- 运行方案评估
156
+ 运行环保评价方案评估
152
157
 
153
158
  :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
154
159
 
@@ -158,7 +163,7 @@ class IESLabEvaluationModel(object):
158
163
 
159
164
  def EnergyEvaluationRun(self, planID):
160
165
  '''
161
- 运行方案评估
166
+ 运行能效评价方案评估
162
167
 
163
168
  :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
164
169
 
@@ -74,20 +74,21 @@ class IESLabPlan(object):
74
74
  job = j
75
75
  if job is None:
76
76
  raise Exception("找不到默认的综合能源系统规划典型日生成算法的计算方案")
77
- if job['rid'] != 'job-definition/ies/ies-gmm'or job['rid'] != 'job-definition/cloudpss/ieslab-gmm':
77
+ if job['rid'] != 'job-definition/ies/ies-gmm' and job['rid'] != 'job-definition/cloudpss/ieslab-gmm':
78
78
  raise Exception("不是综合能源系统规划典型日生成算法的计算方案")
79
79
  return self.__run(job=job, name=name)
80
80
 
81
- def iesLabEvaluationRun(self, planId):
81
+ def iesLabEvaluationRun(self, planId, type=None):
82
82
  '''
83
83
  运行方案评估
84
84
 
85
85
  :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
86
+ :param type string类型,表示评估类型,可选值为:能效评价、环保评价
86
87
 
87
88
  :return: 方案评估运行实例
88
89
 
89
90
  '''
90
- return self.evaluationModel.run(planId)
91
+ return self.evaluationModel.run(planId, type)
91
92
 
92
93
  def iesLabEnergyEvaluationRun(self, planId):
93
94
  '''