# 1、总部运营后台运作原理 ## 1.1 创建组织 组织是一个抽象概念,鼎鼎总部是组织,与鼎鼎公司签订合同的公司是组织,调用鼎鼎开放平台接口的第三方也是组织。 鼎鼎总部作为组织不需要人为创建。一般是在程序启动时,通过程序创建。 凡是调用鼎鼎开放平台接口的第三方,一般是由总部管理员创建组织而来。创建过程中最主要的信息是授权`Key`和命名空间,授权`Key`在第三方调用开放平台接口时使用,命名空间用来区分模块数据在`Redis`缓冲中的存放空间。创建之后在数据库层面,`IsThirdParty=1`。需要注意的是:在把模块和第三方进行绑定时,如果第三方没有授权`Key`和命名空间,系统不会允许绑定。 凡是与鼎鼎签订合同的公司,一般都会有一个独立的数据库,这类组织是由销售员创建,然后经财务和`CEO`审核,才可以对该组织(也叫项目,在数据库中`IsProject=1`)进行其它设置。一个重要的设置是为该项目设置命名空间,该命名空间用来区分模块数据在`Redis`缓冲中的存放空间。需要注意的是:在把模块和项目进行绑定时,如果项目还没有命名空间,系统不会允许绑定。 ## 1.2 设置项目数据库 目前对于不同项目都有其独立数据库,是一种`多租户`设计。设置项目数据之前还有一个步骤,需要程序员为该项目创建对应的关系数据库和时序数据库。之后,通常由总部管理员为项目设置数据库信息,为项目设置关系数据库和时序数据库相关信息。 ## 1.3 设置项目`Banner` 一般由总部管理员为项目设置`Banner`。当通过手机端或者`Web`端登录,可以为不同项目呈现不同`Banner`。 ## 1.4 创建电工 创建电工本质上是为总部这个组织增加了一名员工,一般由总部管理员创建。数据库层面来看,首先在`User`表中增加一条记录,然后在`UserRole`中增加一条记录,最后在`Employee`表中增加一条记录。 ## 1.5 电工和项目的绑定 一旦电工和项目绑定之后,电工在手机端登录之后才可以找到对应的项目,通常是由总部管理员进行绑定。 ## 1.6 创建模块 一般由总部管理员创建模块,包括模块号、通讯方式(比如`HTTP`和`UDP`方式)、软件版本(目前没有,需要加上)。模块的在线离线状态从开放平台获取。假设有一个模块在总部运营后台创建之后,一直没有被用到项目中,开放平台对该模块无感,这个模块会一直显示离线。如果一个模块某天被安装在某个项目,联上网之后,开放平台捕获到了该模块状态,这个模块就会显示在在线状态。 ## 1.7 模块和项目绑定 模块和项目的绑定是有前提的。如果是第三方合作方(数据库层面`IsThridPary=1`), 在绑定之前第三方合作方必须有授权`Key`和命名空间。如果是项目(数据库层面`IsProject=1`),在绑定之前必须有命名空间。因为当模块和项目进行绑定时,不仅在总部运营后台记录了模块和项目的关系,还必须把相关的有授权`Key`和命名空间信息告诉开放平台,这样开放平台借助这些信心来保存或获取信息。 总部运营后台在模块和项目绑定完成之后,必须调用开放平台的一个接口,把项目和模块信息同步给开放平台。开放平台相关的两张表是`projects`和`macs`表,第一张表用来管理项目信息,第二张表用来管理模块信息。 `projects`表大致如下: | `ProjectId` | `ProjectName` | `NSpace` | `APIKey` | | ----------- | ------------- | ---------------- | -------- | | 4 | 办公楼版测试2 | `OpenAPI_Office` | | `macs`表大致如下: | `Mac` | `ProjectId` | `ProtocolType` | | -------------- | ----------- | -------------- | | `98CC4D212FE1` | 3 | `UDP` | | `187ED5311111` | 4 | `HTTP` | 以上,模块和项目之间的关系有了。随之而来的问题是:如果把模块及线路保存到项目数据库中去呢?打个比方,有一个办公楼版的项目叫`办公楼版测试2`, 对应`数据库2`。另一个办公楼版的项目叫`办公楼版测试3`,对应数据库3。如何把模块及线路保存到`数据库2`或`数据库3`呢? 一种方式是:当电工登录手机端,根据电工绑定的项目,把模块和线路保存到项目数据库。这是目前采用的方式,但应该不是最合理的,这个时间点应该靠前。 第二种方式是:当总部管理员在绑定模块和项目的时刻,把模块及线路保存到项目数据库中去,将来需要采用这种方式,暂时不做。 ## 1.8 模块和项目的解绑 首先完成在总部运营后台上模块和项目的解绑。 其次需要完成在开放平台上模块和项目的解绑。开放平台的`macs`表解绑后的`ProjectId`为空。如下: | `Mac` | `ProjectId` | `ProtocolType` | | -------------- | ----------- | -------------- | | `98CC4D212FE1` | 3 | `UDP` | | `187ED5311111` | | `HTTP` | 最后需要把模块及线路从项目数据库中删除(可能是物理删除,也有可能是逻辑删除),这点放【总部运营后台后端处理】中讲。