txw/docs/superpowers/plans/2026-04-22-gxzx-migration-plan.md

9.1 KiB
Raw Blame History

gxzx 服务迁移至 mhzc 方案

一、迁移背景

gxzx(供需大厅/绿色金融/绿色交易/企业入驻)需要合并到 mhzc 服务中,以实现:

  1. 统一服务治理,减少跨服务调用
  2. 支撑服务中心的搜索聚合功能
  3. 简化系统架构

二、迁移范围

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 核心业务功能

  1. 供需大厅GxdtController- 供需发布/审批/上下架/收藏
  2. 绿色金融LsjrController- 信贷/保险产品管理
  3. 绿色交易LsjyController- 资产信息管理
  4. 企业入驻QyRzController- 入驻申请审批

三、迁移步骤

阶段一:数据库迁移

  1. 备份源库:在迁移前备份 txw-gxzx 相关表数据
  2. 创建目标表:在 mhzc 数据库中创建9张表可保持原表名或重命名
  3. 数据同步:将数据从 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 XML9个

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 测试

七、后续工作

  1. 旧服务下线gxzx 服务相关接口迁移完成后,可逐步停用 gxzx 服务
  2. 搜索增强:基于迁移后的供需数据,完善搜索服务聚合逻辑
  3. 代码清理:移除 gxzx 项目中已迁移的代码