zmk
2024-08-28 1ae38ab34bcbdff622c7623119ee54bad419f4ed
MainAPI.py
@@ -4,21 +4,21 @@
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__)
@@ -33,11 +33,13 @@
#河流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]}
@@ -49,7 +51,7 @@
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
@@ -60,7 +62,7 @@
@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],
@@ -71,8 +73,31 @@
    
    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'])
@@ -97,11 +122,16 @@
    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])
@@ -114,12 +144,17 @@
            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}
@@ -128,6 +163,7 @@
    data.append(ibounddict)
    data.append(weldict)
    return jsonify(data)
#读取单个井的数据
@app.route('/wel/', methods=['GET'])
@@ -169,6 +205,9 @@
    # 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)
    
@@ -199,119 +238,19 @@
            
        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)
#边界的分组数据
@@ -360,6 +299,10 @@
    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]
@@ -392,7 +335,10 @@
            
        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("数据更新完毕!")
@@ -458,6 +404,9 @@
    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)
@@ -487,7 +436,11 @@
            
        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("数据更新完毕!")
@@ -529,55 +482,14 @@
    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']
@@ -597,7 +509,7 @@
        
        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]
@@ -605,106 +517,14 @@
        
    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
    
#运行模型
@@ -712,22 +532,30 @@
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'])
@@ -739,23 +567,6 @@
    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():
@@ -763,29 +574,65 @@
    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'])
@@ -800,15 +647,19 @@
    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("模型不存在!")
@@ -862,28 +713,31 @@
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数据接口
@@ -892,8 +746,9 @@
    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)
@@ -904,8 +759,8 @@
    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'])
@@ -913,15 +768,57 @@
    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)
#降水均衡
@@ -935,15 +832,104 @@
#地球页面数据
@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)