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