gushoubang 9 місяців тому
батько
коміт
a108a8825b
2 змінених файлів з 79 додано та 14 видалено
  1. 78 13
      app.py
  2. 1 1
      templates/index.html

+ 78 - 13
app.py

@@ -5,6 +5,7 @@ import logging
 import ollama
 import json
 import datetime
+import uuid
 
 app = Flask(__name__)
 
@@ -87,19 +88,8 @@ def inputMsg():
     # 返回响应
     return jsonify(json_res)
 
-# 获取因子信息
-def getFactorByName(name):
-    with conn.cursor(cursor_factory=DictCursor) as cur:
-        sql = "SELECT id,bsm 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.fetchall()
-        res = cur.fetchone()
-        id = str(res['id'])
-    return res
-
 
+# 将大模型解析的结果转换为选址需要的数据格式
 def jsonResToDict(json_res):
     now = datetime.datetime.now()
     formatted_time = now.strftime("%Y%m%d%H%M%S")
@@ -107,10 +97,11 @@ def jsonResToDict(json_res):
         "xzmj": 1500,
         "xmmc": "规划选址项目_"+formatted_time,
         "jsdw": "建设单位",
-        "ydxz_bsm": "07", #TODO: 从数据库中获取
+        "ydxz_bsm": "07",  # TODO: 从数据库中获取
         "ydmjbegin": json_res["ydmjbegin"],
         "ydmjend":  json_res["ydmjbegin"],
         "geomId": "ecc08a3f4f234befb7f49f9809534164",  # TODO: 从数据库中获取
+        "yxyz": [],
         # TODO: 循环遍历
         # "yxyz": [
         #     {
@@ -131,9 +122,83 @@ def jsonResToDict(json_res):
         "useLandType": json_res["multipleDistance"],
         "multipleDistance": json_res["multipleDistance"]
     }
+    # 循环遍历因子
+    factors = json_res["yxyz"]
+    for factor in factors:
+        factorInfo = getFactorByName(factor["name"])
+        factorId = factorInfo["id"]
+        factorBsm = factorInfo["bsm"]
+        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"]
+            }
+        }
+        res["yxyz"].append(factor_info)
+
     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"
+        complete_sql = cur.mogrify(sql, (code,)).decode('utf-8')
+        logger.info(f"Executing SQL: {complete_sql}")
+        cur.execute(sql, (code,))
+        res = cur.fetchall()
+    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"
+        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["geom"]
+
+
+# 保存选址范围信息
+def saveGeom(ewkt):
+    new_uuid = str(uuid.uuid4())  # 生成一个新的 UUID
+    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')
+        logger.info(f"Executing SQL: {complete_sql}")
+        cur.execute(sql, (new_uuid, ewkt,from_type,ewkt))
+        conn.commit()
+    return new_uuid
+
+# 获取因子信息
+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
+
+# getTemplateByCode("08")
+
+# getAiDistrict("抱坡区")
+
+# ewkt="SRID=4326;POLYGON ((109.568515723151 18.2729002407864, 109.564270326708 18.2607742953866, 109.580087492139 18.2571512198688, 109.588461804591 18.2570597503377, 109.58884305979 18.2645363088176, 109.582107142538 18.2732736518031, 109.568515723151 18.2729002407864))"
+# saveGeom(ewkt)
 
 # getFactorByName("幼儿园服务半径")
+
 if __name__ == '__main__':
     app.run()

+ 1 - 1
templates/index.html

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