# 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` 库 ```sql -- 示例:在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. 包名修改** ```java // 原 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 语句修改** ```java // 所有 import com.css.txw.gxzx.* 改为 com.css.txw.mhzc.gxzx.* ``` **3. Controller @RequestMapping 路径调整** ```java // 原 @RequestMapping("/gxdt") @RequestMapping("/lsjr") @RequestMapping("/lsjy") @RequestMapping("/qyrz") // 保持不变(前端已对接)或调整 ``` **4. ServiceImpl 类注解修改** ```java // 原 @Service public class TxwGxzxGxxxbServiceImpl extends ServiceImpl // 改为 @Service public class TxwGxzxGxxxbServiceImpl extends ServiceImpl ``` **5. MapperScan 配置** 在 `MhzcServiceConfiguration.java` 或新建 `GxzxMapperScanConfiguration.java`: ```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 保留必要依赖 确保以下依赖存在: ```xml ggzc-framework-starter-xxzx-api DmJdbcDriver18 txw-common ``` #### 3.3 处理外部服务调用 **IMhzcApi 调用处理**(原 gxzx 调用 mhzc): - `TxwGxzxRzsqjlbServiceImpl` 中注入了 `IMhzcApi` - 迁移后改为直接调用本地方法(企业入驻逻辑已在 mhzc 中) **XxzxApi 调用处理**: - 确保 `txw-mhzc` 有消息中心依赖 - 如需迁移,保持调用方式不变 --- ### 阶段四:配置调整 #### 4.1 网关路由(如有) 如果使用了网关,需要将 gxzx 相关路由从 gxzx 服务指向 mhzc: ```yaml # 网关配置 - 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`): ```javascript // 当前调用路径(需确认) /gxzx/gxdt/gxxxList → /mhzc/gxdt/gxxxList 或保持不变 /gxzx/lsjr/queryJgList → /mhzc/lsjr/queryJgList 或保持不变 ``` **方案**:迁移后保持接口路径不变,前端无需修改。 --- ## 四、数据库表迁移脚本 ```sql -- 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 项目中已迁移的代码