| | |
| | | from flask import jsonify |
| | | from flask import request |
| | | from flask_cors import CORS |
| | | import sys |
| | | import numpy as np |
| | | import pandas as pd |
| | | import flopy |
| | | import flopy.utils.binaryfile as bf |
| | | import csv |
| | | import time |
| | | from openpyxl import load_workbook |
| | | import os |
| | | import shutil |
| | | import json |
| | | import Base as base |
| | | import CalHead |
| | | import Predict |
| | | import json |
| | | import ModelPeriod |
| | | import AchiveReport as achiveReport |
| | | import BigData |
| | | import OpenExcel |
| | | import DataTransf |
| | | import DataTask |
| | | |
| | | # Flask函数接收一个参数__name__,它会指向程序所在的包 |
| | | app = Flask(__name__) |
| | |
| | | #河流cell的数量 |
| | | riverCellSize = 109 |
| | | |
| | | iboundGroupSize = 5 |
| | | iboundGroup={1:[1,86],2:[87,111],3:[112,142],4:[143,170],5:[171,240]} |
| | | iboundGroupSize = 10 |
| | | iboundGroup={1:[1,86],2:[87,111],3:[112,142],4:[143,170],5:[171,240], |
| | | 6:[241,282],7:[283,354],8:[355,393],9:[394,436],10:[437,453]} |
| | | |
| | | iboundGroup3Size = 5 |
| | | iboundGroup3={1:[241,282],2:[283,354],3:[355,393],4:[394,436],5:[437,453]} |
| | | iboundName =["西侧流入","北部流入","东北部流入","东部流出","南部流出", |
| | | "山区流入","永定河断裂流入","黄庄高丽断裂流入","八宝山断裂流入","昆明湖断裂入流"] |
| | | |
| | | |
| | | riverGroupSize = 4 |
| | | riverGroup={1:[454,479],2:[480,505],3:[506,527],4:[528,562]} |
| | |
| | | def getModel(model_name): |
| | | model_ws="" |
| | | if not model_name: |
| | | model_ws = "202001_202212" |
| | | model_ws = base.not_allowed_model |
| | | else: |
| | | model_ws = base.model_dir + model_name |
| | | |
| | |
| | | @app.route('/baseparam/', methods=['GET']) |
| | | def baseparam(): |
| | | |
| | | model_name = request.args.get('model_name') |
| | | model_name = request.args.get('model_name') |
| | | ml= getModel(model_name) |
| | | nrclp = ml.get_nrow_ncol_nlay_nper() |
| | | dict = {"Row": nrclp[0], "Column": nrclp[1], |
| | |
| | | |
| | | months = ModelPeriod.get_months_in_range_ym(start_time, end_time) |
| | | dict["months"]=months |
| | | print(jsondata) |
| | | if "initHeader" in jsondata: |
| | | dict["initHead"] = jsondata["initHeader"] |
| | | else: |
| | | dict["initHead"] = "" |
| | | return jsonify(dict) |
| | | |
| | | #保存初始水头 |
| | | @app.route('/saveInitHead', methods=['POST']) |
| | | def saveInitHead(): |
| | | jsondata = request.get_json() |
| | | model_name = str(jsondata['model_name']) |
| | | initHeader = str(jsondata['initHead']) |
| | | |
| | | if model_name == base.not_allowed_model or model_name in base.archive_models: |
| | | return jsonify("本模型为验证模型,不允许修改!") |
| | | |
| | | jsondata= CalHead.get_model_json(model_name) |
| | | jsondata["initHeader"] = initHeader |
| | | |
| | | jpath = base.model_dir + model_name +"\\prediction.json" |
| | | with open(jpath, "w",encoding='utf-8') as outfile: |
| | | json.dump(jsondata, outfile,ensure_ascii=False) |
| | | |
| | | return jsonify("保存初始水头成功!") |
| | | |
| | | #读取wel文件 参数为 Period |
| | | @app.route('/welList/', methods=['GET']) |
| | |
| | | |
| | | result_len = len(result) |
| | | |
| | | ibound_segment={} |
| | | |
| | | if layerparam == '1': |
| | | #边界 |
| | | |
| | | ibound_segment={"1":[0,85],"2":[86,110],"3":[111,141],"4":[142,169],"5":[170,239]} |
| | | |
| | | for i in range(0, 240): |
| | | iboundarray.append(result[i]) |
| | | #河流 |
| | | #河流 |
| | | for i in range(453, 562): |
| | | riverarray.append(result[i]) |
| | | |
| | |
| | | welarray.append(result[i]) |
| | | |
| | | elif layerparam == '3': |
| | | |
| | | ibound_segment={"6":[0,41],"7":[42,113],"8":[114,152],"9":[153,195],"10":[196,212]} |
| | | |
| | | for i in range(240, 453): |
| | | iboundarray.append(result[i]) |
| | | |
| | | ibounddict = {"name": "ibound", "data": iboundarray,"segment":ibound_segment} |
| | | |
| | | ibounddict = {"name": "ibound", "data": iboundarray} |
| | | riverdict = {"name": "river", "data": riverarray} |
| | | riversgement={"1":[0,25],"2":[26,51],"3":[52,73],"4":[74,108]} |
| | | riverdict = {"name": "river", "data": riverarray,"segment":riversgement} |
| | | |
| | | |
| | | weldict = {"name": "wel", "data": welarray} |
| | | |
| | |
| | | data.append(ibounddict) |
| | | data.append(weldict) |
| | | return jsonify(data) |
| | | |
| | | |
| | | #读取单个井的数据 |
| | | @app.route('/wel/', methods=['GET']) |
| | |
| | | # model_name = request.args.get('model_name') |
| | | model_name = str(json['model_name']) |
| | | |
| | | if model_name == base.not_allowed_model or model_name in base.archive_models: |
| | | return jsonify("本模型为验证模型,不允许修改!") |
| | | |
| | | |
| | | ml= getModel(model_name) |
| | | |
| | |
| | | |
| | | lrcq[per] = array2d |
| | | |
| | | flopy.modflow.ModflowWel(ml,stress_period_data=lrcq) |
| | | flopy.modflow.ModflowWel(ml,ipakcb= ml.wel.ipakcb,dtype=ml.wel.dtype, |
| | | options=ml.wel.options, |
| | | stress_period_data=lrcq) |
| | | ml.write_input() |
| | | |
| | | return jsonify("数据更新完毕!") |
| | | |
| | | |
| | | #读入电子表格文件生成wel 文件 |
| | | @app.route('/cellFileInput', methods=['POST']) |
| | | def cellFileInput(): |
| | | |
| | | path ='C:\\Users\\ZMK\\Desktop\\待发送\\cell文件.xlsx' |
| | | |
| | | data = get_cell_data(path) |
| | | |
| | | lrcq= get_cell_struct(data["excel1"],data["excel2"],data["excel3"]) |
| | | |
| | | model_name = request.args.get('model_name') |
| | | |
| | | ml= getModel(model_name) |
| | | |
| | | flopy.modflow.ModflowWel(ml,stress_period_data=lrcq) |
| | | ml.write_input() |
| | | |
| | | return jsonify("sucess") |
| | | |
| | | |
| | | def get_cell_struct(excel1,excel2,excel3): |
| | | lrcq={} |
| | | |
| | | #周期数量 |
| | | period = 7 |
| | | start_row_index = 1 |
| | | |
| | | #边界数据 excel |
| | | for col in range (0,period): |
| | | array =[] |
| | | for row in range(start_row_index, len(excel1)): |
| | | |
| | | arr = [excel1[row][2]-1,excel1[row][3]-1,excel1[row][4]-1,excel1[row][6+col]] |
| | | array.append(arr) |
| | | lrcq[col]= array |
| | | |
| | | #河流数据 excel |
| | | for col in range (0,period): |
| | | array =[] |
| | | for row in range(start_row_index, len(excel2)): |
| | | |
| | | arr = [excel2[row][2]-1,excel2[row][3]-1,excel2[row][4]-1,excel2[row][6+col]] |
| | | array.append(arr) |
| | | |
| | | lrcq[col].extend(array) |
| | | |
| | | #抽水数据 excel |
| | | for col in range (0,period): |
| | | |
| | | array =[] |
| | | for row in range(start_row_index, len(excel3)): |
| | | |
| | | arr = [excel3[row][1]-1,excel3[row][2]-1,excel3[row][3]-1,excel3[row][8+col]] |
| | | array.append(arr) |
| | | |
| | | lrcq[col].extend(array) |
| | | |
| | | return lrcq |
| | | |
| | | |
| | | |
| | | #获取cell文件 |
| | | #file_path 文件的路径 |
| | | def get_cell_data(file_path): |
| | | |
| | | workbook = load_workbook(file_path) |
| | | sheetnames = workbook.get_sheet_names() |
| | | #read first sheet |
| | | sheet1 = workbook[sheetnames[0]] |
| | | sheet2 = workbook[sheetnames[1]] |
| | | sheet3 = workbook[sheetnames[2]] |
| | | |
| | | excel1 =[] |
| | | excel2=[] |
| | | excel3=[] |
| | | # 遍历读取整个工作表 |
| | | for row in sheet1.iter_rows(values_only=True): |
| | | array=[] |
| | | for cell in row: |
| | | array.append(cell) |
| | | excel1.append(array) |
| | | |
| | | for row in sheet2.iter_rows(values_only=True): |
| | | array=[] |
| | | for cell in row: |
| | | array.append(cell) |
| | | excel2.append(array) |
| | | |
| | | for row in sheet3.iter_rows(values_only=True): |
| | | array=[] |
| | | for cell in row: |
| | | array.append(cell) |
| | | excel3.append(array) |
| | | |
| | | # 关闭Excel文件 |
| | | workbook.close() |
| | | data={"excel1":excel1,"excel2":excel2,"excel3":excel3} |
| | | |
| | | return data |
| | | |
| | | |
| | | |
| | | #读取wel文件 参数为 Period |
| | | @app.route('/iboundList/', methods=['GET']) |
| | | def iboundList(): |
| | | |
| | | return jsonify(iboundGroupSize) |
| | | return jsonify(iboundName) |
| | | |
| | | |
| | | #边界的分组数据 |
| | |
| | | data = json['data'] |
| | | |
| | | model_name = json['model_name'] |
| | | |
| | | if model_name == base.not_allowed_model or model_name in base.archive_models: |
| | | return jsonify("本模型为验证模型,不允许修改!") |
| | | |
| | | ml= getModel(model_name) |
| | | |
| | | index = iboundGroup[no] |
| | |
| | | |
| | | lrcq[per] = array2d |
| | | |
| | | flopy.modflow.ModflowWel(ml,stress_period_data=lrcq) |
| | | flopy.modflow.ModflowWel(ml,ipakcb= ml.wel.ipakcb, |
| | | dtype=ml.wel.dtype, |
| | | options=ml.wel.options, |
| | | stress_period_data=lrcq) |
| | | ml.write_input() |
| | | return jsonify("数据更新完毕!") |
| | | |
| | |
| | | end_index = index[1] |
| | | model_name = json['model_name'] |
| | | |
| | | if model_name == base.not_allowed_model or model_name in base.archive_models: |
| | | return jsonify("本模型为验证模型,不允许修改!") |
| | | |
| | | ml= getModel(model_name) |
| | | |
| | | periods =CalHead.get_model_period(model_name) |
| | |
| | | |
| | | lrcq[per] = array2d |
| | | |
| | | flopy.modflow.ModflowWel(ml,stress_period_data=lrcq) |
| | | |
| | | flopy.modflow.ModflowWel(ml,ipakcb= ml.wel.ipakcb, |
| | | dtype=ml.wel.dtype, |
| | | options=ml.wel.options, |
| | | stress_period_data=lrcq) |
| | | ml.write_input() |
| | | return jsonify("数据更新完毕!") |
| | | |
| | |
| | | return jsonify(result) |
| | | |
| | | |
| | | #降水数据修改 |
| | | # @app.route('/precipitationInput', methods=['POST']) |
| | | # def precipitationInput(): |
| | | |
| | | # json = request.get_json() |
| | | # model_name= str(json['model_name']) |
| | | # period = int(json['period']) |
| | | # #有序的应力周期列表 json |
| | | # data = json['data'] |
| | | # dict = {} |
| | | # for i in range(len(data)): |
| | | # q1 = data[i]['Q1'] |
| | | # q2 = data[i]['Q2'] |
| | | # dict[q1] = q2 |
| | | |
| | | # ml= getModel(model_name) |
| | | |
| | | # item = ml.rch.rech.__getitem__(kper=period) |
| | | # array2d = item.get_value() |
| | | |
| | | # count = 0 |
| | | |
| | | # array2d_len = len(array2d) |
| | | |
| | | # for i in range(array2d_len): |
| | | |
| | | # array_len = len(array2d[i]) |
| | | |
| | | # for j in range(array_len): |
| | | |
| | | # va = str(array2d[i][j]) |
| | | # if va in dict: |
| | | # count += 1 |
| | | # array2d[i][j] = float(dict[va]) |
| | | |
| | | # ml.rch.rech.__setitem__(key=period, value=array2d) |
| | | |
| | | # rch = flopy.modflow.ModflowRch(ml, rech=ml.rch.rech) |
| | | # rch.write_file(check=False) |
| | | # #ml.write_input() |
| | | |
| | | # return jsonify("降水参数修改完毕!") |
| | | |
| | | |
| | | @app.route('/precipitationInput', methods=['POST']) |
| | | def precipitationInput(): |
| | | |
| | | json = request.get_json() |
| | | model_name= str(json['model_name']) |
| | | if model_name == base.not_allowed_model or model_name in base.archive_models: |
| | | return jsonify("本模型为验证模型,不允许修改!") |
| | | period = int(json['period']) |
| | | #有序的应力周期列表 json |
| | | data = json['data'] |
| | |
| | | |
| | | tuples= areas[key] |
| | | zblen= len(tuples) |
| | | values = float(dict[key]) |
| | | values = round(float(dict[key]),8) |
| | | for i in range(zblen): |
| | | x = tuples[i][0] |
| | | y = tuples[i][1] |
| | |
| | | |
| | | ml.rch.rech.__setitem__(key=period, value=array2d) |
| | | |
| | | rch = flopy.modflow.ModflowRch(ml, rech = ml.rch.rech) |
| | | rch = flopy.modflow.ModflowRch(ml,nrchop=ml.rch.nrchop, |
| | | ipakcb=ml.rch.ipakcb, |
| | | rech=ml.rch.rech, |
| | | irch =ml.rch.irch) |
| | | rch.write_file(check=False) |
| | | # ml.write_input() |
| | | |
| | | return jsonify("降水参数修改完毕!") |
| | | |
| | | #导入csv文件 |
| | | @app.route('/precipitationInputFile', methods=['POST']) |
| | | def precipitationInputFile(): |
| | | |
| | | model_name = request.args.get('model_name') |
| | | ml= getModel(model_name) |
| | | save_path = 'C:/Users/ZMK/Desktop/test1/' + "1111.xlsx" |
| | | file = request.files.get('file') |
| | | |
| | | if file: |
| | | file.save(save_path) |
| | | |
| | | #获取读取的excel 表格数据 |
| | | stations = get_station_struct(save_path) |
| | | |
| | | #循环周期 |
| | | #perd周期变量 |
| | | #array2d 每个周期的二维数组 |
| | | for perd in range(0,36): |
| | | period = perd |
| | | item = ml.rch.rech.__getitem__(kper=period) |
| | | array2d = item.get_value() |
| | | |
| | | array2d_len = len(array2d) |
| | | count = 0 |
| | | #循环站点将一个period的所有stations进行字典存储 |
| | | dict = {} |
| | | for k in range(0,len(stations)): |
| | | row = stations[k]["row"] |
| | | column = stations[k]["column"] |
| | | |
| | | data_old = array2d[row][column] |
| | | data_new = stations[k]["data"][perd] |
| | | dict[data_old]= data_new |
| | | |
| | | |
| | | #循环设置每个period 的值 |
| | | for i in range(array2d_len): |
| | | |
| | | array_len = len(array2d[i]) |
| | | |
| | | for j in range(array_len): |
| | | |
| | | va = str(array2d[i][j]) |
| | | if va in dict: |
| | | array2d[i][j] = float(dict[va]) |
| | | |
| | | #将array2d重新set 对应的 item 周期内 |
| | | ml.rch.rech.__setitem__(key=period, value=array2d) |
| | | |
| | | rch = flopy.modflow.ModflowRch(ml, rech=ml.rch.rech) |
| | | rch.write_file(check=False) |
| | | # ml.write_input() |
| | | return '文件上传成功' |
| | | else: |
| | | return '上传失败,未选择文件' |
| | | |
| | | |
| | | #获取站点的数据,构造数据结构 |
| | | #file_path 文件的路径 |
| | | def get_station_struct(file_path): |
| | | |
| | | workbook = load_workbook(file_path) |
| | | sheetnames = workbook.get_sheet_names() |
| | | #read first sheet |
| | | sheet = workbook[sheetnames[0]] |
| | | |
| | | array2d_excel=[] |
| | | # 遍历读取整个工作表 |
| | | for row in sheet.iter_rows(values_only=True): |
| | | array=[] |
| | | for cell in row: |
| | | array.append(cell) |
| | | array2d_excel.append(array) |
| | | # 关闭Excel文件 |
| | | workbook.close() |
| | | |
| | | #数据的开始下标 |
| | | data_start_index=6 |
| | | #信息的开始行号 |
| | | start_row_index = 1 |
| | | #存储站点信息 |
| | | stations = [] |
| | | for i in range (start_row_index,len(array2d_excel)): |
| | | st={"name":array2d_excel[i][1],"row":array2d_excel[i][4],"column":array2d_excel[i][5]} |
| | | data=[] |
| | | for j in range(data_start_index,len(array2d_excel[i])): |
| | | cell_data = array2d_excel[i][j] |
| | | cell_data= cell_data/100/30*0.15 |
| | | data.append(round(cell_data, 6)) |
| | | st["data"]= data |
| | | stations.append(st) |
| | | |
| | | return stations |
| | | |
| | | |
| | | #运行模型 |
| | |
| | | def runModel(): |
| | | model_name = request.args.get('model_name') |
| | | |
| | | msg= Predict.run_model_predict(model_name) |
| | | #导出csv文件 |
| | | csvpath = CalHead.exportCsV(model_name) |
| | | if model_name == base.not_allowed_model or model_name in base.archive_models: |
| | | return jsonify("本模型为验证模型,不允许修改!") |
| | | |
| | | #更新模型三维网格配置 |
| | | dicts= Predict.run_model_predict(model_name) |
| | | if dicts["code"] == 400: |
| | | return dicts["msg"] |
| | | #导出csv文件 |
| | | CalHead.exportCsV(model_name) |
| | | |
| | | # #更新模型三维网格配置 |
| | | base.updateModelConfig(model_name) |
| | | |
| | | #创建模型的三维网格 |
| | | # #创建模型的三维网格 |
| | | filedir = base.model3d_path + model_name |
| | | |
| | | print(filedir) |
| | | if not os.path.exists(filedir): |
| | | os.makedirs(filedir, exist_ok=True) |
| | | base.callModelexe() |
| | | |
| | | return jsonify(msg) |
| | | base.callModelexe() |
| | | #计算水资源量和水均衡 |
| | | CalHead.run_zonebudget_bal(model_name) |
| | | CalHead.run_zonebudget_res(model_name) |
| | | |
| | | return jsonify(dicts["msg"]) |
| | | |
| | | #生成模型csv 文件 |
| | | @app.route('/runModelCsv/', methods=['GET']) |
| | |
| | | return jsonify(result) |
| | | |
| | | |
| | | |
| | | #初始水位信息 |
| | | @app.route('/initWater/', methods=['GET']) |
| | | def initWater(): |
| | | |
| | | period = request.args.get('period') |
| | | |
| | | per = int(period) |
| | | |
| | | model_name = request.args.get('model_name') |
| | | |
| | | ml= getModel(model_name) |
| | | item = ml.rch.rech.__getitem__(kper=per) |
| | | value = item.get_value() |
| | | t = np.array(value).tolist() |
| | | return jsonify(t) |
| | | |
| | | #创建新模型 |
| | | @app.route('/saveModel/', methods=['GET']) |
| | | def saveModel(): |
| | |
| | | modelname = request.args.get('name') |
| | | startTime = request.args.get('startTime') |
| | | endTime = request.args.get('endTime') |
| | | remark = request.args.get('remark') |
| | | file_list = os.listdir(base.model_dir) |
| | | for name in file_list: |
| | | if name == modelname: |
| | | return jsonify("模型名称已经存在,不允许重复创建!") |
| | | |
| | | pers = ModelPeriod.get_months_in_range_count(startTime,endTime) |
| | | if pers > 60 : |
| | | return jsonify("模型创建失败,最多只允许60个周期的连续预测!") |
| | | |
| | | dir = base.model_dir + modelname |
| | | shutil.copytree(base.predictModel,dir) |
| | | |
| | | if pers==12: |
| | | shutil.copytree(base.predictModel,dir) |
| | | else: |
| | | #如果不是一年的预测, 可能为 其他的多周期的预测 大于 12 个周期或者 小于12个周期 |
| | | #首先把60个周期的当做模型clone一份, 然后修改 dis wel rch 文件 |
| | | #wel 文件和 rch 文件不需要修改 |
| | | shutil.copytree(base.predictModel60,dir) |
| | | Predict.updateDisFile(modelname,pers) |
| | | |
| | | |
| | | jsondata={"model_name":modelname,"start_time":startTime,"end_time":endTime} |
| | | predictionJson = base.model_dir + modelname +"\\prediction.json" |
| | | with open(predictionJson, "w",encoding='utf-8') as outfile: |
| | | json.dump(jsondata, outfile,ensure_ascii=False) |
| | | |
| | | |
| | | CalHead.addModelJson(modelname, startTime, endTime, remark) |
| | | return jsonify("创建新模型完毕!") |
| | | |
| | | |
| | | #创建新模型 |
| | | @app.route('/ModelList/', methods=['GET']) |
| | | def ModelList(): |
| | | |
| | | file_list = os.listdir(base.model_dir) |
| | | return jsonify(file_list) |
| | | |
| | | #模型列表2 |
| | | @app.route('/ModelList2/', methods=['GET']) |
| | | def ModelList2(): |
| | | model_path = base.prefix +"\\model_list.json" |
| | | model_lsit="" |
| | | with open(model_path,encoding='utf-8') as f: |
| | | model_lsit = json.load(f) |
| | | return jsonify(model_lsit) |
| | | |
| | | #删除模型 |
| | | @app.route('/deleteModel/', methods=['GET']) |
| | | def deleteModel(): |
| | | model_name = request.args.get('model_name') |
| | | if not model_name: |
| | | return jsonify({"code":400,"msg":"不允许删除空目录!"}) |
| | | if model_name == base.not_allowed_model: |
| | | return jsonify({"code":400,"msg":"验证模型不允许删除!"}) |
| | | |
| | | paths = base.model_dir + model_name |
| | | shutil.rmtree(paths) |
| | | CalHead.removeModelJson(model_name) |
| | | return jsonify({"code":200,"msg":"模型删除完毕!"}) |
| | | |
| | | #预测场景参数 |
| | | @app.route('/prediction', methods=['POST']) |
| | |
| | | predictionJson = base.model_dir + model_name +"\\prediction.json" |
| | | with open(predictionJson, "w",encoding='utf-8') as outfile: |
| | | json.dump(jsondata, outfile,ensure_ascii=False) |
| | | |
| | | return jsonify("保存预测场景参数完毕!") |
| | | |
| | | #运行模型 |
| | | dicts = Predict.run_model(model_name) |
| | | return jsonify(dicts["msg"]) |
| | | |
| | | |
| | | |
| | | #预测场景参数 |
| | | @app.route('/predictionparam', methods=['GET']) |
| | | def predictionparam(): |
| | | |
| | | model_name = request.args.get('model_name') |
| | | model_name = request.args.get('model_name') |
| | | print(model_name) |
| | | file_list = os.listdir(base.model_dir) |
| | | if model_name not in file_list: |
| | | return jsonify("模型不存在!") |
| | |
| | | def pump_importdata(): |
| | | |
| | | model_name = request.form.get('model_name') |
| | | |
| | | # ml= getModel(model_name) |
| | | types = request.form.get('type') |
| | | file = request.files.get('file') |
| | | print(types) |
| | | |
| | | save_path = base.model_dir + model_name +"\\extra_cell.xlsx" |
| | | save_path = base.model_dir + model_name +"\\"+types+".xlsx" |
| | | print(save_path) |
| | | |
| | | if file: |
| | | file.save(save_path) |
| | | |
| | | resultDict={"code":200,"msg":"保存数据完毕!"} |
| | | data= DataTransf.base_excel(model_name,types) |
| | | |
| | | resultDict={"code":200,"msg":"保存数据完毕!","data":data} |
| | | return jsonify(resultDict) |
| | | |
| | | #观测井列表 |
| | | @app.route('/obsWellList', methods=['GET']) |
| | | def obsWellList(): |
| | | obswell= base.obs_well |
| | | dict =[] |
| | | for name , row ,column in obswell: |
| | | obj ={"name":name,"row":row,"column":column,"Layer":1} |
| | | dict.append(obj) |
| | | dicts =[] |
| | | for wellId, name , row ,column in obswell: |
| | | obj ={"wellId":wellId,"name":name,"row":row,"column":column,"Layer":1} |
| | | dicts.append(obj) |
| | | |
| | | return jsonify(dict) |
| | | return jsonify(dicts) |
| | | |
| | | |
| | | #观测井chart数据接口 |
| | |
| | | model_name = request.args.get('model_name') |
| | | row = request.args.get('row') |
| | | column = request.args.get('column') |
| | | wellId = request.args.get('wellId') |
| | | |
| | | result = CalHead.obsChartdata(model_name, row, column) |
| | | result = CalHead.obsChartdata(wellId,model_name, row, column) |
| | | |
| | | return jsonify(result) |
| | | |
| | |
| | | base_year = request.args.get('base_year') |
| | | start_time = request.args.get('start_time') |
| | | end_time = request.args.get('end_time') |
| | | |
| | | return jsonify(Predict.predict_river_chart(base_year, start_time, end_time)) |
| | | value = float(request.args.get('value')) |
| | | return jsonify(Predict.predict_river_chart(base_year, start_time, end_time,value)) |
| | | |
| | | #预测页面 降水图表 |
| | | @app.route('/predictWaterChart', methods=['GET']) |
| | |
| | | base_year = request.args.get('base_year') |
| | | start_time = request.args.get('start_time') |
| | | end_time = request.args.get('end_time') |
| | | return jsonify(Predict.predict_water_chart(base_year, start_time, end_time)) |
| | | value = float(request.args.get('value')) |
| | | return jsonify(Predict.predict_water_chart(base_year, start_time, end_time,value)) |
| | | |
| | | @app.route('/heatmap', methods=['GET']) |
| | | def heatmap(): |
| | | #开采量的折线图 |
| | | @app.route('/predictWellChart', methods=['POST']) |
| | | def predictWellChart(): |
| | | |
| | | json = request.get_json() |
| | | base_year = str(json['base_year']) |
| | | start_time = json['start_time'] |
| | | end_time = json['end_time'] |
| | | data = json['data'] |
| | | |
| | | return jsonify(Predict.predict_well_chart(base_year, start_time, end_time,data)) |
| | | |
| | | #流场图 |
| | | @app.route('/flowField', methods=['GET']) |
| | | def flowField(): |
| | | model_name = request.args.get('model_name') |
| | | period = request.args.get('period') |
| | | data = CalHead.heatmapdata(model_name,period) |
| | | maximum_value = np.max(data) |
| | | return jsonify(np.array(data).tolist()) |
| | | flowStartTime = int(request.args.get('flowStartTime')) |
| | | flowEndTime=int(request.args.get('flowEndTime')) |
| | | flowType= request.args.get('flowType') |
| | | # layer = int(request.args.get('layer') ) |
| | | |
| | | pic = str(int(time.time())) +".png" |
| | | outpath = base.flow_file + pic |
| | | dicts={} |
| | | if flowType=="水位": |
| | | dicts = achiveReport.flow_field(model_name, flowStartTime, 0,"流场信息", "online", outpath) |
| | | if flowType=="变幅": |
| | | dicts = achiveReport.getFlowFieldBF(model_name,flowStartTime,flowEndTime,outpath) |
| | | |
| | | if flowType=="埋深": |
| | | dicts = achiveReport.getFlowFieldDepth(model_name,flowStartTime, 0,"流场信息", "online", outpath) |
| | | |
| | | dicts["path"] = "/xishan/xinshanFlow/"+pic |
| | | return jsonify(dicts) |
| | | |
| | | |
| | | #初始水位流场信息 |
| | | @app.route('/initWaterFlow/', methods=['GET']) |
| | | def initWater(): |
| | | |
| | | model_name = request.args.get('model_name') |
| | | layer = int(request.args.get('layer') ) |
| | | pic = str(int(time.time())) +".png" |
| | | outpath = base.flow_file + pic |
| | | result= achiveReport.init_flow_field(model_name, layer,"初始流场信息", "online", outpath) |
| | | if result == "#": |
| | | return jsonify("") |
| | | return jsonify("/xishan/xinshanFlow/"+pic) |
| | | |
| | | |
| | | #降水均衡 |
| | |
| | | #地球页面数据 |
| | | @app.route('/earthWaterChart', methods=['GET']) |
| | | def earthWaterChart(): |
| | | |
| | | model_name = request.args.get('model_name') |
| | | indexId = int(request.args.get('index_id')) |
| | | data = CalHead.earthWaterChart("202001_202212",indexId) |
| | | data = CalHead.earthWaterChart(model_name,indexId) |
| | | return jsonify(data) |
| | | |
| | | #渗透系数 |
| | | @app.route('/mdLpf', methods=['GET']) |
| | | def mdLpf(): |
| | | lf = base.md_lpf |
| | | return jsonify(np.array(lf).tolist()) |
| | | |
| | | #水资源量 |
| | | @app.route('/water_res', methods=['GET']) |
| | | def water_res(): |
| | | model_name = request.args.get('model_name') |
| | | #水均衡 |
| | | path1=base.muiltyModel + model_name +"\\water_bal.txt" |
| | | bal = CalHead.water_balance(model_name, path1) |
| | | path2=base.muiltyModel + model_name +"\\water_res.txt" |
| | | res = CalHead.water_res(model_name,path2) |
| | | |
| | | dicts = BigData.mergeWaterData(bal,res) |
| | | |
| | | initFlowPNG = achiveReport.getWaterResFiled(model_name,0) |
| | | dicts["initFlowPNG"]= "/xishan/xinshanFlow/" + initFlowPNG |
| | | |
| | | FlowPNG2 = achiveReport.getWaterResFiled(model_name,11) |
| | | dicts["lastFlowPNG"]= "/xishan/xinshanFlow/" + FlowPNG2 |
| | | dicts["initMonth"] ="2023-01" |
| | | dicts["lastMonth"] ="2023-12" |
| | | |
| | | #水资源量 |
| | | return dicts |
| | | |
| | | |
| | | #多模型地下水位 |
| | | @app.route('/water_depth', methods=['GET']) |
| | | def water_depth(): |
| | | model_name = request.args.get('model_name') |
| | | |
| | | result = CalHead.water_depth(model_name) |
| | | #水资源量 |
| | | return result |
| | | |
| | | |
| | | #小场景 单个模型水位 和变幅 |
| | | @app.route('/xs_depth', methods=['GET']) |
| | | def xs_depth(): |
| | | model_name = request.args.get('model_name') |
| | | |
| | | res = CalHead.xs_depth(model_name) |
| | | jsondata= CalHead.get_model_json(model_name) |
| | | start_time = jsondata["start_time"] |
| | | end_time = jsondata["end_time"] |
| | | months = ModelPeriod.get_months_in_range_ym(start_time, end_time) |
| | | res["months"] = months |
| | | #水资源量 |
| | | return res |
| | | |
| | | #保存监测站降雨量 |
| | | @app.route('/sensor_jyl_list', methods=['GET']) |
| | | def sensor_jyl_list(): |
| | | model_name = request.args.get('model_name') |
| | | data = OpenExcel.read_excel(model_name) |
| | | return jsonify(data) |
| | | |
| | | #保存监测站降雨量 |
| | | @app.route('/sensor_jyl_save', methods=['POST']) |
| | | def sensor_jyl_save(): |
| | | json = request.get_json() |
| | | model_name = str(json['model_name']) |
| | | data = json['data'] |
| | | OpenExcel.write_excel(model_name,data) |
| | | return jsonify("保存完毕") |
| | | |
| | | #月报内容 |
| | | @app.route('/xs_month_report', methods=['GET']) |
| | | def xs_month_report(): |
| | | model_name = request.args.get('model_name') |
| | | per = int(request.args.get('period')) |
| | | res = achiveReport.archive_report_content(model_name,per) |
| | | return res |
| | | |
| | | |
| | | #实时数据 |
| | | @app.route('/xs_real_data', methods=['GET']) |
| | | def xs_real_data(): |
| | | num = request.args.get('num') |
| | | start_time = request.args.get('start_time') |
| | | end_time = request.args.get('end_time') |
| | | types = request.args.get('types') |
| | | res = DataTask.get_data(types,num,start_time,end_time) |
| | | return jsonify(res) |
| | | |
| | | |
| | | if __name__ == '__main__': |
| | | #app.run() # 可以指定运行的主机IP地址,端口,是否开启调试模式 |
| | | app.run(host="192.168.0.122", port=5000) |
| | | |
| | | |
| | | |
| | | app.run(host="localhost", port=5000) |
| | | |
| | | |
| | | |