UniMax 项目升级版本 V4.5 -> V5.0
Tips: 此为 V4.5 升级到 V5.0 的操作记录,仅供参考。现在最新的产品版本请咨询技术中心(不确定是否为 V5.1.3)。
文档:UniMaxFPS 平台版本升级记录(v4-v5)….
Epichust-UniMaxFPS 版本升级记录(V4.5 -> V5.0)
–@ acted by yuanbao at 20210301
1 背景
UniMaxFPS 产品是在 UniMax V4.5 基础上根据排程业务做的一版产品,已有部分功能。
波总提出要升级依赖到 5.0。
调整的目标依赖平台和产品版本分别为:
- 平台版本:4.0.3.19
- 产品版本:5.0.0.3-SNAPSHOT
代码地址:
- 后端代码:https://svn.epichust.com:6143/svn/UniMaxFPS/trunk/UniMaxFPS
- 前端代码:http://61.183.71.118:8188/r/project/web/UniMaxFPS-web.git
数据库:
- 开发 UNIMAX4_FPS_DEV/UNIMAX4_FPS_DEV@61.183.71.118:1522/orcl
- 测试 UNIMAX4_FPS/UNIMAX4_FPS@61.183.71.118:1522/orcl
2 后端调整步骤
2.1 改 POM 文件
调整 pom 中对平台、产品的依赖的版本,有些依赖以 V5 的为准,UniMaxFPS 中有两个自身的工具依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.1</version>
</dependency>
tips:注意不要重复依赖。
附 pom 文件: pom.xml
2.2 更新下载依赖包后拷贝
maven clean
maven install
tips:由于加密系统,本人是使用虚拟机里的 maven/svn 进行镜像文件、代码的同步。同步后,需要将相关内容拷贝至虚拟机以外的本地磁盘中,注意主要拷贝 com/epichust/ 下的 UniMax-A 和 mestarl 两个文件夹下对应版本的文件夹拷贝至本地,不要弄错文件夹,不要有遗漏。
另外,拷贝前最好对文件夹进行一次解密申请,避免拷贝的是加密的 war 包文件等。(已踩坑)
2.3 拷贝 WEN-INF/ 下的 web.xml 和 jar 包
拷贝 web.xml 文件替换,修改其中关于项目名称的内容。
拷贝 lib/ 下的低代码工具 jar 包。
2.4 修改 applicationContext-security.xml 文件
平台登录跳转拦截验证改为 token 方式,需要修改之前的设置,否则 vue 前端登录无法获取对应格式的响应。
做法:拷贝 V5 中的 applicationContext-security.xml 文件替换。
附该 xml 文件:applicationContext-security.xml
2.5 redis 相关设置
之前的操作,已经可以实现 maven 成功打出 war 包。
启动服务时,报错:
redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out
解决:
把依赖包中的 spring-jedis.xml 文件拷贝到项目的 spring/ 下,查看 xml 文件内容决定是否要设置密码。注释掉即不设置密码
修改本地的 redis.properties 配置文件,根据是否要密码决定是否保留 redis.pass=123456 这一行,增加 redis.testWhileIdle=true 等变量(建议直接拷贝文件内容)。然后启动对应版本(是否带密码)的 redis。
附文件:spring-jedis.xml | redis.properties
tips:到此,个人建议重启一次电脑,防止 IDEA 相关设置导致 maven 依赖问题。(自己踩坑,依赖 v5,服务也确实启动成功了,然而部分服务没有走 v5 的,也有可能是 tomcat 设置问题。)
2.6 数据库调整
1> activiti 版本升级,4.5 产品的 activiti 为 5.15.1,v5.0 的为 5.22.0.0
2> 菜单表增加字段 menu_type_flag
脚本如下:
-- Add/modify columns
alter table MTS_MENU add menu_type_flag VARCHAR2(32);
-- Add comments to the columns
comment on column MTS_MENU.menu_type_flag
is '菜单标识(区分产品/项目)';
3 前端 VUE
3.1 修改.babelrc 文件
注释掉其中 modules:false 这一行。前端项目可正常启动。nginx 配置启动参考另一个笔记。
附 nginx 配置文件:nginx-fps.conf | 1-nginx_start- 启动 Nginx - fps.bat
3.2 基础:挂菜单,三个基础菜单的导入
分别是:用户管理、菜单定义、角色管理
insert into MTS_MENU (GID, NAME, TARGET, REL, IS_RELOAD, IS_EXPAND, IS_EXTERNAL, HREF, SEQUENCE, WIDTH, HEIGHT, PARENT_ID, TRANSACTION_CODE, TRANSACTION_CODE_DESC, EXTENDED_FIELD1, EXTENDED_FIELD2, CREATE_DATE, CREATE_ID, MODIFY_DATE, MODIFY_ID, LV, SYSTEM_FLAG, IS_DELETE, IS_ACTIVE, DELETED, DATA_ROLE, DATA_ROLE1, DATA_ROLE2, UDA1C, UDA1N, UDA2C, UDA2N, UDA3C, UDA3N, UDA4C, UDA4N, UDA5C, UDA5N, UDA1, UDA2, UDA3, UDA4, UDA5, MENU_TYPE_FLAG)
values ('402883fa422cc13701422ce35be3yb01', '用户管理vue', 'navTab', 'pmbbUser', 'true', 'false', 'true', 'umasysmanage/requestControl/pmbbUser', 1, 800, 480, '4028b8813a4991fe013a49cb313b0011', null, null, 'taglib-ui-desktop-icon-usermanagement', null, to_date('04-03-2021 14:09:27', 'dd-mm-yyyy hh24:mi:ss'), 'yuanbao', to_date('04-03-2021 14:09:27', 'dd-mm-yyyy hh24:mi:ss'), 'yuanbao', 2, 'SYSTEM', 0, 0, null, '-1', '-1', '0', null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
insert into MTS_MENU (GID, NAME, TARGET, REL, IS_RELOAD, IS_EXPAND, IS_EXTERNAL, HREF, SEQUENCE, WIDTH, HEIGHT, PARENT_ID, TRANSACTION_CODE, TRANSACTION_CODE_DESC, EXTENDED_FIELD1, EXTENDED_FIELD2, CREATE_DATE, CREATE_ID, MODIFY_DATE, MODIFY_ID, LV, SYSTEM_FLAG, IS_DELETE, IS_ACTIVE, DELETED, DATA_ROLE, DATA_ROLE1, DATA_ROLE2, UDA1C, UDA1N, UDA2C, UDA2N, UDA3C, UDA3N, UDA4C, UDA4N, UDA5C, UDA5N, UDA1, UDA2, UDA3, UDA4, UDA5, MENU_TYPE_FLAG)
values ('402883fa422cc13701422ce35be3yb03', '角色管理vue', 'navTab', 'role', 'true', 'false', 'true', 'umasysmanage/requestControl/role', 1, 800, 480, '4028b8813a4991fe013a49cb313b0011', null, null, 'taglib-ui-desktop-icon-usermanagement', null, to_date('04-03-2021 14:09:27', 'dd-mm-yyyy hh24:mi:ss'), 'yuanbao', to_date('04-03-2021 14:09:27', 'dd-mm-yyyy hh24:mi:ss'), 'yuanbao', 2, 'SYSTEM', 0, 0, null, '-1', '-1', '0', null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
insert into MTS_MENU (GID, NAME, TARGET, REL, IS_RELOAD, IS_EXPAND, IS_EXTERNAL, HREF, SEQUENCE, WIDTH, HEIGHT, PARENT_ID, TRANSACTION_CODE, TRANSACTION_CODE_DESC, EXTENDED_FIELD1, EXTENDED_FIELD2, CREATE_DATE, CREATE_ID, MODIFY_DATE, MODIFY_ID, LV, SYSTEM_FLAG, IS_DELETE, IS_ACTIVE, DELETED, DATA_ROLE, DATA_ROLE1, DATA_ROLE2, UDA1C, UDA1N, UDA2C, UDA2N, UDA3C, UDA3N, UDA4C, UDA4N, UDA5C, UDA5N, UDA1, UDA2, UDA3, UDA4, UDA5, MENU_TYPE_FLAG)
values ('402883fa422cc13701422ce35be3yb02', '菜单定义vue', 'navTab', 'menu', 'true', 'false', 'true', 'umasysmanage/menuSettings/menu', 1, 800, 480, '4028b8813a4991fe013a49cb313b0011', null, null, 'taglib-ui-desktop-icon-usermanagement', null, to_date('04-03-2021 14:09:27', 'dd-mm-yyyy hh24:mi:ss'), 'yuanbao', to_date('04-03-2021 14:09:27', 'dd-mm-yyyy hh24:mi:ss'), 'yuanbao', 2, 'SYSTEM', 0, 0, null, '-1', '-1', '0', null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
菜单绑定角色:
insert into MTS_ROLE_MENU (MENU_ID, ROLE_ID)
values ('402883fa422cc13701422ce35be3yb01', '4028b8813cfa74c5013cfaa4c27f0005');
insert into MTS_ROLE_MENU (MENU_ID, ROLE_ID)
values ('402883fa422cc13701422ce35be3yb02', '4028b8813cfa74c5013cfaa4c27f0005');
insert into MTS_ROLE_MENU (MENU_ID, ROLE_ID)
values ('402883fa422cc13701422ce35be3yb03', '4028b8813cfa74c5013cfaa4c27f0005');
数据维护后,需要清理浏览器的缓存
方式 :F12 -> Application ->Storage 下 清理 local storage 和 session storage 的缓存。
3.3 操作权限问题
要求:权限表新增一条数据名称为 SYSTEM_ADMIN
** 原因:** 前端操作更改调用接口如果是 sys* 的,要求有这个权限,否则操作无效。
垂直越权的限制
解决:
- MTS_AUTHORITY 表插入一条名称为 SYSTEM_ADMIN 的数据
- MTS_ROLE_AUTHORITY 表插入一条数据,绑定 SYSTEM_ADMIN 的角色编码和 SYSTEM_ADMIN 的权限。
sql 脚本如下:
insert into MTS_AUTHORITY (GID, NAME, RESOURCE_ID, TYPE, CREATE_DATE, CREATE_ID, MODIFY_DATE, MODIFY_ID, IS_DELETE, IS_ACTIVE, DELETED, DATA_ROLE, DATA_ROLE1, DATA_ROLE2, UDA1C, UDA1N, UDA2C, UDA2N, UDA3C, UDA3N, UDA4C, UDA4N, UDA5C, UDA5N, UDA1, UDA2, UDA3, UDA4, UDA5)
values ('4028b8813cfa74c5013cfa89e4440001', 'SYSTEM_ADMIN', null, null, to_date('18-10-2012 13:00:00', 'dd-mm-yyyy hh24:mi:ss'), 'root', to_date('18-10-2012 13:00:00', 'dd-mm-yyyy hh24:mi:ss'), 'root', 0, 0, null, '-1', '-1', '0', null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
insert into MTS_ROLE_AUTHORITY (ROLE_ID, AUTHORITY_ID)
values ('4028b8813cfa74c5013cfaa423b00004', '4028b8813cfa74c5013cfa89e4440001');
踩坑:
IDEA 有关:
此前已有 V4,我是复制了整个文件夹后命名为 UniMaxFPS-V5。
坑 1:后台服务启动后,前端调用后台服务,服务返回请求结果不对。
原因:依赖问题,仍然依赖的是 V4.5,不能成功依赖 V5.0,有些服务没有按 5.0 的方式走,需要删除相关配置,重新更新依赖。
坑 2:后台在依赖产品中设置断点如 homeController.class 中,断点调试无法进入断点。
原因:发现依赖的包中该类应该被解压放到 overlays 文件夹中,而此时该文件夹为空,取的 class 类为外部库 External Libraries 中的,这样导致的问题。
尝试解决:关闭 IDEA 删除项目文件下.idea、overlays、target 文件夹和.iml 文件,启动 IDEA 重新构建,maven 更新。
还是不能到这些 class 类的断点处,可到断点的方法上。其他类断点正常。