Appearance
MAS 模块化应用支撑平台
MAS是一个模块化的应用支撑平台,采用微服务和微应用架构,支持多租户、多站点、模块化开发和积木式搭建。基于该平台,可以快速开发各类业务微应用,通过组合微应用来搭建支持多租户和多站点的业务系统。它能够实现租户独立的、可个性化的各类业务系统(站点),并且支持全代码和低代码的开发方式。
功能范围
序号 | 子平台 | 说明 |
---|---|---|
1 | 平台管理中心 | 管理租户、站点、应用等 |
2 | 站点管理中心 | 实现一个站点的基本管理功能,包括菜单、主题及基本信息管理 |
3 | 帐户中心 | 实现站点账号管理、认证和角色授权 |
4 | MAUI开发框架 | 前端微应用开发框架,支持对前端内核扩展及业务的模块化开发 |
5 | 微服务开发框架 | 后端微服务开发框架,基于Spring Cloud Alibaba架构实现微服务的模块化开发 |
版本
v5.9
更新内容
此版本主要更新内容如下:
新增
- 打印功能。开发教程:点击进入
- 外部应用访问(API开放)
- 标签化路由,处理开发或试点应用对服务的特殊路由需求。使用说明:点击进入
- 移动端移动站点账号密码登录功能
- PAD、手机APP启动容器
- 管理平台操作日志
- 提供默认大屏主题
- 账号去掉手机号校验,核对接口中是否有账号的规则校验、重复校验等机制
- 应用上架调整成锚点方式分类;
- 应用授权调整为直接授权到站点(后台逻辑保留原功能)
- sso单点登录菜单标识去掉时间戳生产唯一,调整成固定规则生成,保证切换环境页面跳转正常
- mas平台内租户间、站点间单点登录(以账号表的c_login_dingding的值一致为基准,视为同一身份,浙政钉场景下值对应浙政钉uid)
- 支持第三方应用对接(需要部署mas-open-gateway服务)。快速开始:点击进入
修改
- 跨租户站点访问问题,会话干扰问题、访问地址问题
- 其他bug处理
优化
- 全局错误信息没有处理,出错后无任何提示
补丁
无
微服务版本明细
序号 | 模块 | 微服务 | 版本号 | 说明 |
---|---|---|---|---|
基础设施 | ||||
1 | Nacos服务 | nacos/nacos-server | 2.0.3 | |
2 | Redis | redis | 6.2.6-alpine3.15 | |
3 | RabbitMQ | byteflair/rabbitmq-stomp | latest | 可选 |
平台基础 | ||||
4 | 前端基座 | mas-nginx | 5.9.15 | 原foa5-nginx |
5 | 网关服务 | mas-gateway | 5.9.17 | 原foa-cloud-gateway |
6 | 站点系统管理 | mas-admin | 5.9.17 | 原foa-cloud-admin |
7 | 鉴权服务 | mas-auth | 5.9.17 | 原foa-cloud-auth |
8 | 文件服务 | mas-file | 5.9.17 | 原foa-cloud-file |
扩展服务 | ||||
9 | 单点登录 | mas-sso | 5.9.17 | 可选,原foa-cloud-sso-cos |
10 | MQ服务 | mas-mq | 5.9.17 | 可选,原foa-cloud-mq |
11 | 定时任务 | mas-task | 5.9.17 | 可选,原foa-cloud-task |
12 | 在线WPS | mas-wps | 5.9.17 | 可选,原foa-cloud-wps |
13 | 浙政钉网关 | mas-dingtalk | 5.9.17 | 可选,原cos-api-gateway |
如何获取微服务镜像?
所有镜像可到容器仓库通过 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.9.17/mas-admin-5.9.17.jar
微应用版本明细
序号 | 模块 | 微应用 | 版本号 | 说明 |
---|---|---|---|---|
管理平台 | ||||
1 | 应用市场 | mas-ops-app | 5.9.5 | |
2 | 租户管理 | mas-ops-tenant | 5.9.5 | |
3 | 站点管理 | mas-ops-site | 5.9.5 | |
站点系统管理 | ||||
1 | 账号管理 | mas-admin-account | 5.9.5 | 可替换 |
2 | 角色管理 | mas-admin-role | 5.9.5 | 可替换 |
3 | 单点登录 | mas-admin-sso | 5.9.5 | 可选,对应mas-sso |
4 | 菜单初始化 | mas-admin-menu | 5.9.5 | |
5 | 参数管理 | mas-admin-param | 5.9.5 | 可选 |
6 | 数据字典 | mas-admin-dictionary | 5.9.5 | 可选 |
7 | 数据分类 | mas-admin-catalog | 5.9.5 | 可选 |
8 | 操作日志 | mas-admin-log | 5.9.5 | 可选 |
9 | 在线用户 | mas-admin-online | 5.9.5 | 可选 |
10 | 站点设置 | mas-admin-site | 5.9.5 | |
主题 | ||||
1 | 清新绿(横向) | theme-horizontal-green | 5.9.15 | 可选 |
2 | 中国红(横向) | theme-horizontal-red | 5.9.15 | 可选 |
3 | 政务蓝(纵向) | theme-vertical-blue | 5.9.15 | 可选 |
4 | 清新绿(纵向) | theme-vertical-green | 5.9.15 | 可选 |
5 | 中国红(纵向) | theme-vertical-red | 5.9.15 | 可选 |
6 | 蓝色综合 | theme-multiple-blue | 5.9.15 | 可选 |
7 | 蓝色分栏 | theme-subfield-blue | 5.9.15 | 可选 |
8 | 大屏主题 | theme-fullscreen | 5.9.15 | 可选 |
9 | 移动账号密码主题 | theme-mobile-default | 5.9.15 | 可选 |
扩展功能 | ||||
1 | 工作门户 | mas-panel | 5.9.15 | 可选 |
2 | 打印模块 | mas-printer | 5.9.15 | 可选 |
3 | 页面调试器 | mas-ops-vconsole | 5.9.5 | 可选,用于移动端调试 |
可选的微应用,没有特殊说明的,对应的微服务均为必选微服务或无需对应服务
如何获取应用tgz安装包?
所有安装包可到阿里云OSS仓库下载
- 路径:
oss://foa5-oss/deploy/[平台:mas/locas]/[应用名称]/[版本号]/[应用名称]-[版本号].tgz
如:oss://foa5-oss/deploy/mas/mas-panel/5.9.15/mas-panel-5.9.15.tgz
浙政钉代理(IRS托管需要)
序号 | 模块 | 微应用 | 版本号 | 说明 |
---|---|---|---|---|
1 | 代理 | mas-ui-dingtalk | 5.8.2 | 可选 |
5.8升级至5.9
说明
升级的过程中请注意:按步骤执行,每步执行成功才执行后续步骤
按如下步骤执行
1、在主库执行:
sql
select * from cos_basicdata_catalog where c_site_id = 1 and c_root_key = 'DIC_TYPE';
2、如果上面查询没数据,在主库执行:
sql
INSERT INTO cos_basicdata_catalog(c_tenant_id,c_site_id,c_text,c_cascade_id,c_root_name,c_root_key,c_status,c_type,c_value) VALUES ( 1,1,'系统类','/', '数据字典分类科目', 'DIC_TYPE', 1,'','');
3、在主库执行:
sql
INSERT INTO cos_basicdata_dictionary(c_tenant_id,c_site_id,c_name,c_key,c_remark,c_catalog_id,c_catalog_cascade_id) VALUES ( 1,1,'应用分类', 'appCategory','应用分类',(select c_id from cos_basicdata_catalog where c_site_id = 1 and c_root_key = 'DIC_TYPE'), ('/' || (select c_id from cos_basicdata_catalog where c_site_id = 1 and c_root_key = 'DIC_TYPE') || '/'));
4、在主库执行:【如果需要添加分类可以参照如下sql编写,也可以在系统管理-数据字典里进行界面操作来维护】
sql
INSERT INTO cos_basicdata_dictionary_item(c_site_id,c_tenant_id,c_dic_key,c_code,c_value,c_sort_number) VALUES (1,1, 'appCategory', '1','系统管理',1);
INSERT INTO cos_basicdata_dictionary_item(c_site_id,c_tenant_id,c_dic_key,c_code,c_value,c_sort_number) VALUES (1,1, 'appCategory', '2','低代码',2);
INSERT INTO cos_basicdata_dictionary_item(c_site_id,c_tenant_id,c_dic_key,c_code,c_value,c_sort_number) VALUES (1,1, 'appCategory', '3','财政应用',3);
INSERT INTO cos_basicdata_dictionary_item(c_site_id,c_tenant_id,c_dic_key,c_code,c_value,c_sort_number) VALUES (1,1, 'appCategory', '4','主题应用',4);
INSERT INTO cos_basicdata_dictionary_item(c_site_id,c_tenant_id,c_dic_key,c_code,c_value,c_sort_number) VALUES (1,1, 'appCategory', '5','其他',5);
5、在主库执行:
sql
delete from t_app_catalog_mapping where c_id in (select max(c_id) from t_app_catalog_mapping where c_app_code in (select c_app_code from
(select c_app_code , count(c_id) as num from t_app_catalog_mapping group by c_app_code) where num > 1) group by c_app_code);
6、在主库执行
sql
DROP TABLE IF EXISTS "cos_admin_open_api";
CREATE TABLE "cos_admin_open_api" (
"c_id" serial8 NOT NULL,
"c_last_modifier" int8,
"c_last_modify_time" timestamp(6),
"c_creator" varchar(50) COLLATE "pg_catalog"."default",
"c_create_time" timestamp(6),
"c_sort_number" int4,
"c_tenant_id" int8,
"c_module_name" varchar(255) COLLATE "pg_catalog"."default",
"c_name" varchar(255) COLLATE "pg_catalog"."default",
"c_path" varchar(255) COLLATE "pg_catalog"."default",
"c_description" varchar(255) COLLATE "pg_catalog"."default",
CONSTRAINT "cos_admin_open_api_pkey" PRIMARY KEY ("c_id")
)WITH (OIDS=TRUE);
COMMENT ON COLUMN "cos_admin_open_api"."c_id" IS '主键';
COMMENT ON COLUMN "cos_admin_open_api"."c_last_modifier" IS '修改人';
COMMENT ON COLUMN "cos_admin_open_api"."c_last_modify_time" IS '修改时间';
COMMENT ON COLUMN "cos_admin_open_api"."c_creator" IS '创建人';
COMMENT ON COLUMN "cos_admin_open_api"."c_create_time" IS '创建时间';
COMMENT ON COLUMN "cos_admin_open_api"."c_sort_number" IS '排序号';
COMMENT ON COLUMN "cos_admin_open_api"."c_tenant_id" IS '租户ID';
COMMENT ON COLUMN "cos_admin_open_api"."c_module_name" IS '模块名';
COMMENT ON COLUMN "cos_admin_open_api"."c_name" IS '名称';
COMMENT ON COLUMN "cos_admin_open_api"."c_path" IS '请求地址';
COMMENT ON COLUMN "cos_admin_open_api"."c_description" IS '描述';
insert into cos_admin_open_api (c_module_name,c_name,c_path,c_description) values('系统管理', '新增账号','/mas-admin/open/account/saveAccount','新增账号');
insert into cos_admin_open_api (c_module_name,c_name,c_path,c_description) values('系统管理', '修改密码','/mas-admin/open/account/changePwd','修改密码');
insert into cos_admin_open_api (c_module_name,c_name,c_path,c_description) values('系统管理', '解除账号站点关联','/mas-admin/open/account/deleteAccountInfoRel','解除账号站点关联');
insert into cos_admin_open_api (c_module_name,c_name,c_path,c_description) values('系统管理', '新增角色','/mas-admin/open/role/saveRole','新增角色');
insert into cos_admin_open_api (c_module_name,c_name,c_path,c_description) values('系统管理', '角色账号关联','/mas-admin/open/role/saveMapping','角色账号关联');
insert into cos_admin_open_api (c_module_name,c_name,c_path,c_description) values('系统管理', '角色账号取消关联','/mas-admin/open/role/removeMapping','角色账号取消关联');
insert into cos_admin_open_api (c_module_name,c_name,c_path,c_description) values('系统管理', '获取角色列表','/mas-admin/open/role/getRoleList','获取角色列表');
DROP TABLE IF EXISTS "cos_admin_open_gateway_log";
CREATE TABLE "cos_admin_open_gateway_log" (
"c_id" serial8 NOT NULL,
"c_create_time" timestamp(6),
"c_tenant_id" int8,
"c_site_id" int8,
"c_path" varchar(255) COLLATE "pg_catalog"."default",
"c_access_key" varchar(255) COLLATE "pg_catalog"."default",
"c_access_timestamp" varchar(255) COLLATE "pg_catalog"."default",
"c_sign" varchar(2000) COLLATE "pg_catalog"."default",
"c_client_ip" varchar(255) COLLATE "pg_catalog"."default",
"c_user_agent" varchar(255) COLLATE "pg_catalog"."default",
"c_result" bit(1),
"c_result_message" varchar(4000) COLLATE "pg_catalog"."default",
CONSTRAINT "cos_admin_open_gateway_log_pkey" PRIMARY KEY ("c_id")
)WITH (OIDS=TRUE);
COMMENT ON COLUMN "cos_admin_open_gateway_log"."c_id" IS '主键';
COMMENT ON COLUMN "cos_admin_open_gateway_log"."c_create_time" IS '访问时间';
COMMENT ON COLUMN "cos_admin_open_gateway_log"."c_tenant_id" IS '租户id';
COMMENT ON COLUMN "cos_admin_open_gateway_log"."c_site_id" IS '站点id';
COMMENT ON COLUMN "cos_admin_open_gateway_log"."c_path" IS '接口地址';
COMMENT ON COLUMN "cos_admin_open_gateway_log"."c_access_key" IS 'appId';
COMMENT ON COLUMN "cos_admin_open_gateway_log"."c_access_timestamp" IS '认证时间戳';
COMMENT ON COLUMN "cos_admin_open_gateway_log"."c_sign" IS '签名';
COMMENT ON COLUMN "cos_admin_open_gateway_log"."c_client_ip" IS '访问ip';
COMMENT ON COLUMN "cos_admin_open_gateway_log"."c_user_agent" IS '浏览器信息';
COMMENT ON COLUMN "cos_admin_open_gateway_log"."c_result" IS '访问状态';
COMMENT ON COLUMN "cos_admin_open_gateway_log"."c_result_message" IS '错误信息';
DROP TABLE IF EXISTS "cos_admin_third_party_auth";
CREATE TABLE "cos_admin_third_party_auth" (
"c_id" serial8 NOT NULL,
"c_last_modifier" int8,
"c_last_modify_time" timestamp(6),
"c_creator" varchar(50) COLLATE "pg_catalog"."default",
"c_create_time" timestamp(6),
"c_sort_number" int4,
"c_tenant_id" int8,
"c_access_key" varchar(255) COLLATE "pg_catalog"."default",
"c_api_id" varchar(255) COLLATE "pg_catalog"."default",
CONSTRAINT "cos_admin_third_party_auth_pkey" PRIMARY KEY ("c_id")
)WITH (OIDS=TRUE);
COMMENT ON COLUMN "cos_admin_third_party_auth"."c_id" IS '主键';
COMMENT ON COLUMN "cos_admin_third_party_auth"."c_last_modifier" IS '修改人';
COMMENT ON COLUMN "cos_admin_third_party_auth"."c_last_modify_time" IS '修改时间';
COMMENT ON COLUMN "cos_admin_third_party_auth"."c_creator" IS '创建人';
COMMENT ON COLUMN "cos_admin_third_party_auth"."c_create_time" IS '创建时间';
COMMENT ON COLUMN "cos_admin_third_party_auth"."c_sort_number" IS '排序号';
COMMENT ON COLUMN "cos_admin_third_party_auth"."c_tenant_id" IS '租户ID';
COMMENT ON COLUMN "cos_admin_third_party_auth"."c_access_key" IS 'appId';
COMMENT ON COLUMN "cos_admin_third_party_auth"."c_api_id" IS '开放接口id';
DROP TABLE IF EXISTS "cos_admin_third_party_info";
CREATE TABLE "cos_admin_third_party_info" (
"c_id" serial8 NOT NULL,
"c_last_modifier" int8,
"c_last_modify_time" timestamp(6),
"c_creator" varchar(50) COLLATE "pg_catalog"."default",
"c_create_time" timestamp(6),
"c_sort_number" int4,
"c_tenant_id" int8,
"c_site_id" int8,
"c_business_tenant_id" int8,
"c_name" varchar(255) COLLATE "pg_catalog"."default",
"c_description" varchar(255) COLLATE "pg_catalog"."default",
"c_access_key" varchar(255) COLLATE "pg_catalog"."default",
"c_secret_key" varchar(255) COLLATE "pg_catalog"."default",
"c_status" int4,
CONSTRAINT "cos_admin_third_party_info_pkey" PRIMARY KEY ("c_id")
)WITH (OIDS=TRUE);
COMMENT ON COLUMN "cos_admin_third_party_info"."c_id" IS '主键';
COMMENT ON COLUMN "cos_admin_third_party_info"."c_last_modifier" IS '修改人';
COMMENT ON COLUMN "cos_admin_third_party_info"."c_last_modify_time" IS '修改时间';
COMMENT ON COLUMN "cos_admin_third_party_info"."c_creator" IS '创建人';
COMMENT ON COLUMN "cos_admin_third_party_info"."c_create_time" IS '创建时间';
COMMENT ON COLUMN "cos_admin_third_party_info"."c_sort_number" IS '排序号';
COMMENT ON COLUMN "cos_admin_third_party_info"."c_tenant_id" IS '租户ID';
COMMENT ON COLUMN "cos_admin_third_party_info"."c_site_id" IS '站点ID';
COMMENT ON COLUMN "cos_admin_third_party_info"."c_business_tenant_id" IS '租户ID';
COMMENT ON COLUMN "cos_admin_third_party_info"."c_name" IS '接入方名称';
COMMENT ON COLUMN "cos_admin_third_party_info"."c_description" IS '描述';
COMMENT ON COLUMN "cos_admin_third_party_info"."c_access_key" IS 'appId';
COMMENT ON COLUMN "cos_admin_third_party_info"."c_secret_key" IS 'appSecret';
COMMENT ON COLUMN "cos_admin_third_party_info"."c_status" IS '状态 1启用0停用';
初始化安装
- mas平台polardb数据库环境全新安装脚本获取地址:oss://foa5-oss/deploy/mas-polardb-sqls/5.9.x/