map_service_register.py 5.0 KB
# coding=utf-8
#author:        4N
#createtime:    2021/9/17
#email:         nheweijun@sina.com


from app.util.component.ApiTemplate import ApiTemplate
import uuid
from ..models import Service,db,MapService,ServiceFunction
import datetime
import configure
import requests
import json

class Api(ApiTemplate):

    api_name = "注册MapService服务"

    def process(self):
        # 返回结果
        res = {}

        try:

            this_time = datetime.datetime.now()
            service_guid = uuid.uuid1().__str__()
            map_service_guid = uuid.uuid1().__str__()

            # 逻辑是,先调用引擎接口,引擎说可以,才做持久化

            para = {"name":self.para.get("name"),
                    "title":self.para.get("title"),
                    "type":"mapserver",
                    "capabilities":2,
                    "project":self.para.get("project")}

            map_service_register_url = "{}/dmap/api/manager/regservice".format(configure.dmap_engine)
            resp: requests.Response  = requests.post(map_service_register_url,data=json.dumps(para),
                                            headers={'Content-Type':'application/json'},timeout=3
                                            )

            if resp.status_code == 200:
                resp.encoding="utf-8"
                resp_json = resp.json()
                if not resp_json["status"]=="1":
                    raise Exception("调用矢量服务的注册服务接口失败!")
            else:
                raise Exception("调用矢量服务的注册服务接口失败!")
            # 并获得服务缩略图
            if Service.query.filter_by(name = self.para.get("name")).one_or_none():
                raise Exception("同名服务已存在!")
            service = Service(
                guid = service_guid,
                name = self.para.get("name"),
                title = self.para.get("title"),
                creator=self.para.get("creator"),
                state = 1,
                create_time = this_time,
                update_time = this_time,
                description = self.para.get("description"),
                #node = Column(Integer),
                node = 1 ,
                overview = resp_json["url"],
                type = self.para.get("type"),
                catalog_guid = self.para.get("catalog_guid")
            )

            map_service = MapService(
                guid = map_service_guid,
                name = self.para.get("name"),
                title = self.para.get("title"),
                type = "mapserver",
                capabilities = int(self.para.get("capabilities",2)),
                project = self.para.get("project"),
                service_guid = service_guid
            )

            service_function_wms = ServiceFunction(guid=uuid.uuid1().__str__(),type="WMS",service_guid=service_guid)
            service_function_wfs = ServiceFunction(guid=uuid.uuid1().__str__(),type="WFS",service_guid=service_guid)

            db.session.add(service)
            db.session.add(map_service)
            db.session.add(service_function_wms)
            db.session.add(service_function_wfs)
            db.session.commit()

            res["data"] = service_guid
            res["result"] = True
        except Exception as e:
            db.session.rollback()
            raise e
        return res

    api_doc = {
        "tags": ["矢量地图接口"],
        "parameters": [

            {"name": "name",
             "in": "formData",
             "type": "string",
             "required": "true",
             "description": "[矢量地图,电子地图,影像地图]"},
            {"name": "title",
             "in": "formData",
             "type": "string",
             "description": "[矢量地图,电子地图,影像地图]"},
            {"name": "description",
             "in": "formData",
             "type": "string",
             "description": "[矢量地图,电子地图,影像地图]"},
            {"name": "type",
             "in": "formData",
             "type": "string",
             "enum": ["矢量地图"],
             "required": "true",
             "description": "[矢量地图,电子地图,影像地图]"},
            {"name": "catalog_guid",
             "in": "formData",
             "type": "string",
             "description": "[矢量地图,电子地图,影像地图]"},


            #矢量地图参数
            {"name": "capabilities",
             "in": "formData",
             "type": "int",
             "description": "[矢量地图]"},
            {"name": "project",
             "in": "formData",
             "type": "string",
             "description": "[矢量地图]project"},


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