Skip to content
本页目录

MAS 模块化应用支撑平台

MAS是一个模块化的应用支撑平台,采用微服务和微应用架构,支持多租户、多站点、模块化开发和积木式搭建。基于该平台,可以快速开发各类业务微应用,通过组合微应用来搭建支持多租户和多站点的业务系统。它能够实现租户独立的、可个性化的各类业务系统(站点),并且支持全代码和低代码的开发方式。

功能范围

序号子平台说明
1平台管理中心管理租户、站点、应用等
2站群站点管理中心实现一个站点的基本管理功能,包括菜单、主题及基本信息管理
3帐户中心实现站点账号管理、认证和角色授权
4MAUI开发框架前端微应用开发框架,支持对前端内核扩展及业务的模块化开发
5微服务开发框架后端微服务开发框架,基于Spring Cloud Alibaba架构实现微服务的模块化开发

版本

v5.13.25,已于2024年10月28日发布

  • 平台登录认证由token机制调整为会话机制
  • 平台站点结构调整成站群结构
  • 废弃mas-auth、mas-mq服务,websocket通讯由locas-fbp服务提供

非平台的应用、服务需要适配

前端自行发出的ajax请求头需要改成sessionId,并新增站群id 参考示例:

js
config.headers["sessionId"] =  ctx.session.get("sessionId")
config.headers['mas-tenant-code'] = ctx.store.getters.setting.tenantCode
config.headers['mas-tenant-id'] = ctx.store.getters.setting.tenantId
config.headers['mas-site-code'] = ctx.store.getters.setting.siteCode
config.headers['mas-site-id'] = ctx.store.getters.setting.siteId
config.headers['mas-site-group-id'] = ctx.store.getters.setting.siteGroupId

后台微服务mas-core版本需升级为:5.11.7

使用mq消息的需调整为fbp的消息

更新内容

此版本主要更新内容如下:

新增

修改或修复

  • mas-admin里移除了对fbp应用上架的配置,fbp直接指向上架后的应用
  • vue版本还原到v2.6.12
  • 调整平台登录token机制为会话机制,下架mas-auth服务【业务上不符合平台开发规范的使用token的请求需要调整】,废弃mas-auth服务,原登录相关的应用调整为fbp配置实现;【要求mas-gateway、locas-service中的redis连接要与fbp服务里系统缓存一致】
  • 调整平台websocket通讯由FBP服务提供,废弃中间rabbitmq中间件和mas-mq服务【原公文项目中用到的待办数据推送、显示需调整,查看调整说明
  • 平台微服务部署时新增服务注册nacos可以设定账号密码(nacos开启服务身份认证)【修改过默认密码的nacos镜像地址:registry.cn-hangzhou.aliyuncs.com/tangram/mas-nacos:v2.2.3】,开启nacos身份认证需要配置环境变量

开启nacos身份认证

environment:
  MODE: standalone
  PREFER_HOST_MODE: hostname
  NACOS_AUTH_ENABLE: true
  NACOS_AUTH_TOKEN: ZHdxZmhncWlmaHFwb2lqZDktM3UxLTA5ZmgzMG5mcHdvamYwLWkxM2ZmMzJmZHN3Zg==
  NACOS_AUTH_IDENTITY_KEY: fbp
  NACOS_AUTH_IDENTITY_VALUE: fbp
  • 平台站点结构调整,在原站点上新增站群;租户下可建多个站群,新建站群时会自动新建一个管理站点【对站群内其它站点的设置、账号、角色、菜单等进行管理】和管理员
  • 平台账号新增用户编码、身份编码,解决业务系统之间单点登录时身份对接
  • 平台登录认证调整为fbp接口配置的应用,登录应用上架后需要设置DSC【数据源、存储、缓存】(登录认证应用请查看locas2.7.28文档)
  • 基于站群管理模式平台运维应用、管理应用调整:平台sa站点负责应用(授权到租户)、租户、站群维护;业务租户内站群管理站来负责群内站点的管理(应用再授权到业务站点)
  • 通过账号中的用户编码、身份编码通过lc-fbpsso、lc-switchsf实现用户在站点间单点登录和多身份切换
  • 修复站群模式后角色管理、角色授权错误
  • 修复上架的fbp应用设置dsc界面没出来问题
  • 修复浙政钉相关登录应用中域名根据站点设置来获取,解决专有钉和浙政钉环境通过配置适配
  • 修复平台管理中站点管理新建站点维护不准确问题(未处理路由跳转情况)
  • 调整nginx超时
  • 新建站点时将站点名称自动写入站点设置的标题、简称中
  • 主题清理动态码功能(导致js报错)
  • 修复站点设置主题数据跟站点未对应
  • 修复菜单应用无法配置菜单
  • mas-dingtalk新增群消息接口,放开dingtalk路径访问限制;浙政钉域名解析打入容器;
  • mas-nginx新增edas环境xctest配置文件
  • mas-admin对外调用接口适配站群逻辑;修复应用上架应用角色重复创建问题;
  • 屏蔽敏感信息(浙政钉aksk)
  • 修复修改密码报错
  • 修复mas-sso对接中台地址采用配置的地址的端口(mas-sso)
  • 修复登录日志查询报错(mas-admin-log)
  • 修复平台跨租户站点单点登录js报错(mas-exploler)
  • JIEP推送附件调整为单个文件推送,公文批量下载文件接口参数类型修改,文件接收修订处理wps类型文件,调整电子印章所需依赖(mas-file)

优化

更新资料获取

如何获取微服务镜像?

所有镜像可到容器仓库通过 docker pull 拉取

  • 武汉公司内网:192.168.1.10:5000/tangram/[微服务名]:[版本号]
  • 阿里云:registry.cn-hangzhou.aliyuncs.com/tangram/[微服务名]:[版本号]

如何获取微服务jar包?

所有正式发布版本可到私服仓库下载

  • 下载地址:http://nps.zktx-soft.com:19098/repository/maven-public/com/gsoft/[平台:mas|locas]/[应用名]/[版本号]/[应用名]-[版本号].jar

例:http://nps.zktx-soft.com:19098/repository/maven-public/com/gsoft/mas/mas-admin/5.13.12/mas-admin-5.13.12.jar

如何获取微应用tgz包?

所有安装包可到阿里云OSS仓库下载

  • 路径:oss://foa5-oss/deploy/release/[平台:mas/locas]/[应用名称]/[版本号]/[应用名称]-[版本号].tgz 如:oss://foa5-oss/deploy/release/mas/mas-panel/5.13.27/mas-panel-5.13.27.tgz

微服务版本明细

序号模块微服务版本号说明
基础设施
1Nacos服务nacos/nacos-server2.0.3
2Redisredis6.2.6-alpine3.15
3RabbitMQbyteflair/rabbitmq-stomplatest可选
平台基础
4前端基座mas-nginx5.13.27原foa5-nginx
5网关服务mas-gateway5.13.12原foa-cloud-gateway
6站点系统管理mas-admin5.13.12原foa-cloud-admin
7文件服务mas-file5.13.12原foa-cloud-file
扩展服务
8单点登录mas-sso5.13.12可选,原foa-cloud-sso-cos
9定时任务mas-task5.13.12可选,原foa-cloud-task
10在线WPSmas-wps5.13.12可选,原foa-cloud-wps
11浙政钉网关mas-dingtalk5.13.12可选,原cos-api-gateway
12第三方接入api网关mas-open-gateway5.13.12可选,nginx里需加配置参考文档

微应用版本明细

序号模块微应用版本号说明
管理平台
1应用市场mas-ops-app5.13.16
2租户管理mas-ops-tenant5.13.16
3站点管理mas-ops-site5.13.16
4站群管理mas-ops-sitegroup5.13.16
5api管理lc-apiacmv1.0.0.4 获取地址:oss://foa5-oss/deploy/mas/lc-apiacm/接口白名单管理器
6PC Explorermas-explorer5.13.27pc页面资源管理器
7移动端 Explorermas-mobile-explorer5.13.27移动页面资源管理器
站点系统管理
1账号管理mas-admin-account5.13.19可替换
2角色管理mas-admin-role5.13.19可替换
3单点登录mas-admin-sso5.13.19可选,对应mas-sso
4菜单初始化mas-admin-menu5.13.19
5参数管理mas-admin-param5.13.19可选
6数据字典mas-admin-dictionary5.13.19可选
7数据分类mas-admin-catalog5.13.19可选
8操作日志mas-admin-log5.13.19可选
9在线用户mas-admin-online5.13.19可选
10站点设置mas-admin-site5.13.19
主题
1清新绿(横向)theme-horizontal-green5.13.27可选
2中国红(横向)theme-horizontal-red5.13.27可选
3政务蓝(纵向)theme-vertical-blue5.13.27可选
4清新绿(纵向)theme-vertical-green5.13.27可选
5中国红(纵向)theme-vertical-red5.13.27可选
6蓝色综合theme-multiple-blue5.13.27可选
7蓝色分栏theme-subfield-blue5.13.27可选
8大屏主题theme-fullscreen5.13.27可选
9移动账号密码主题theme-mobile-default5.13.27可选
10大屏亮色主题theme-fullscreen-light5.13.27可选
扩展功能
1工作门户mas-panel5.13.27可选
2打印模块mas-printer5.13.27可选
3接入管理lc-thirdaccessmngv1.0.0.5 获取地址:oss://foa5-oss/deploy/mas/lc-thirdapimng/可选
4接口授权管理(垂直鉴权)lc-apiauthmngv1.0.0.2 获取地址:oss://foa5-oss/deploy/mas/lc-thirdapimng/可选

可选的微应用,没有特殊说明的,对应的微服务均为必选微服务或无需对应服务

浙政钉代理(IRS托管需要)

序号模块微应用版本号说明
1代理mas-ui-dingtalk5.8.2可选

系统运行支撑应用

【获取地址:oss://foa5-oss/deploy/fbp-plat-hold/】

序号微应用Code版本号更新说明
1数据源管理(平台级)lc-fbppdsmv1.0.0.8
2存储管理(平台级)lc-pstoragev1.0.0.8
3缓存管理(平台级)lc-pcachev1.0.0.5
4数据源管理(站点级)lc-fbpsdsmv1.0.0.6
5存储管理(站点级)lc-sstoragev1.0.0.5
6缓存管理(站点级)lc-scachev1.0.0.5
7系统缓存清理lc-syscachemngv1.0.0.8
8国密SM2lc-sm2v1.0.0.1

系统运行支撑应用(系统登录认证)

【获取地址:oss://foa5-oss/deploy/fbp-login/5.13.20/】

序号微应用Code版本号更新说明
1用户名密码登录lc-userpwdloginv1.0.0.7
2扫码登录lc-qrloginv1.0.0.9
3移动端免登lc-zzdloginv1.0.0.10
4一体化登录lc-ythloginv1.0.0.6
5金三门户单点登录(登录名)lc-usernameloginv1.0.0.6
6锁屏解锁登录lc-unlockloginv1.0.0.4
7平台用户编码身份单点登录、扫码预览lc-fbpssov1.0.0.4
8lc-fbpsso单点后多身份切换lc-switchsfv1.0.0.4

5.10升级至5.13.25

  • 1、mas-admin服务连的库中执行(新增api访问控制表):
sql
DROP TABLE IF EXISTS "t_api_manage";
CREATE TABLE "t_api_manage" (
	"c_id" serial8 NOT NULL,
	"c_last_modifier" int8,
	"c_last_modify_time" TIMESTAMP ( 6 ),
	"c_creator" int8,
	"c_create_time" TIMESTAMP ( 6 ),
	"c_sort_number" int4,
	"c_tenant_id" int8,
	"c_type" VARCHAR ( 10 ) COLLATE "pg_catalog"."default",
	"c_module" VARCHAR ( 50 ) COLLATE "pg_catalog"."default",
	"c_path" VARCHAR ( 255 ) COLLATE "pg_catalog"."default",
	"c_remark" VARCHAR ( 500 ) COLLATE "pg_catalog"."default",
	CONSTRAINT "t_api_manage_pkey" PRIMARY KEY ( "c_id" )
) WITH ( OIDS = TRUE );
COMMENT ON COLUMN "t_api_manage"."c_id" IS '主键';
COMMENT ON COLUMN "t_api_manage"."c_last_modifier" IS '修改人';
COMMENT ON COLUMN "t_api_manage"."c_last_modify_time" IS '修改时间';
COMMENT ON COLUMN "t_api_manage"."c_creator" IS '创建人';
COMMENT ON COLUMN "t_api_manage"."c_create_time" IS '创建时间';
COMMENT ON COLUMN "t_api_manage"."c_sort_number" IS '排序号';
COMMENT ON COLUMN "t_api_manage"."c_tenant_id" IS '租户ID';
COMMENT ON COLUMN "t_api_manage"."c_type" IS '类型';
COMMENT ON COLUMN "t_api_manage"."c_module" IS '模块';
COMMENT ON COLUMN "t_api_manage"."c_path" IS '路径';
COMMENT ON COLUMN "t_api_manage"."c_remark" IS '描述';

--初始化mas-wps预览放行接口:
INSERT INTO t_api_manage(c_last_modifier,c_last_modify_time,c_creator,c_create_time,c_sort_number,c_type,c_module,c_path,c_remark) VALUES (1, '2023-09-15 15:17:53.895', 1, '2023-09-15 15:17:53.895', 1, '', 'mas-wps', '/mas-wps/v2/3rd/**', 'mas-wps中台接口');
INSERT INTO t_api_manage(c_last_modifier,c_last_modify_time,c_creator,c_create_time,c_sort_number,c_type,c_module,c_path,c_remark) VALUES (1, '2023-09-15 15:18:16.785', 1, '2023-09-15 15:18:16.785', 2, '', 'mas-wps', '/mas-wps/v1/3rd/**', 'mas-wps中台接口');
INSERT INTO t_api_manage(c_last_modifier,c_last_modify_time,c_creator,c_create_time,c_sort_number,c_type,c_module,c_path,c_remark)  VALUES (1, '2023-09-15 15:18:40.948', 1, '2023-09-15 15:18:40.948',3, '', 'mas-wps', '/mas-wps/download/attach', 'mas-wps中台回调下载接口');
INSERT INTO t_api_manage(c_last_modifier,c_last_modify_time,c_creator,c_create_time,c_sort_number,c_type,c_module,c_path,c_remark)  VALUES (1, '2023-09-15 15:18:59.719', 1, '2023-09-15 15:18:59.719', 4, '', 'mas-wps', '/mas-wps/download/gz', 'mas-wps中台回调稿纸接口');
INSERT INTO t_api_manage(c_last_modifier,c_last_modify_time,c_creator,c_create_time,c_sort_number,c_type,c_module,c_path,c_remark)  VALUES (1, '2023-09-15 15:18:59.719', 1, '2023-09-15 15:18:59.719', 5, '', 'mas-file', '/mas-file/file/download4wpsproxy', 'mas-file中台回调下载文件接口');
INSERT INTO t_api_manage(c_last_modifier,c_last_modify_time,c_creator,c_create_time,c_sort_number,c_type,c_module,c_path,c_remark)  VALUES (1, '2023-09-15 15:18:59.719', 1, '2023-09-15 15:18:59.719', 6, '', 'mas-file', '/mas-file/file/fileinfo4wpsproxy', 'mas-file中台回调获取文件信息接口');
INSERT INTO t_api_manage(c_last_modifier,c_last_modify_time,c_creator,c_create_time,c_sort_number,c_type,c_module,c_path,c_remark)  VALUES (1, '2023-09-15 15:18:59.719', 1, '2023-09-15 15:18:59.719', 7, '', 'mas-file', '/mas-file/file/downloadByOsskey4wpsproxy', 'mas-file中台回调oss下载文件接口');
INSERT INTO t_api_manage(c_last_modifier,c_last_modify_time,c_creator,c_create_time,c_sort_number,c_type,c_module,c_path,c_remark)  VALUES (1, '2023-09-15 15:18:59.719', 1, '2023-09-15 15:18:59.719', 8, '', 'mas-file', '/mas-file/file/fileinfoByOsskey4wpsproxy', 'mas-file中台回调获取oss文件信息接口');

--初始化登录认证接口放行
INSERT INTO "t_api_manage"( "c_last_modifier", "c_last_modify_time", "c_creator", "c_create_time", "c_sort_number", "c_tenant_id", "c_type", "c_module", "c_path", "c_remark") VALUES (1, '15-APR-24 20:06:56.809', 1, '15-APR-24 20:06:56.809', 1, NULL, '', 'mas-file', '/mas-file/file/downloadByReferenceId', '文件下载');
INSERT INTO "t_api_manage"( "c_last_modifier", "c_last_modify_time", "c_creator", "c_create_time", "c_sort_number", "c_tenant_id", "c_type", "c_module", "c_path", "c_remark") VALUES (NULL, NULL, NULL, NULL, NULL, NULL, '', 'fbp', '/fbp/app/lc-userpwdlogin/**', 'fbp账号密码登录退出接口');
INSERT INTO "t_api_manage"( "c_last_modifier", "c_last_modify_time", "c_creator", "c_create_time", "c_sort_number", "c_tenant_id", "c_type", "c_module", "c_path", "c_remark") VALUES (NULL, NULL, NULL, NULL, NULL, NULL, '', 'fbp', '/fbp/app/lc-zzdlogin/**', '浙政钉登录');
INSERT INTO "t_api_manage"( "c_last_modifier", "c_last_modify_time", "c_creator", "c_create_time", "c_sort_number", "c_tenant_id", "c_type", "c_module", "c_path", "c_remark") VALUES (NULL, NULL, NULL, NULL, NULL, NULL, '', 'fbp', '/fbp/app/lc-qrlogin/**', 'PC扫码登录');
INSERT INTO "t_api_manage"( "c_last_modifier", "c_last_modify_time", "c_creator", "c_create_time", "c_sort_number", "c_tenant_id", "c_type", "c_module", "c_path", "c_remark") VALUES (NULL, NULL, NULL, NULL, NULL, NULL, '', 'fbp', '/fbp/app/lc-fbpsso/**', 'fbp单点登录');
INSERT INTO "t_api_manage"( "c_last_modifier", "c_last_modify_time", "c_creator", "c_create_time", "c_sort_number", "c_tenant_id", "c_type", "c_module", "c_path", "c_remark") VALUES (NULL, NULL, NULL, NULL, NULL, NULL, '', 'fbp', '/fbp/app/boot/1.0.0/getConfig', '获取站点配置');
INSERT INTO "t_api_manage"( "c_last_modifier", "c_last_modify_time", "c_creator", "c_create_time", "c_sort_number", "c_tenant_id", "c_type", "c_module", "c_path", "c_remark") VALUES (NULL, NULL, NULL, NULL, NULL, NULL, '', 'fbp', '/fbp/app/lc-usernamelogin/**', '用户名单点登录');
INSERT INTO "t_api_manage"( "c_last_modifier", "c_last_modify_time", "c_creator", "c_create_time", "c_sort_number", "c_tenant_id", "c_type", "c_module", "c_path", "c_remark") VALUES (NULL, NULL, NULL, NULL, NULL, NULL, '', 'fbp', '/fbp/app/lc-fbpsso/**', 'FBP单点登录(含扫码预览)');
INSERT INTO "t_api_manage"( "c_last_modifier", "c_last_modify_time", "c_creator", "c_create_time", "c_sort_number", "c_tenant_id", "c_type", "c_module", "c_path", "c_remark") VALUES (NULL, NULL, NULL, NULL, NULL, NULL, '', 'fbp', '/fbp/app/lc-ythlogin/**', '一体化单点登录');

TIP

业务上原来通过mas-gateway上的参数:FOA5_AUTH_WHITELIST配置的放行接口仍保留,后续需要放行接口通过应用:lc-apiacm来操作

mas-gateway上的参数:FOA5_WPS_WHITELIST已废弃,需要要通过lc-apiacm将其下配置的接口添加进来(升级脚本中初始化了开发已知的接口数据)

  • 2、mas-admin服务连的库中执行:
sql
ALTER TABLE cos_portal_component ADD COLUMN c_ref_id VARCHAR(200);
COMMENT ON COLUMN "cos_portal_component"."c_ref_id" IS '应用文件id';

ALTER TABLE cos_portal_component ADD COLUMN c_setting text;
COMMENT ON COLUMN "cos_portal_component"."c_setting" IS '应用配置';

ALTER TABLE cos_site_component_grant ADD COLUMN c_setting text;
COMMENT ON COLUMN "cos_site_component_grant"."c_setting" IS '应用配置';


-- ----------------------------
-- Table structure for cos_admin_site_group_info
-- ----------------------------
DROP TABLE IF EXISTS "cos_admin_site_group_info";
CREATE TABLE "cos_admin_site_group_info" (
  "c_id" serial8 NOT NULL,
  "c_last_modifier" int8,
  "c_last_modify_time" timestamp(6),
  "c_creator" int8,
  "c_create_time" timestamp(6),
  "c_sort_number" int4,
  "c_tenant_id" int8,
  "c_tenant_code" varchar(32) ,
  "c_code" varchar(32) ,
  "c_name" varchar(32) ,
  "c_activate_time" timestamp(6),
  "c_invalid_time" timestamp(6),
  CONSTRAINT "cos_admin_site_group_info_pkey" PRIMARY KEY ("c_id")
);
COMMENT ON COLUMN "cos_admin_site_group_info"."c_id" IS '主键';
COMMENT ON COLUMN "cos_admin_site_group_info"."c_last_modifier" IS '修改人';
COMMENT ON COLUMN "cos_admin_site_group_info"."c_last_modify_time" IS '修改时间';
COMMENT ON COLUMN "cos_admin_site_group_info"."c_creator" IS '创建人';
COMMENT ON COLUMN "cos_admin_site_group_info"."c_create_time" IS '创建时间';
COMMENT ON COLUMN "cos_admin_site_group_info"."c_sort_number" IS '排序号';
COMMENT ON COLUMN "cos_admin_site_group_info"."c_tenant_id" IS '租户ID';
COMMENT ON COLUMN "cos_admin_site_group_info"."c_tenant_code" IS '租户代码';
COMMENT ON COLUMN "cos_admin_site_group_info"."c_code" IS '站群代码';
COMMENT ON COLUMN "cos_admin_site_group_info"."c_name" IS '站群名称';
COMMENT ON COLUMN "cos_admin_site_group_info"."c_activate_time" IS '生效时间';
COMMENT ON COLUMN "cos_admin_site_group_info"."c_invalid_time" IS '失效时间';

-- 调整表结构
ALTER TABLE cos_admin_site_info ADD COLUMN c_site_group_id int8;
ALTER TABLE cos_admin_site_info ADD COLUMN c_site_group_code varchar(50);
ALTER TABLE cos_admin_site_info ADD COLUMN c_is_manage_site bool;

ALTER TABLE cos_admin_account_info ADD COLUMN c_site_group_id int8;
ALTER TABLE cos_admin_account_tenant ADD COLUMN c_site_group_id int8;
ALTER TABLE cos_admin_site_info ALTER COLUMN c_contact type varchar(50);

--账号表新增字段
ALTER TABLE cos_admin_account_info ADD COLUMN c_identity_code VARCHAR(100);
COMMENT ON COLUMN "cos_admin_account_info"."c_identity_code" IS '身份编码';

ALTER TABLE cos_admin_account_info ADD COLUMN c_user_code VARCHAR(100);
COMMENT ON COLUMN "cos_admin_account_info"."c_user_code" IS '用户编码';

ALTER TABLE cos_admin_account_info ADD COLUMN c_identity_desc VARCHAR(500);
COMMENT ON COLUMN "cos_admin_account_info"."c_identity_desc" IS '身份描述信息';

ALTER TABLE cos_admin_role_info ADD COLUMN c_site_group_id int8;
COMMENT ON COLUMN "cos_admin_role_info"."c_site_group_id" IS '站群id';

ALTER TABLE cos_admin_role_mapping ADD COLUMN c_site_group_id int8;
COMMENT ON COLUMN "cos_admin_role_mapping"."c_site_group_id" IS '站群id';

--升级平台管理租户为站群,其它租户等升级完后用升级应用进行升级
update cos_admin_site_info set c_is_manage_site = false;
--初始化平台站群
INSERT INTO "cos_admin_site_group_info"("c_last_modifier", "c_last_modify_time", "c_creator", "c_create_time", "c_sort_number", "c_tenant_id", "c_tenant_code", "c_code", "c_name", "c_activate_time", "c_invalid_time") VALUES (1, '11-JUL-24 16:59:10.659737', 3, '11-JUL-24 16:59:10.659737', 1, 1, 'sys', 'sys_sg', '默认站群', NULL, NULL);
--初始化平台站群管理站点
INSERT INTO "cos_admin_site_info"("c_last_modifier", "c_last_modify_time", "c_creator", "c_create_time", "c_sort_number", "c_site_type", "c_title", "c_theme", "c_logo", "c_code", "c_name", "c_contact", "c_mobile", "c_email", "c_activate_time", "c_invalid_time", "c_site_domain", "c_inited", "c_tenant_id", "c_site_setting", "c_tenant_code", "c_app_key", "c_app_secret", "c_manage_sites", "c_site_group_id", "c_is_manage_site", "c_site_group_code") VALUES (1, '16-JUL-24 11:25:36.263', 1, '11-JUL-24 16:59:10', 1, 0, NULL, NULL, NULL, 'sys_sg_manage', '默认站点', 'sys_sg_manage_admin', NULL, NULL, NULL, NULL, NULL, NULL, 1, '{"appKey":"","appSecret":"","systemName":"平台管理站","shortName":"平台管理站"}', 'sys', '', '', NULL, (select c_id from cos_admin_site_group_info where c_code = 'sys_sg'), 't', 'sys_sg');
--初始化平台站群管理站点账号
INSERT INTO "cos_admin_account_info"("c_granted_apis", "c_account_expired", "c_account_locked", "c_credentials_expired", "c_last_modifier", "c_last_modify_time", "c_creator", "c_create_time", "c_sort_number", "c_tenant_id", "c_login_name", "c_login_dingding", "c_login_phone", "c_login_email", "c_status", "c_password_policy", "c_password", "c_mobile_device", "c_allow_mobile_access", "c_last_login_time", "c_last_login_client_ip", "c_last_login_failed", "c_default_tenant", "c_account_source", "c_account_type", "c_full_name", "c_tag", "c_theme") VALUES ('/**', '0', '0', '0', 1, now(), NULL, NULL, 1, (select c_id from cos_admin_tenant_info where c_code = 'sys'), 'sys_sg_manage_admin', NULL, NULL, NULL, '1', NULL, '$2a$10$7B1jfrju3iOGFd8F5dfZzuCgReqJBqasvSPyO0oYtNCP3n2h69Q8C', NULL, NULL, NULL, NULL, NULL, 'sys', NULL, 11, '平台站群管理员', NULL, NULL);
--将账号关联站群
update cos_admin_account_info set c_site_group_id = (select c_id from cos_admin_site_group_info where c_code = 'sys_sg') where c_tenant_id = (select c_id from cos_admin_tenant_info where c_code = 'sys');
--将站群管理账号授权到管理站点
INSERT INTO "cos_admin_account_tenant"("c_last_modifier", "c_last_modify_time", "c_creator", "c_create_time", "c_sort_number", "c_tenant_id", "c_account_id", "c_site_id", "c_theme") VALUES (1, '15-AUG-23 13:24:52.813', '1', '15-AUG-23 13:24:52.813', 1, (select c_id from cos_admin_tenant_info where c_code = 'sys'), (select c_id from cos_admin_account_info  where c_tenant_id = (select c_id from cos_admin_tenant_info where c_code = 'sys') and c_login_name = 'sys_sg_manage_admin'), (select c_id  from cos_admin_site_info where c_code = 'sys_sg_manage'), NULL);
--将管理平台账号关联站群
update cos_admin_account_tenant set c_site_group_id = (select c_id from cos_admin_site_group_info where c_code ='sys_sg') where c_tenant_id = (select c_id from cos_admin_tenant_info where c_code = 'sys');
--将平台租户下的站点关联进站群
update cos_admin_site_info set c_site_group_id = (select c_id from cos_admin_site_group_info where c_code = 'sys_sg'),c_site_group_code = 'sys_sg' where c_tenant_code = 'sys';
-- 将平台租户下的角色关联到平台站群
update cos_admin_role_info set c_site_group_id = (select c_id from cos_admin_site_group_info where c_code = 'sys_sg') where c_tenant_id = (select c_id from cos_admin_tenant_info where c_code = 'sys');
-- 清理平台站点初始化菜单数据,以便上架后的应用菜单能出来
delete from cos_admin_init_menu where c_site_id = (select c_id from cos_admin_site_info where c_code = 'sys')
  • 3、mas-task服务连的库中执行:
sql
ALTER TABLE "cos_quartz_job"
ADD COLUMN "c_job_params" varchar(4000),
ADD COLUMN "c_method_url" varchar(2000);
  • 4、先执行locas升级文档中【2.4升级至2.7.33】升级步骤,【服务和应用使用2.7.48里的】

  • 5、MAS、LOCAS平台服务未更新前在系统中先将应用:mas-ops-app、mas-ops-tenant、mas-ops-site、mas-ops-sitegroup、mas-explorer、lc-sm2、lc-syscachemng【缓存清理】、lc-userpwdlogin(pc登录)、mas-admin-role、mas-admin-account、mas-admin-menu、mas-admin-site上架

  • 6、上架完后在mas-admin服务连的库中执行:

sql
-----------------------------------------------------------------------------------
 -- 低代码fbp开发的应用如果有DSC配置,在应用初始化进去后需要将配置数据初始化进去,否则运行报错
 -----------------------------------------------------------------------------------
-- lc-userpwdlogin 登录应用
update cos_portal_component SET c_setting = '[{"code":"datasource","name":"数据源配置","config":[{"catalog":"1","tenantId":3,"project":"userpwdlogin","id":143,"type":"1","value":"mas","version":"v1.0.0","key":"ds1","desc":"mas平台"},{"catalog":"1","tenantId":3,"project":"userpwdlogin","id":135,"type":"1","value":"locas","version":"v1.0.0","key":"ds2","desc":"FBP平台"}]},{"code":"cache","name":"缓存配置","config":[{"catalog":"2","tenantId":3,"project":"userpwdlogin","id":160,"type":"1","value":"sys_cache_locas","version":"v1.0.0","key":"ch1","desc":"系统缓存"}]}]' WHERE c_code = 'lc-userpwdlogin';
-- lc-syscachemng 缓存应用
update cos_portal_component SET c_setting = '[{"code":"datasource","name":"数据源配置","config":[{"catalog":"1","tenantId":3,"project":"syscachemng","id":148,"type":"1","value":"mas","version":"v1.0.0","key":"ds1","desc":"mas平台数据源"}]},{"code":"cache","name":"缓存配置","config":[{"catalog":"2","tenantId":3,"project":"syscachemng","id":149,"type":"1","value":"sys_cache_locas","version":"v1.0.0","key":"ch1","desc":"系统缓存"}]}]' WHERE c_code = 'lc-syscachemng';
  • 7、如果mas-nginx里的配置是挂载并且使用了njs【如:oss签名】的需要调整

引入njs文件文件名不支持中横线 引用方式调整,待使用的方法需要在njs文件里先导出,再在nginx配置文件里导入 getGMTtime函数逻辑调整

njs文件导出方法示例:

js
/*
  创建待签名字符串
  此方法为简化版,仅处理不带url参数的oss资源地址,其他情况可结合oss文档 + ali-oss sdk 文件内signUtil模块内的buildCanonicalString方法做修改
*/
function buildCanonicalString (method, resourcePath, date) {
  var signContent = [method.toUpperCase(), '', '', date, resourcePath]
  return signContent.join('\n')
}
/* 计算签名字符串 */
function computeSignature (accessKeySecret, canonicalString) {
  var signature = require('crypto').createHmac('sha1', accessKeySecret)
  return signature.update(canonicalString.toUTF8()).digest('base64')
}
/* 生成完整认证字符串 */
function authorization (accessKeyId, accessKeySecret, canonicalString) {
  return 'OSS ' + accessKeyId + ':' + computeSignature(accessKeySecret, canonicalString)
}
/* oss签名配置数据,换成你自己的PAM账号的AK和bucket */
var ossAccess = {
  accessKeyId: 'xxxx',
  accessKeySecret: 'xxxx',
  bucket: 'foa5-wh96',
  rootDir: ''
}
var GMTdate = '';
/* 返回oss header date字符串 */
function getGMTtime (r) {
  var currentDate = new Date();
  var currentDateUTCStr = currentDate.toUTCString();
  var dateStrs = currentDateUTCStr.split(" ");
  var result = dateStrs[0] + " " + dateStrs[1] + " " + dateStrs[2] + " " + dateStrs[3] + " " + dateStrs[4] + " GMT";
  GMTdate = result;
  return GMTdate
}
/* 返回oss header authorization字符串 */
function ossSign (r) {
  var method = r.method
  var path = '/' + ossAccess.bucket
  if(ossAccess.rootDir== ''){
     path = path + r.uri
  }else{
     path = path + '/' + ossAccess.rootDir + r.uri
  }
  var canonicalString = buildCanonicalString(method, path, GMTdate)
  var result = authorization(ossAccess.accessKeyId, ossAccess.accessKeySecret, canonicalString)
  r.log(result)
  return result
}


export default {
  getGMTtime,ossSign
};

nginx配置文件引入njs, 并使用示例:

js
http {
  js_import ossObj from njs/oss_sign.js;
  js_set $ossDate ossObj.getGMTtime;
  js_set $ossAuth ossObj.ossSign;
  • 8、调整nginx里对websocket的代理,将原来代理到rabbitmq服务的调整到代理到fbp服务【业务上通过mas-mq推送消息的代码需调整采用fbp服务来推送,查看调整说明】,示例如下:
js
location /ws {
            proxy_pass http://fbp:80;
            proxy_http_version 1.1;
            proxy_set_header Upgrade websocket;
            proxy_set_header Connection upgrade;
    }
  • 9、调整mas-gateway服务里的redis配置,需与locas-service服务和locas-fbp服务的系统缓存(初始化redis服务记录)连的redis一致

  • 10、需新部署locas-fbp服务;注意调整locas-fbp服务的配置:如果平台应用是本地存储,需在mas-nginx里新增挂载,将平台应用目录apps整体挂载到fbp服务的apps目录,如: - /data/softs/mas/apps:/Mas-FBP-Server/data/apps;如果是oss存储,需将oss.root.dir指向平台应用存储目录apps

【容器部署时,profile指向docker:需添加环境变量:boot.version 值为:1.0.0】

  • 11、mas平台这边可以移除mas-auth、mas-mq服务

  • 12、升级后台服务

  • 13、服务全部升级后,在mas-admin连的库中执行:

sql
-- 将5个新应用授权给平台租户sys
insert into cos_portal_component_grant(c_tenant_id,c_app_code) values((select c_id from cos_admin_tenant_info where c_code = 'sys'),'mas-explorer');
insert into cos_portal_component_grant(c_tenant_id,c_app_code) values((select c_id from cos_admin_tenant_info where c_code = 'sys'),'lc-sm2');
insert into cos_portal_component_grant(c_tenant_id,c_app_code) values((select c_id from cos_admin_tenant_info where c_code = 'sys'),'lc-syscachemng');
insert into cos_portal_component_grant(c_tenant_id,c_app_code) values((select c_id from cos_admin_tenant_info where c_code = 'sys'),'lc-userpwdlogin');
insert into cos_portal_component_grant(c_tenant_id,c_app_code) values((select c_id from cos_admin_tenant_info where c_code = 'sys'),'mas-ops-sitegroup');

-- 将应用授权给给sys站点
insert into cos_site_component_grant(c_tenant_id,c_site_id,c_app_code) values((select c_id from cos_admin_tenant_info where c_code = 'sys'),(select c_id from cos_admin_site_info where c_code = 'sys'),'mas-explorer');
insert into cos_site_component_grant(c_tenant_id,c_site_id,c_app_code) values((select c_id from cos_admin_tenant_info where c_code = 'sys'),(select c_id from cos_admin_site_info where c_code = 'sys'),'lc-userpwdlogin');
insert into cos_site_component_grant(c_tenant_id,c_site_id,c_app_code) values((select c_id from cos_admin_tenant_info where c_code = 'sys'),(select c_id from cos_admin_site_info where c_code = 'sys'),'lc-sm2');
insert into cos_site_component_grant(c_tenant_id,c_site_id,c_app_code) values((select c_id from cos_admin_tenant_info where c_code = 'sys'),(select c_id from cos_admin_site_info where c_code = 'sys'),'mas-ops-sitegroup');
insert into cos_site_component_grant(c_tenant_id,c_site_id,c_app_code) values((select c_id from cos_admin_tenant_info where c_code = 'sys'),(select c_id from cos_admin_site_info where c_code = 'sys'),'lc-syscachemng');
  • 14、平台管理员登录进入应用上架模块,将mas-ops-app、mas-ops-site、mas-ops-tenant三个应用发布到最新版本;mas-admin-role、mas-admin-account、mas-admin-site、mas-admin-menu发布到最新版本后退出重新登录

  • 15、上架其它应用并发布版本

    TIP

    fbp开发的应用上架后需要进行DSC设置 如:lc-syscachemng、lc-userpwdlogin、lc-fbppdsm、lc-pcache、lc-pstorage、lc-fbpsso、lc-qrlogin、lc-switchsf、lc-unlocklogin、lc-usernamelogin、lc-ythlogin、lc-zzdlogin、lc-project-workspace

  • 16、进入租户管理菜单,找到系统租户(sys),点击“应用授权”确保应用lc-sm2、lc-syscachemng、lc-userpwdlogin、locas、locar、mas-admin-role、mas-admin-account、mas-admin-site、mas-admin-menu、mas-ops-app、mas-ops-site、mas-ops-tenant、mas-ops-sitegroup、mas-explorer、lc-fbppdsm、lc-pcache、lc-pstorage都授权到sys租户下

  • 17、进入站群管理菜单,找到系统站群(sys_sg),点击“站点管理”分别对sys【平台业务站点】、sys_sg_manage【平台管理站点】两个站点进行应用授权

sys站点:mas-explorer、lc-sm2、lc-userpwdlogin、locas、locar、mas-ops-app、mas-ops-site、mas-ops-tenant、mas-ops-sitegroup、lc-fbppdsm、lc-pcache、lc-pstorage、lc-syscachemng sys_sg_manage站点:mas-explorer、lc-sm2、lc-userpwdlogin、locas、locar、mas-ops-site、mas-admin-role、mas-admin-account、mas-admin-site、mas-admin-menu

  • 17、登录平台管理站点:http://ip:port/sys/sys_sg_manage【登录账号:sys_sg_manage_admin】可以对sys、sys_sg_manage站点的菜单、站点设置进行调整

  • 18、将lc-updatesitegroup应用上架【获取地址:oss://foa5-oss/deploy/files/lc-updatesitegroup-v1.0.0.9.tgz】,并授权给平台管理站点,用该应用将平台站点升级成站群结构;【升级后原租户下的站点都归集为一个站群并有一个管理站点,对站点的菜单、站点设置、账号等的管理操作将在站群里的管理站点上操作】

  • 19、其它租户升级成站群模式后,每个租户和站点都必须授权mas-explorer、lc-sm2、lc-userpwdlogin、locas、locar这些应用才能登录

websocket消息业务代码调整

后台服务: fbp提供了WebsocketTask用户配置发送消息服务;也提供了一个发送消息的接口,接口地址:http://fbp:80/app/boot/1.0.0/sendWebsocketMsg mas平台其它服务中调用fbp提供的接口发消息示例:

java
HttpHeaders headers = new HttpHeaders();
        //与fbp服务需application/json方式交互
        headers.setContentType(MediaType.APPLICATION_JSON);

        //接口认证所需参数
        headers.add("sessionId", globalContext.getSessionId());
        headers.add("KEY_CURRENT_TENANT_ID",  String.valueOf(globalContext.getCurrentTenantId()));
        headers.add("KEY_CURRENT_TENANT_CODE", globalContext.getCurrentTenantCode());
        headers.add("KEY_CURRENT_SITE_ID", String.valueOf(globalContext.getCurrentSiteId()));
        headers.add("KEY_CURRENT_SITE_CODE", globalContext.getCurrentSiteCode());

        //需要发送的业务数据对象
        Map<String,Object> bizData = new HashMap<>();
        bizData.put("name","张三");
        bizData.put("age",18);

        //websocket发送消息对象
        Map<String,Object> msgObj = new HashMap<>();
        msgObj.put("type","foa_gw"); //消息标识
        msgObj.put("mData",bizData); //消息内容

        String params = JsonUtils.toJson(msgObj);
        HttpEntity entity = new HttpEntity<>(params,headers);

        restTemplate.postForEntity("http://192.168.1.182:80/app/boot/1.0.0/sendWebsocketMsg", entity, String.class);

前台页面:通过事件监听获取后台推送的消息,监听的事件为后台服务传递的type值

js
created(){
    this.$eventbus.$on("foa_gw", (msg)=>{
      //msg对像有type和data数据,data对应业务数据
      console.log('msg=====:',msg)
    });
  }

5.13.20升级至5.13.25

  • 1、将oss://foa5-oss/deploy/fbp-boot/5.13.25/下的boot应用覆盖环境里apps里的boot文件

初始化安装

  • mas平台polardb数据库环境全新安装脚本获取地址:oss://foa5-oss/deploy/mas-polardb-sqls/5.13.13/

注意:

  • mas平台已经与locas相互融合了,执行初始化脚本要注意看脚本中的注释内容

内部资料,请勿外传