|
@@ -12,7 +12,9 @@ import psycopg2
|
|
|
import uuid
|
|
|
from ..FTP.FtpUitl import FtpOper
|
|
|
from ..FTP.FtpConfig import *
|
|
|
-from processing.tools.FileUtils import getInputFileName
|
|
|
+from ..FileUtils import getInputFileName
|
|
|
+from ..StringUtils import (getNow, base64str, enbase64str)
|
|
|
+from datetime import datetime
|
|
|
|
|
|
|
|
|
class PostgreSQL:
|
|
@@ -30,6 +32,10 @@ class PostgreSQL:
|
|
|
BackTable = "_back"
|
|
|
# 序列名称后缀
|
|
|
Sequence = "_id_seq"
|
|
|
+ # 版本控制表
|
|
|
+ Vector_Version = "t_vector_version"
|
|
|
+ # 版本控制详情表
|
|
|
+ Vector_Version_Details = "t_vector_version_details"
|
|
|
|
|
|
def __init__(
|
|
|
self,
|
|
@@ -103,15 +109,69 @@ class PostgreSQL:
|
|
|
else:
|
|
|
table_alias = ''
|
|
|
self.deleteVectorStorage(name=record_id)
|
|
|
+ self.deleteVectorVersion(tablename=record_id)
|
|
|
self.insertVectorStorage(id=id, name=record_id, year=parameters.get("VECTOR_YEAR"),
|
|
|
xmlx=zyml, sjly=parameters.get("VECTOR_SJLY"),
|
|
|
xzqh=ssxzqh, xzqh_field=parameters.get("XZQH_FIELD"),
|
|
|
ywlx=ywlx, sjlx=parameters.get("SOURCE_TYPE"), sjywz=ogrLayer,
|
|
|
glbm=glbm, table_alias=table_alias)
|
|
|
+ self.insertVectorVersion(tablename=record_id)
|
|
|
# 附件上传
|
|
|
if fileliststr is not None and fileliststr != "":
|
|
|
self.uploadAttachment(layername=record_id, layerid=id, fileliststr=fileliststr)
|
|
|
|
|
|
+ # 删除版本控制表
|
|
|
+ def deleteVectorVersion(self, tablename):
|
|
|
+ sql = "delete from {} where tablename = '{}'".format(self.Vector_Version, tablename)
|
|
|
+ self.cur.execute(sql)
|
|
|
+ self.conn.commit()
|
|
|
+
|
|
|
+ # 删除版本数据
|
|
|
+ def deleteVectorRecords(self, tablename, rksj_sw):
|
|
|
+ sql = "delete from {} t where t.rksj_sw > '{}'".format(tablename, rksj_sw)
|
|
|
+ self.cur.execute(sql)
|
|
|
+ self.conn.commit()
|
|
|
+ sql = "update {} set version = '{}' where tablename = '{}'".format(self.Vector_Version, rksj_sw,
|
|
|
+ tablename)
|
|
|
+ self.cur.execute(sql)
|
|
|
+ self.conn.commit()
|
|
|
+
|
|
|
+ # 插入版本数据
|
|
|
+ def insertVectorRecords(self, tablename, curversion ,targetversion):
|
|
|
+ sql = "select insertsql from {} t where t.tablename = '{}' and t.version > '{}' and t.version <= '{}'".format(self.Vector_Version_Details, tablename, curversion, targetversion)
|
|
|
+ self.cur.execute(sql)
|
|
|
+ rows = self.cur.fetchall()
|
|
|
+ for row in rows:
|
|
|
+ sql = enbase64str(row[0])
|
|
|
+ self.cur.execute(sql)
|
|
|
+ sql = "update {} set version = '{}' where tablename = '{}'".format(self.Vector_Version, targetversion,
|
|
|
+ tablename)
|
|
|
+ self.cur.execute(sql)
|
|
|
+ self.conn.commit()
|
|
|
+
|
|
|
+ # 创建版本控制表
|
|
|
+ def insertVectorVersion(self, tablename):
|
|
|
+ formatted_time = getNow()
|
|
|
+ # 输出结果
|
|
|
+ print("当前时间:{}".format(formatted_time))
|
|
|
+ sql = "insert into {} (tablename, version, type) values ('{}', '{}', '{}')".format(self.Vector_Version,
|
|
|
+ tablename, formatted_time,
|
|
|
+ "base")
|
|
|
+ self.cur.execute(sql)
|
|
|
+ self.conn.commit()
|
|
|
+ sql = "alter table {} add column rksj_sw timestamp".format(tablename)
|
|
|
+ self.cur.execute(sql)
|
|
|
+ self.conn.commit()
|
|
|
+ sql = "update {} SET rksj_sw = to_timestamp('{}', 'YYYY-MM-DD HH24:MI:SS')".format(tablename, formatted_time)
|
|
|
+ self.cur.execute(sql)
|
|
|
+ self.conn.commit()
|
|
|
+ details = "insert into {} (tablename, version, insertsql) values ('{}', '{}', '{}')".format(
|
|
|
+ self.Vector_Version_Details, tablename, formatted_time,
|
|
|
+ "")
|
|
|
+ print(details)
|
|
|
+ self.cur.execute(details)
|
|
|
+ self.conn.commit()
|
|
|
+
|
|
|
# 获取文件名称
|
|
|
def getInputFileName(self, file):
|
|
|
filename = file.split("/")[len(file.split("/")) - 1]
|
|
@@ -235,10 +295,10 @@ class PostgreSQL:
|
|
|
return fields
|
|
|
|
|
|
# 保存矢量要素
|
|
|
- def insertVectorFeature(self, tablename, fields, values, wkt, wktsrid, geomtype):
|
|
|
+ def insertVectorFeature(self, tablename, fields, values, wkt, wktsrid, geomtype, rksj):
|
|
|
arr = tablename.split(".")
|
|
|
insertvalues = ""
|
|
|
- print(values)
|
|
|
+ # print(values)
|
|
|
for value in values:
|
|
|
if value == None:
|
|
|
insertvalues += "null,"
|
|
@@ -248,8 +308,8 @@ class PostgreSQL:
|
|
|
insertvalues += f'\'{value}\','
|
|
|
else:
|
|
|
insertvalues += f'{value},'
|
|
|
- print(insertvalues)
|
|
|
- print(insertvalues[:-1])
|
|
|
+ # print(insertvalues)
|
|
|
+ # print(insertvalues[:-1])
|
|
|
# 判断几何类型是否一致
|
|
|
if wkt.startswith(geomtype) == False:
|
|
|
if geomtype.startswith("MULTI"): # 转换为Multi
|
|
@@ -259,9 +319,44 @@ class PostgreSQL:
|
|
|
wkt = wkt.replace("(((", "((").replace(")))", "))").replace("MULTI", "")
|
|
|
sql = f'insert into {arr[0]}."{arr[1]}" ({",".join(fields)} , geom) values ({insertvalues[:-1]} , public.st_geomfromtext( \'{wkt}\', {wktsrid}))'
|
|
|
sql = sql.replace("None", "null")
|
|
|
- print(sql)
|
|
|
+ # print(sql)
|
|
|
self.cur.execute(sql)
|
|
|
self.conn.commit()
|
|
|
+ # 插入到更新详情表
|
|
|
+ details = "insert into {} (tablename, version, insertsql) values ('{}', '{}', '{}')".format(
|
|
|
+ self.Vector_Version_Details, tablename, rksj,
|
|
|
+ base64str(sql))
|
|
|
+ # print(details)
|
|
|
+ self.cur.execute(details)
|
|
|
+ self.conn.commit()
|
|
|
+
|
|
|
+ def updateVectorVersion(self, tablename, version):
|
|
|
+ details = "update {} set rksj_sw = to_timestamp('{}', 'YYYY-MM-DD HH24:MI:SS') where rksj_sw is null".format(
|
|
|
+ tablename, version)
|
|
|
+ self.cur.execute(details)
|
|
|
+ self.conn.commit()
|
|
|
+ details = "update {} set version = '{}', type = 'update' where tablename = '{}'".format(self.Vector_Version,
|
|
|
+ version, tablename)
|
|
|
+ self.cur.execute(details)
|
|
|
+ self.conn.commit()
|
|
|
+
|
|
|
+ # 通过表名称获取版本集合
|
|
|
+ def getTableVersions(self, tablename):
|
|
|
+ sql = "select distinct(version) from {} t where t.tablename = '{}' order by version desc".format(
|
|
|
+ self.Vector_Version_Details, tablename)
|
|
|
+ print(sql)
|
|
|
+ self.cur.execute(sql)
|
|
|
+ rows = self.cur.fetchall()
|
|
|
+ return rows
|
|
|
+
|
|
|
+ # 通过表名称获取当前版本
|
|
|
+ def getTableCurVersion(self, tablename):
|
|
|
+ sql = "select version from {} t where t.tablename = '{}'".format(
|
|
|
+ self.Vector_Version, tablename)
|
|
|
+ print(sql)
|
|
|
+ self.cur.execute(sql)
|
|
|
+ rows = self.cur.fetchall()
|
|
|
+ return rows[0][0]
|
|
|
|
|
|
# 获取矢量数据表的坐标系
|
|
|
def getVectorTableSrid(self, tablename):
|