9.1 KiB
9.1 KiB
gxzx 服务迁移至 mhzc 方案
一、迁移背景
gxzx(供需大厅/绿色金融/绿色交易/企业入驻)需要合并到 mhzc 服务中,以实现:
- 统一服务治理,减少跨服务调用
- 支撑服务中心的搜索聚合功能
- 简化系统架构
二、迁移范围
2.1 数据库表(9张)
| 序号 | 表名 | 说明 |
|---|---|---|
| 1 | txw_gxzx_gxxxb |
供需信息表 |
| 2 | txw_gxzx_shqkb |
审核情况表 |
| 3 | txw_gxzx_gxscb |
供需收藏表 |
| 4 | txw_gxzx_gxbqb |
供需标签表 |
| 5 | txw_gxzx_qybqb |
企业标签表 |
| 6 | txw_gxzx_rzsqjlb |
入驻申请记录表 |
| 7 | txw_gxzx_lsjrcpxx |
绿色金融产品信息表 |
| 8 | txw_gxzx_dkbxsqxx |
贷款保险申请信息表 |
| 9 | txw_gxzx_lsjy_zcxx |
绿色交易资产信息表 |
2.2 Java代码
| 层次 | 文件数 | 说明 |
|---|---|---|
| Controller | 4 | GxdtController, LsjrController, LsjyController, QyRzController |
| Service接口 | 8 | 含业务接口定义 |
| Service实现 | 7 | 业务逻辑实现 |
| Mapper | 9 | MyBatis Mapper接口 |
| Mapper XML | 9 | MyBatis XML映射文件 |
| Domain | 9 | 数据实体DO |
| VO/Req/Res | ~20 | 传输对象 |
2.3 核心业务功能
- 供需大厅(GxdtController)- 供需发布/审批/上下架/收藏
- 绿色金融(LsjrController)- 信贷/保险产品管理
- 绿色交易(LsjyController)- 资产信息管理
- 企业入驻(QyRzController)- 入驻申请审批
三、迁移步骤
阶段一:数据库迁移
- 备份源库:在迁移前备份
txw-gxzx相关表数据 - 创建目标表:在
mhzc数据库中创建9张表(可保持原表名或重命名) - 数据同步:将数据从
gxzx库同步到mhzc库
-- 示例:在mhzc库执行(假设两库在同一实例)
INSERT INTO mhzc_db.txw_gxzx_gxxxb SELECT * FROM gxzx_db.txw_gxzx_gxxxb;
阶段二:代码迁移
2.1 创建目录结构
在 txw-mhzc 项目中创建以下目录:
txw-mhzc-service-biz/src/main/java/com/css/txw/mhzc/
├── controller/gxzx/ # 原 gxzx/controller
├── service/gxzx/ # 原 gxzx/service
│ └── impl/ # 原 gxzx/service/impl
├── mapper/gxzx/ # 原 gxzx/mapper
├── pojo/domain/gxzx/ # 原 gxzx/pojo/domain
├── pojo/vo/gxzx/ # 原 gxzx/pojo/vo
├── pojo/req/gxzx/ # 新建请求对象
└── pojo/res/gxzx/ # 新建响应对象
2.2 迁移文件清单
Controller 层(4个):
gxzx/controller/GxdtController.java → mhzc/controller/gxzx/GxdtController.java
gxzx/controller/LsjrController.java → mhzc/controller/gxzx/LsjrController.java
gxzx/controller/LsjyController.java → mhzc/controller/gxzx/LsjyController.java
gxzx/controller/QyRzController.java → mhzc/controller/gxzx/QyRzController.java
Service 层(8个接口 + 7个实现):
gxzx/service/TxwGxzxGxxxbService.java → mhzc/service/gxzx/TxwGxzxGxxxbService.java
gxzx/service/TxwGxzxShqkbService.java → mhzc/service/gxzx/TxwGxzxShqkbService.java
gxzx/service/TxwGxzxGxscbService.java → mhzc/service/gxzx/TxwGxzxGxscbService.java
gxzx/service/TxwGxzxGxbqbService.java → mhzc/service/gxzx/TxwGxzxGxbqbService.java
gxzx/service/TxwGxzxQybqbService.java → mhzc/service/gxzx/TxwGxzxQybqbService.java
gxzx/service/TxwGxzxRzsqjlbService.java → mhzc/service/gxzx/TxwGxzxRzsqjlbService.java
gxzx/service/GxzxLsjrService.java → mhzc/service/gxzx/GxzxLsjrService.java
gxzx/service/GxzxLsjyZcxxService.java → mhzc/service/gxzx/GxzxLsjyZcxxService.java
gxzx/service/impl/... → mhzc/service/gxzx/impl/...
Mapper 层(9个):
gxzx/mapper/TxwGxzxGxxxbMapper.java → mhzc/mapper/gxzx/TxwGxzxGxxxbMapper.java
gxzx/mapper/TxwGxzxShqkbMapper.java → mhzc/mapper/gxzx/TxwGxzxShqkbMapper.java
...(其他7个同理)
Domain 层(9个):
gxzx/pojo/domain/TxwGxzxGxxxbDO.java → mhzc/pojo/domain/gxzx/TxwGxzxGxxxbDO.java
...(其他8个同理)
VO/Req/Res 层(~20个):
gxzx/pojo/vo/*.java → mhzc/pojo/vo/gxzx/
gxzx/pojo/req/*.java → mhzc/pojo/req/gxzx/
gxzx/pojo/lsjr/*.java → mhzc/pojo/lsjr/gxzx/
gxzx/pojo/lsjy/*.java → mhzc/pojo/lsjy/gxzx/
Mapper XML(9个):
gxzx/src/main/resources/mapper/*.xml → mhzc/src/main/resources/mapper/gxzx/
2.3 代码修改要点
1. 包名修改
// 原
package com.css.txw.gxzx.controller;
package com.css.txw.gxzx.service;
package com.css.txw.gxzx.mapper;
package com.css.txw.gxzx.pojo.domain;
// 改为
package com.css.txw.mhzc.controller.gxzx;
package com.css.txw.mhzc.service.gxzx;
package com.css.txw.mhzc.mapper.gxzx;
package com.css.txw.mhzc.pojo.domain.gxzx;
2. import 语句修改
// 所有 import com.css.txw.gxzx.* 改为 com.css.txw.mhzc.gxzx.*
3. Controller @RequestMapping 路径调整
// 原
@RequestMapping("/gxdt")
@RequestMapping("/lsjr")
@RequestMapping("/lsjy")
@RequestMapping("/qyrz")
// 保持不变(前端已对接)或调整
4. ServiceImpl 类注解修改
// 原
@Service
public class TxwGxzxGxxxbServiceImpl extends ServiceImpl<TxwGxzxGxxxbMapper, TxwGxzxGxxxbDO>
// 改为
@Service
public class TxwGxzxGxxxbServiceImpl extends ServiceImpl<TxwGxzxGxxxbMapper, TxwGxzxGxxxbDO>
5. MapperScan 配置
在 MhzcServiceConfiguration.java 或新建 GxzxMapperScanConfiguration.java:
@MapperScan({"com.css.txw.mhzc.mapper", "com.css.txw.mhzc.mapper.gxzx"})
阶段三:依赖调整
3.1 移除 gxzx 依赖
从 txw-mhzc/pom.xml 中移除对 txw-gxzx-service-api 的依赖(如果存在)。
3.2 保留必要依赖
确保以下依赖存在:
<!-- 内部框架 -->
<dependency>ggzc-framework-starter-xxzx-api</dependency> <!-- 消息中心 -->
<!-- 数据库 -->
<dependency>DmJdbcDriver18</dependency>
<!-- 内部模块 -->
<dependency>txw-common</dependency>
3.3 处理外部服务调用
IMhzcApi 调用处理(原 gxzx 调用 mhzc):
TxwGxzxRzsqjlbServiceImpl中注入了IMhzcApi- 迁移后改为直接调用本地方法(企业入驻逻辑已在 mhzc 中)
XxzxApi 调用处理:
- 确保
txw-mhzc有消息中心依赖 - 如需迁移,保持调用方式不变
阶段四:配置调整
4.1 网关路由(如有)
如果使用了网关,需要将 gxzx 相关路由从 gxzx 服务指向 mhzc:
# 网关配置
- id: gxzx-route
uri: http://mhzc-service
predicates:
- Path=/gxdt/**
- Path=/lsjr/**
- Path=/lsjy/**
- Path=/qyrz/**
4.2 Nacos 注册
确保 txw-mhzc 注册到 Nacos,且 gxzx 相关接口可访问。
阶段五:前端适配
前端 txw-mhzc-web 中已有 gxzx 相关接口调用(见 fwsc/index.js):
// 当前调用路径(需确认)
/gxzx/gxdt/gxxxList → /mhzc/gxdt/gxxxList 或保持不变
/gxzx/lsjr/queryJgList → /mhzc/lsjr/queryJgList 或保持不变
方案:迁移后保持接口路径不变,前端无需修改。
四、数据库表迁移脚本
-- 1. 备份原表(可选)
CREATE TABLE txw_gxzx_gxxxb_bak AS SELECT * FROM txw_gxzx_gxxxb;
-- 2. 创建新表(在 mhzc 库执行)
CREATE TABLE txw_gxzx_gxxxb (
gx_uuid VARCHAR(64) PRIMARY KEY,
bt_1 VARCHAR(200),
fwlx_dm VARCHAR(20),
sshy VARCHAR(50),
fwfw VARCHAR(500),
fwnr TEXT,
zt VARCHAR(10),
qyuuid VARCHAR(64),
sjzt VARCHAR(10),
gjjg DECIMAL(18,2),
-- 其他字段...
);
-- 3. 数据迁移
INSERT INTO mhzc_db.txw_gxzx_gxxxb SELECT * FROM gxzx_db.txw_gxzx_gxxxb;
-- 4. 验证
SELECT COUNT(*) FROM txw_gxzx_gxxxb;
五、风险点与注意事项
5.1 数据一致性
- 迁移期间禁止在 gxzx 写入数据
- 迁移后需验证数据完整性
5.2 接口兼容性
- 迁移前后接口路径尽量保持一致
- 如有变化需同步通知前端
5.3 事务处理
- 跨库迁移时可考虑使用分布式事务或分批迁移
- 确保关键业务(供需发布、审批)的事务完整性
5.4 依赖服务
- 消息中心(XxzxApi)需确保可用
- 确认 IMhzcApi 在 mhzc 中仍有调用需求
六、迁移验证清单
| 序号 | 验证项 | 方法 |
|---|---|---|
| 1 | 数据库表迁移完整 | 对比记录数 |
| 2 | Controller 注入正常 | 启动应用无报错 |
| 3 | Service 层无异常 | 单元测试 |
| 4 | Mapper XML 路径正确 | 查询功能正常 |
| 5 | 接口路径可访问 | Postman 测试 |
| 6 | 搜索服务聚合供需数据 | 调用搜索接口验证 |
| 7 | 前端功能正常 | UI 测试 |
七、后续工作
- 旧服务下线:gxzx 服务相关接口迁移完成后,可逐步停用 gxzx 服务
- 搜索增强:基于迁移后的供需数据,完善搜索服务聚合逻辑
- 代码清理:移除 gxzx 项目中已迁移的代码