tile_service_edit.py 6.3 KB
# coding=utf-8
#author:        4N
#createtime:    2021/7/19
#email:         nheweijun@sina.com

from app.util.component.ApiTemplate import ApiTemplate
from app.util.component.ModelVisitor import ModelVisitor
import uuid
from ..models import TileService,Service,db,ServiceFunction
import datetime
import requests
from .util.ProjectFile import ProjectFile

from requests import Response

class Api(ApiTemplate):

    api_name = "修改切片服务"

    def process(self):



        # 返回结果
        res = {}

        try:
            guid = self.para.get("guid")
            service = Service.query.filter_by(guid=guid)
            this_time = datetime.datetime.now()

            service_update = {"update_time":this_time}
            tile_update = {}
            for key in self.para.keys():
                if key in ["name","title","state","description","overview","catalog_guid"]:
                    service_update[key] = self.para.get(key)
                if key in ["name","tile_type","vendor","crs","datasource","description",
                           "layer_name","layer_alias","layer_title","layer_style","layer_format",
                           "layer_extent","layer_description","scheme_guid"]:
                    tile_update[key] = self.para.get(key)

            #通知tileserver,更新缓存
            ts = TileService.query.filter_by(service_guid=guid).one_or_none()
            se = service.one_or_none()

            ts_json = ModelVisitor.object_to_json(ts)
            ts_json.update(tile_update)
            project_file = ProjectFile.create(ts_json)

            para = {"name":self.para.get("name") if self.para.get("name") else se.name,
                    "title":self.para.get("title") if self.para.get("title") else se.title,
                    "type":"tileserver","capabilities":1,"project":project_file}

            tile_service_edit_url = ""

            resp: Response  = requests.post(tile_service_edit_url,para).json()
            if not resp.json()["status"].__eq__("true"):
                raise Exception("调用切片服务的注册服务接口失败!")

            #修改数据库
            tile_service = TileService.query.filter_by(service_guid=guid)
            tile_type = self.para.get("tile_type")
            # 修改功能
            if tile_type:
                old_functions = ServiceFunction.query.filter_by(service_guid=guid).all()
                for function in old_functions:
                    if not function.type.__eq__(tile_type):
                        db.session.delete(function)

                if tile_type not in [fun.type for fun in old_functions]:
                    service_function = ServiceFunction(guid=uuid.uuid1().__str__(),type=tile_type,service_guid=guid)
                    db.session.add(service_function)

            if service_update:
                service.update(service_update)
            if tile_update:
                tile_service.update(tile_update)

            db.session.commit()
            res["result"] = True

        except Exception as e:
            raise e

        return res

    api_doc = {
        "tags": ["切片服务接口"],
        "parameters": [
            {"name": "guid",
             "in": "formData",
             "type": "string",
             "description": "service guid"},

            {"name": "name",
             "in": "formData",
             "type": "string",
             "description": "[地图服务,切片服务,影像服务]"},
            {"name": "title",
             "in": "formData",
             "type": "string",
             "description": "[地图服务,切片服务,影像服务]"},
            {"name": "description",
             "in": "formData",
             "type": "string",
             "description": "[地图服务,切片服务,影像服务]"},

            {"name": "catalog_guid",
             "in": "formData",
             "type": "string",
             "description": "[地图服务,切片服务,影像服务]"},

            {"name": "scheme_guid",
             "in": "formData",
             "type": "string",
             "description": "[切片服务,影像服务]切片方案"},

            # 切片服务参数
            {"name": "overview",
             "in": "formData",
             "type": "string",
             "description": "[切片服务]缩略图"},
            {"name": "tile_type",
             "in": "formData",
             "type": "string",
             "description": "[切片服务]tile_type",
             "enum":["WMTS","TMS"]},
            {"name": "vendor",
             "in": "formData",
             "type": "string",
             "description": "[切片服务]厂商"},
            {"name": "crs",
             "in": "formData",
             "type": "string",
             "description": "[切片服务]坐标系"},
            {"name": "datasource",
             "in": "formData",
             "type": "string",
             "description": "[切片服务]数据路径"},
            {"name": "layer_name",
             "in": "formData",
             "type": "string",
             "description": "[切片服务]图层名"},
            {"name": "layer_alias",
             "in": "formData",
             "type": "string",
             "description": "[切片服务]图层别名"},
            {"name": "layer_title",
             "in": "formData",
             "type": "string",
             "description": "[切片服务]图层标题"},
            {"name": "layer_style",
             "in": "formData",
             "type": "string",
             "description": "[切片服务,地图服务]图层样式"},
            {"name": "layer_format",
             "in": "formData",
             "type": "string",
             "description": "[切片服务]图层format"},
            {"name": "layer_extent",
             "in": "formData",
             "type": "string",
             "description": "[切片服务]图层范围"},
            {"name": "layer_description",
             "in": "formData",
             "type": "string",
             "description": "[切片服务]图层描述"},


        ],
        "responses": {
            200: {
                "schema": {
                    "properties": {
                    }
                }
            }
        }
    }