旧数据迁移到开发平台

1. 服务数据

数据来源:

POA 中已经存在的 service、version、spec、scope 等数据,需要在开放平台中插入对应的数据。

1.1 迁移服务 Service

将POA 中现有的 服务,导入开放平台的服务

具体操作:

根据 platform_openapi 下 SERVICE 表的数据生成 insert 语句

  • 步骤 1,导入服务
use platform_openapi;

select CONCAT(
  'INSERT INTO \`TB_DEV_SERVICE\` (ID, DELETED, NAME, DESCRIPTION, ORIGIN, SYSTEM_ID) VALUES',
  '(\'', ID,  '\',\'0\',\'', NAME, '\',\'', DESCRIPTION, '\',\'', ORIGIN, '\',\'','1','\');') as INSERT_SQL
from platform_openapi.SERVICE
order by ID
;
  • 步骤 2,设置服务的管理员和开发者

通过 sql 脚本 设置服务的管理员和开发者

也可以在开放平台管理功能中进行设置

INSERT INTO `TB_DEV_SERVICE_DEVELOPER` (`ID`, `DELETED`, `SERVICE_ID`, `DEVELOPER_ID`) 
VALUES ('<SERVICE_ID>_150', 0 , '<SERVICE_ID>', '150');

INSERT INTO `TB_DEV_SERVICE_OPERATOR` (`ID`, `DELETED`, `SERVICE_ID`, `OPERATOR_ID`) 
VALUES ('<SERVICE_ID>_151', 0 , '<SERVICE_ID>', '151');

注,请将 <SERVICE_ID> 替换为 TB_DEV_SERVICE 表的 ID

1.2 迁移 Spec

将POA 中现有的 spec,导入开放平台的spec

具体操作:

根据 platform_openapi 下 API_SPEC 表的数据生成 insert 语句

use platform_openapi;

SELECT CONCAT(
  'INSERT INTO \`TB_DEV_SERVICE_SPEC\` (ID,DELETED, SERVICE_ID, API_VERSION, EDIT_VERSION, DESCRIPTION, SCOPE_COUNT) VALUES',
  '(\'', SERVICE_ID,'_',EDIT_VERSION,  '\',\'0\',\'', SERVICE_ID, '\',\'', API_VERSION, '\',\'', EDIT_VERSION, '\',\'','','\', 0);') as INSERT_SQL
FROM platform_openapi.API_SPEC
order by SERVICE_ID, API_VERSION
;

注,请根据 poa-docs 中的 Scopes,补全 SCOPE_COUNT

poa-docs 地址:https://poa-docs.paas.xxx.edu.cn

1.3 迁移 Scope

将POA 中现有的 scope,导入开放平台的scope

具体操作:

根据 platform_openapi 下 API 表的数据生成 insert 语句

use platform_openapi;

SELECT CONCAT(
  'INSERT INTO \`TB_DEV_SERVICE_SCOPE\` (ID, DELETED, SERVICE_ID, API_VERSION, NAME, DESCRIPTION, PUBLISHED, ENABLED) VALUES',
  '(\'', SERVICE_ID,'_',SCOPE,  '\',\'0\',\'', SERVICE_ID, '\',\'', API_VERSION, '\',\'', SCOPE, '\',\'','','\', 1, 1);') as INSERT_SQL
from (
  select SERVICE_ID, API_VERSION, EDIT_VERSION, SCOPE
  from platform_openapi.API
  where EDIT_VERSION in
  (
    select max(EDIT_VERSION) as EDIT_VERSION
    from platform_openapi.API
    group by SERVICE_ID, API_VERSION, SCOPE
  )
  group by SERVICE_ID, API_VERSION, EDIT_VERSION, SCOPE
) API_TMP
order by SERVICE_ID, API_VERSION, EDIT_VERSION, SCOPE
;

注,请根据 poa-docs 中的 Scopes,补全 DESCRIPTION

poa-docs 地址:https://poa-docs.paas.xxx.edu.cn

2. 应用数据

数据来源:

应用数据的来源主要有三部分:

  • 认证服务中的 service
  • 消息服务的 应用(accessApp)
  • POA 的 client

说明:

需要将上述三类数据,整理为一份应用数据,对于有重复的应用数据,保留一份即可。建议先从认证服务的数据开始,认证服务中的应用数据比较全面。

2.1 迁移cas 中的应用数据

数据从 cas_server.TB_SERVICE 表中获取

具体操作:

方式一,

use cas_server;

select S.NAME, S.DESCRIPTION, S.INFORMATION_URL, S.APPLICATION_ID as APPLICATION_IDENTIFICATION
from cas_server.TB_SERVICE S
where S.DELETED = 0
;

根据上面的查询结果,在开放平台数据库中创建应用:

use develop_center;

INSERT INTO `TB_DEV_APPLICATION` (`ID`, `NAME`, `DESCRIPTION`, `URL`, `SYSTEM_ID`, `APPLICATION_IDENTIFICATION`) 
VALUES (-ID-, -NAME-, -DESCRIPTION-, -URL-, '1', -APPLICATION_IDENTIFICATION-)
;

除了ID以外,其他字段一一对应。

方式二,

创建应用也可以参考使用以下语句:

select CONCAT(
  'INSERT INTO \`TB_DEV_APPLICATION\` (ID, DELETED, NAME, DESCRIPTION, URL, SYSTEM_ID, APPLICATION_IDENTIFICATION) VALUES',
  '(\'', ID, '\',\'1\',\'',NAME, '\',\'',DESCRIPTION,'\',\'', INFORMATION_URL,'\',\'','1', '\',\'', APPLICATION_ID , '\');') as INSERT_SQL
from cas_server.TB_SERVICE
where DELETED = 0
;

这个语句对查询结果做了拼接,可以拿来直接使用,使用这个也需要考虑应用是否已经存在。

2.2 迁移message 中的应用数据:

数据从 message.ACCESS_APP 表中获取

具体操作:

方式一,

首先查询需要创建的应用:

use message;

select APP.NAME, APP.DESCRIPTION, APP.ENABLED, APP.APP_ID APPLICATION_IDENTIFICATION
from message.ACCESS_APP APP
where DELETED = 0
;

在查询结果中,根据字段APPLICATION_IDENTIFICATION,在开放平台中对比,如果不存在此应用,那么需要创建应用,数据从上面查询中获取。

根据上面的查询结果,在开放平台数据库中创建应用:

USE develop_center;

INSERT INTO `TB_DEV_APPLICATION` (`ID`, `NAME`, `DESCRIPTION`, `SYSTEM_ID`, `APPLICATION_IDENTIFICATION`) 
VALUES (-ID-, -NAME-, -DESCRIPTION-, '1', -APPLICATION_IDENTIFICATION-)
;

除了ID以外,其他字段一一对应。

如果已经存在,那么不需要再添加。

方式二,

创建应用也可以参考使用以下语句:

select CONCAT(
  'INSERT INTO \`TB_DEV_APPLICATION\` (ID,DELETED, NAME, DESCRIPTION, SYSTEM_ID, `APPLICATION_IDENTIFICATION`, URL) VALUES ',
  '(\'',ID,'-message\',\'1\',\'',NAME,'\',\'', IFNULL(DESCRIPTION,''),'\',\'','1','\',\'',APP_ID,'\',\'',IFNULL(URL,''),'\');') as INSERT_SQL
from message.ACCESS_APP
where DELETED = 0 AND APP_ID IS NOT NULL
;

这个语句对查询结果做了拼接,可以拿来直接使用,使用这个语句也需要考虑应用是否已经存在。

2.3 迁移platform_openapi 中的数据

根据 https://poa-sa.paas.xxx.edu.cn/v1/clients 接口获取所有client 信息

具体操作:

根据 /clients 接口获取所有client 信息

根据返回数据中的clientName 来和应用表TB_DEV_APPLICATION 中的数据进行关联,对应表中的NAME;

如果应用表中没有的应用,需要进行创建:

use develop_center;

INSERT INTO `TB_DEV_APPLICATION` (`ID`, `NAME`, `DESCRIPTION`, `SYSTEM_ID`, `APPLICATION_IDENTIFICATION`) 
VALUES (-ID-, -NAME-, -DESCRIPTION-, '1', -APPLICATION_IDENTIFICATION-)
;

2.4 为应用和服务设置管理员和开发者

具体操作:

SELECT CONCAT('INSERT INTO \`TB_DEV_APPLICATION_DEVELOPER\` (ID, DELETED, APPLICATION_ID, DEVELOPER_ID) 
    VALUES','(\'',ID, '\',\'0' ,'\',\'',ID, '\',\'','150','\');') 
FROM TB_DEV_APPLICATION;

SELECT CONCAT('INSERT INTO \`TB_DEV_APPLICATION_OPERATOR\` (ID, DELETED, APPLICATION_ID, OPERATOR_ID) 
    VALUES','(\'',ID,'\',\'0' ,'\',\'',ID, '\',\'','151','\');') 
FROM TB_DEV_APPLICATION;

SELECT CONCAT('INSERT INTO \`TB_DEV_SERVICE_DEVELOPER\` (ID, DELETED, SERVICE_ID, DEVELOPER_ID) 
    VALUES','(\'',ID, '\',\'0' ,'\',\'',ID, '\',\'','150','\');') 
FROM TB_DEV_SERVICE;

SELECT CONCAT('INSERT INTO \`TB_DEV_SERVICE_OPERATOR\` (ID, DELETED, SERVICE_ID, OPERATOR_ID) 
    VALUES','(\'',ID, '\',\'0' ,'\',\'',ID, '\',\'','151','\');') 
FROM TB_DEV_SERVICE;

这个语句对查询结果做了拼接,结果是对应用的开发者和管理员,服务的开发者和管理员进行插入数据的语句。

如果有ID重复时,需要手动去修改ID,防止重复。

3. 基础能力数据

数据来源:

  • 认证服务的 service
  • 消息服务的应用
  • POA 中 client 的scope

说明:

  1. 认证服务的 service ,已经在之前创建了对应的应用,也需要给此应用对应开通 CAS认证基础能力。
  2. 消息服务的应用,已经在之前创建了对应的应用,也需要给此应用对应开通消息基础能力。
  3. POA 中 client 申请了 scope ,之前已经创建了对应的应用,也需要给次应用对应开通平台OpenAPI基础能力。同时在开放平台中添加应用和scope的关系。

3.1 添加应用的CAS基础能力

先根据开放平台中所选应用的APPLICATION_IDENTIFICATION 字段,在cas数据库中查询基础能力信息:

use cas_server;

select 
  S.LOGOUT_TYPE, S.APPLICATION_DOMAIN, S.ADD_TIME,
  S.DESCRIPTION, S.EXTERNAL_ID, S.INFORMATION_URL, S.ENABLED, S.REGISTERED_SERVICE_ID,
  S.COMPANY_ID, S.RESPONSE_TYPE, S.DELETED, S.SSO_ENABLED, S.LOGOUT_URL, S.NAME,
  S.ADD_ACCOUNT, S.APPLICATION_ID, S.SERVICE_ID
from TB_SERVICE S
where S.DELETED = 0
  and S.APPLICATION_ID = -APPLICATION_IDENTIFICATION-;

查询结果放入下面的ABILITY_SETTINGS 字段中。

下面插入数据中,APPLICATION_ID 对应所选应用的ID

use develop_center;

INSERT INTO `TB_DEV_APPLICATION_ABILITY_USAGE` (`ID`, `COMPANY_ID`, `DELETED`, `APPLICATION_ID`, `ABILITY_ID`, `APPLY_TIME`, `ABILITY_SETTINGS`) 
VALUES (-ID-, '1', '0', -APPLICATION_ID-, 'cas', '2020-12-22 15:32:43',-ABILITY_SETTINGS-)
;

注,

-ABILITY_SETTINGS- 内容:

{
  "logoutType": "",
  "applicationDomain": "",
  "addTime": 1608538919314,
  "description": "",
  "externalId": "",
  "informationUrl": "",
  "enabled": true,
  "registeredServiceId": 10060,
  "companyId": "",
  "responseType": "",
  "deleted": false,
  "ssoEnabled": true,
  "logoutUrl": "",
  "name": "",
  "id": "",
  "addAccount": "",
  "applicationId": "",
  "serviceId": "",
  "requireAllAttributes": true
}

利用上面的查询将对应内容置换。

可以使用下面的查询语句生成 sql拼接语句来进行插入:

select CONCAT(
  'INSERT INTO \`TB_DEV_APPLICATION_ABILITY_USAGE\` (ID, COMPANY_ID, DELETED, APPLICATION_ID, ABILITY_ID, APPLY_TIME,ABILITY_SETTINGS) VALUES (',
  '\'',ID,'cas','\',\'',' 1\', \'0','\',\'', ID,'\',\'', 'cas\', \'2020-12-22 15:32:43\',\'',
  '{"logoutType":"',IFNULL(LOGOUT_TYPE,''),'","applicationDomain":"',IFNULL(APPLICATION_DOMAIN,''),'","addTime":1608538919314,"description":"',IFNULL(DESCRIPTION,''),
  '","externalId":"',IFNULL(EXTERNAL_ID,''),'","informationUrl":"',IFNULL(INFORMATION_URL,''),'","enabled":true,"registeredServiceId":',IFNULL(REGISTERED_SERVICE_ID,''),
  ',"companyId":"1","responseType":"',RESPONSE_TYPE,'","deleted":false,"ssoEnabled":',IF(SSO_ENABLED = 1,'true','false'),',"idTokenEnabled":',IF(ID_TOKEN_ENABLED = 1,'true','false'),
  ',"jwtAsServiceTicket":',IF(JWT_AS_SERVICE_TICKET = 1,'true','false'),',"logoutUrl":"',IFNULL(LOGOUT_URL,''),'","name":"',NAME,
  '","id":"',ID,'","addAccount":"admin","applicationId":"',IFNULL(APPLICATION_ID,''),'","serviceId":"',IFNULL(SERVICE_ID,''),'","requireAllAttributes":',IFNULL(REQUIRE_ALL_ATTRIBUTES,'1'),
  '}',
  '\');'
) as INSERT_SQL
from TB_SERVICE
where DELETED = '0'
;

3.2 添加应用的MESSAGE基础能力

先根据开放平台中所选应用的APPLICATION_IDENTIFICATION 字段,在message数据库中查询基础能力信息:

use develop_center;

INSERT INTO `TB_DEV_APPLICATION_ABILITY_USAGE` (`ID`, `COMPANY_ID`, `DELETED`, `APPLICATION_ID`, `ABILITY_ID`, `APPLY_TIME`) 
VALUES (-ID-, '1', '0', -APPLICATION_ID-, 'message', '2020-12-31 15:32:43')
;

3.3 添加应用的openapi基础能力。

  • 开通

根据 /clients 接口获取所有client 信息,主要是clientId,来添加应用的基础能力信息。需要替换对应的clientId信息。

use develop_center;

INSERT INTO `TB_DEV_APPLICATION_ABILITY_USAGE` (`ID`, `COMPANY_ID`, `DELETED`, `APPLICATION_ID`, `ABILITY_ID`, `APPLY_TIME`,`ABILITY_SETTINGS`) 
VALUES (-ID-, '1', '0', -APPLICATION_ID-, 'platformApi', '2020-12-31 15:32:43','{\"clientId\":\"id123\"}');    
  • 添加 Scope

根据 /clients 接口获取所有client 信息,可以看到此应用关联的scopes 列表。

根据scope名称来查询开放平台中的scope:

select S.ID
from TB_DEV_SERVICE_SCOPE S
where S.NAME = -name-
;

根据上面的应用id和scope的Id使用下面插入语句插入数据:

INSERT INTO `TB_DEV_APPLICATION_SCOPE_USAGE` (`ID`, `APPLICATION_ID`, `ABILITY_ID`, `SCOPE_ID`, `APPLY_TIME`) 
VALUES (-ID-, -APPLICATION_ID-, 'platformApi', -SCOPE_ID-, '2020-12-31 11:33:19')
;