|
@@ -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')
|