table_vacuate_delete.py 3.2 KB
# author:        4N
# createtime:    2021/1/27
# email:         nheweijun@sina.com


import datetime
import traceback
from app.models import Table, Database, DES,Task,db,TableVacuate

from sqlalchemy.engine import ResultProxy
from app.util.component.ApiTemplate import ApiTemplate
from app.util.component.PGUtil import PGUtil
from app.util.component.EntryDataVacuate import Process
from app.util.component.GeometryAdapter import GeometryAdapter
from app.util.component.StructuredPrint import StructurePrint
import multiprocessing
import uuid
import configure
from osgeo.ogr import DataSource,Layer,Geometry
from osgeo import ogr

class Api(ApiTemplate):
    api_name = "删除抽稀表"
    def process(self):

        res = {}
        res["data"] = {}
        pg_ds = None
        try:
            table_guid = self.para.get("guid")
            table: Table = Table.query.filter_by(guid=table_guid).one_or_none()
            grid = None
            if not self.para.get("grid"):
                raise Exception("请输入grids参数!")
            else:
                grid = float(self.para.get("grid"))

            if not table:
                raise Exception("数据不存在!")

            # 判断图层是否存在
            pg_ds :DataSource= PGUtil.open_pg_data_source(0,DES.decode(table.relate_database.sqlalchemy_uri))
            layer = pg_ds.GetLayerByName(table.name)

            # 判断用户权限
            # user, pw, host, port, database = PGUtil.get_info_from_sqlachemy_uri(DES.decode(table.relate_database.sqlalchemy_uri))
            # query_role:Layer = pg_ds.ExecuteSQL("SELECT rolcreatedb FROM pg_roles WHERE rolname='{}'".format(user))
            # if not query_role.GetFeature(0).GetField("rolcreatedb"):
            #     raise Exception("用户不具备建表权限!")

            if not layer:
                raise Exception("图层不存在!")

            #删除数据
            tvs = db.session.query(TableVacuate).filter_by(pixel_distance=grid, table_guid=table.guid).all()
            if not tvs:
                raise Exception("数据不存在!")
            for tv in tvs :
                db.session.delete(tv)
                try:
                    pg_ds.DeleteLayer(tv.name)
                except Exception as e :
                    StructurePrint.print("抽稀图层不存在!","warn")
            db.session.commit()
            res["result"] = True

        except Exception as e:
            raise e
        finally:
            if pg_ds:
                pg_ds.Destroy()
        return res


    api_doc = {
        "tags": ["管理接口"],
        "parameters": [
            {"name": "guid",
             "in": "formData",
             "type": "string",
             "description": "表guid", "required": "true"},
            {"name": "grid",
             "in": "formData",
             "type": "string",
             "description": "网格大小", "required": "true"}
        ],
        "responses": {
            200: {
                "schema": {
                    "properties": {
                    }
                }
            }
        }
    }