Browse Source

添加逻辑

gushoubang 7 months ago
parent
commit
5ce5eb0927
2 changed files with 61 additions and 15 deletions
  1. 60 14
      app.py
  2. 1 1
      templates/index.html

+ 60 - 14
app.py

@@ -62,7 +62,6 @@ def inputMsg():
     "districtName":"天涯区","landType":"林地","ydmjbegin":10,"ydmjend":100,"yxyz":["name":"幼儿园服务半径","default":"大于","defaultValue":"300"],"useMultiple":false,"useLandType":true,"multipleDistance":0
     并把yxyz的default条件中的大于、小于、大于等于、小于等于、介于分别替换为gt、lt、get、let、between"""
 
-
     try:
         res = ollama.generate(
             model="qwen2:7b",
@@ -87,16 +86,27 @@ def inputMsg():
 
 # 将大模型解析的结果转换为选址需要的数据格式
 def jsonResToDict(json_res):
+    # 1.查询选址范围信息
+    districtName = json_res["districtName"]
+    ewkt = getAiDistrict(districtName)
+    # 2.保存选址范围信息
+    geomId = saveGeom(ewkt)
+    # 3.获取用地类型信息
+    landType = json_res["landType"]
+    landType = getLandType(landType)
+    # 4.获取模板信息
+    factorTemplates = getTemplateByCode(landType)
+
     now = datetime.datetime.now()
     formatted_time = now.strftime("%Y%m%d%H%M%S")
     res = {
         "xzmj": 1500,
         "xmmc": "规划选址项目_"+formatted_time,
         "jsdw": "建设单位",
-        "ydxz_bsm": "07",  # TODO: 从数据库中获取
+        "ydxz_bsm": landType,
         "ydmjbegin": json_res["ydmjbegin"],
         "ydmjend":  json_res["ydmjbegin"],
-        "geomId": "ecc08a3f4f234befb7f49f9809534164",  # TODO: 从数据库中获取
+        "geomId": geomId,
         "yxyz": [],
         # TODO: 循环遍历
         # "yxyz": [
@@ -118,8 +128,9 @@ def jsonResToDict(json_res):
         "useLandType": json_res["multipleDistance"],
         "multipleDistance": json_res["multipleDistance"]
     }
-    # 循环遍历因子
+    # 循环遍历输入因子
     factors = json_res["yxyz"]
+    input_factors = {}
     for factor in factors:
         factorInfo = getFactorByName(factor["name"])
         factorId = factorInfo["id"]
@@ -127,6 +138,22 @@ def jsonResToDict(json_res):
         conditionInfo = factorInfo["condition_info"]
         conditionObj = json.loads(conditionInfo)
 
+        factor_info = {
+            "id": factorId,
+            "name": factor["name"],
+            "bsm": factorBsm,
+            "conditionInfo": {
+                "spatial_type": conditionObj["spatial_type"],
+                "default": factor["default"],
+                "hasValue": conditionObj["hasValue"],
+                "defaultValue": factor["defaultValue"],
+                "unit": conditionObj["unit"],
+                "clip": conditionObj["clip"]
+            }
+        }
+        input_factors[factor_info["id"]] = factor_info
+    # 循环遍历模板
+    for factorTemplate in factorTemplates:
         factor_info = {
             "id": factorId,
             "name": factor["name"],
@@ -144,7 +171,21 @@ def jsonResToDict(json_res):
 
     return res
 
+# 获取因子信息
+
+
+def getFactorByName(name):
+    with conn.cursor(cursor_factory=DictCursor) as cur:
+        sql = "SELECT * FROM base.t_fzss_fzxz_factor WHERE name = %s"
+        complete_sql = cur.mogrify(sql, (name,)).decode('utf-8')
+        logger.info(f"Executing SQL: {complete_sql}")
+        cur.execute(sql, (name,))
+        res = cur.fetchone()
+    return res
+
 # 获取内置模板信息
+
+
 def getTemplateByCode(code):
     with conn.cursor(cursor_factory=DictCursor) as cur:
         sql = "SELECT * FROM base.t_fzss_fzxz_factor_temp WHERE land_type_code = %s"
@@ -155,6 +196,8 @@ def getTemplateByCode(code):
     return res
 
 # 获取选址范围信息
+
+
 def getAiDistrict(name):
     with conn.cursor(cursor_factory=DictCursor) as cur:
         sql = "SELECT public.st_asewkt(geom) as geom FROM base.t_fzss_fzxz_ai_district WHERE name = %s"
@@ -171,21 +214,25 @@ def saveGeom(ewkt):
     from_type = 3
     with conn.cursor() as cur:
         sql = "INSERT INTO base.t_fzss_zhxz_file(id,geom,from_type,create_time,area) VALUES (%s,public.st_geomfromewkt(%s),%s,now(),public.st_area(public.st_geomfromewkt(%s)::public.geography))"
-        complete_sql = cur.mogrify(sql, (new_uuid, ewkt,from_type,ewkt)).decode('utf-8')
+        complete_sql = cur.mogrify(
+            sql, (new_uuid, ewkt, from_type, ewkt)).decode('utf-8')
         logger.info(f"Executing SQL: {complete_sql}")
-        cur.execute(sql, (new_uuid, ewkt,from_type,ewkt))
+        cur.execute(sql, (new_uuid, ewkt, from_type, ewkt))
         conn.commit()
     return new_uuid
 
-# 获取因子信息
-def getFactorByName(name):
+# 获取用地类型信息
+
+
+def getLandType(landName):
     with conn.cursor(cursor_factory=DictCursor) as cur:
-        sql = "SELECT * FROM base.t_fzss_fzxz_factor WHERE name = %s"
-        complete_sql = cur.mogrify(sql, (name,)).decode('utf-8')
+        sql = "SELECT dm,mc,fzbs FROM base.t_fzss_fzxz_dict WHERE mc = %s"
+        complete_sql = cur.mogrify(sql, (landName)).decode('utf-8')
         logger.info(f"Executing SQL: {complete_sql}")
-        cur.execute(sql, (name,))
-        res = cur.fetchone()
-    return res
+        cur.execute(sql, (landName,))
+        res = cur.fetchall()
+    return res["dm"]
+
 
 # getTemplateByCode("08")
 
@@ -195,7 +242,6 @@ def getFactorByName(name):
 # saveGeom(ewkt)
 
 # getFactorByName("幼儿园服务半径")
-
 if __name__ == '__main__':
     # app.run()
     app.run(host='0.0.0.0')

+ 1 - 1
templates/index.html

@@ -59,7 +59,7 @@
         };
 
         function sendToBackend(transcript) {
-            fetch('http://192.168.60.6:5000/msg', {
+            fetch('http://127.0.0.1:5000/msg', {
                 method: 'POST',
                 headers: {
                     'Content-Type': 'application/json',