319 lines
9.1 KiB
Markdown
319 lines
9.1 KiB
Markdown
# 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<TxwGxzxGxxxbMapper, TxwGxzxGxxxbDO>
|
||
|
||
// 改为
|
||
@Service
|
||
public class TxwGxzxGxxxbServiceImpl extends ServiceImpl<TxwGxzxGxxxbMapper, TxwGxzxGxxxbDO>
|
||
```
|
||
|
||
**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
|
||
<!-- 内部框架 -->
|
||
<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:
|
||
|
||
```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 项目中已迁移的代码 |