aiccs-api/check/迁移检测实施方案.md

12 KiB
Raw Blame History

广州→内蒙信用监管系统迁移检测实施方案

一、检测目标

确保从广州市场监督管理局迁移到内蒙市场监督管理局的信用监管综合系统能够:

  • 数据库连接正常7个数据源
  • 业务规则符合内蒙法规
  • 配置文件适配内蒙环境
  • 代码质量满足生产标准

二、检测阶段与优先级

第一阶段基础环境检测P0 - 阻塞启动)

1.1 数据库连接检测

检测项7个数据源连接可用性

数据源列表

数据源 配置类 用途
aiccs AiccsDataSource 信用监管核心业务
aiceps AicepsDataSource 企业信用评价
aicris AicrisDataSource 信用修复
crgs CrgsDataSource 信用风险监管
aicbiz AicbizDataSource 商事主体DB2
aicorg AicorgDataSource 组织架构
youfool YoufoolDataSource 基础框架

检测方法

// 使用DruidDataSource的testConnection()方法
DruidDataSource dataSource = ...
try {
    Connection conn = dataSource.getConnection();
    System.out.println("连接成功: " + dataSource.getName());
} catch (SQLException e) {
    System.out.println("连接失败: " + e.getMessage());
}

输出:数据库连接测试报告(成功/失败/响应时间)


1.2 配置文件本地化检测

检测项

  • application.yml 环境配置内蒙IP/端口/实例名)
  • Forest外部接口地址
  • SM4加密密钥oauth2.sm4.key
  • 文件上传路径PDF/Word/Excel临时目录

检测方法

# 搜索硬编码的广州配置
grep -r "172\.22\.80" src/
grep -r "广州\|广东\|GZ\|gz" src/
grep -r "4401" src/

输出待修改配置清单Excel


1.3 行政区划代码检测

检测项:硬编码的广州区划代码

目标代码

  • 4401 - 广州市
  • 440100 - 广州市级
  • 440103 - 广州市荔湾区等

检测位置

  • com.chinaweal.aiccs.schedule 缓存刷新逻辑
  • 企业查询过滤条件
  • 统计报表区域筛选

检测方法Grep搜索4401,人工逐个分析业务场景

输出:区划代码分布报告(含业务影响评估)


第二阶段业务适配检测P1 - 核心功能)

2.1 权限体系检测

检测项Shiro Realm是否对接内蒙aicorg

检测位置

  • UserRealm.java - 认证逻辑
  • RoleRealm.java - 角色权限
  • 数据源配置指向

检测方法

  1. 检查aicorg数据源连接配置
  2. 测试登录功能admin/123456
  3. 验证权限注解@RequiresPermissions生效

输出:权限集成验证报告


2.2 业务规则差异检测

检测项广州vs内蒙法规差异

业务模块对比

模块 广州规则 内蒙规则 检测位置
经营异常 列入条件XX 列入条件YY abnormal
严重违法 标准AA 标准BB seriousillegal
信用修复 审批流程M 审批流程N aicris/forgiveprudent
行政处罚 裁量权P 裁量权Q punishment

检测方法

  1. 收集内蒙相关法规文档
  2. 对照代码中的业务判断逻辑
  3. 标注需要调整的代码位置

输出业务规则差异对照表Excel


2.3 数据字典缓存检测

检测项:应用启动缓存正确性

缓存类型

  • 企业类型缓存
  • 基础代码缓存
  • 数据类型代码缓存
  • 广州编码缓存 → 需替换为内蒙编码

检测位置ContextRefreshedEvent监听器

检测方法

  1. 启动应用,观察日志
  2. 连接Redis查看缓存内容redis-cli KEYS "*"
  3. 检查缓存数据是否为内蒙数据

输出:缓存数据正确性报告


第三阶段数据持久层检测P1 - 数据完整性)

3.1 Mapper XML与表结构一致性

检测项

  • 字段名映射
  • 数据类型匹配
  • 主键/索引配置

检测方法

方案A自动化检测推荐

-- 导出数据库表结构
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME IN ('表名列表')
ORDER BY TABLE_NAME, COLUMN_ID;
# Python对比脚本
import xml.etree.ElementTree as ET

def parse_mapper_xml(xml_path):
    """解析Mapper XML获取字段列表"""
    tree = ET.parse(xml_path)
    root = tree.getroot()
    fields = []
    for result_map in root.findall('.//resultMap'):
        for column in result_map.findall('result'):
            fields.append(column.get('column'))
    return fields

def compare_with_db(exported_db_schema, mapper_fields):
    """对比数据库schema和Mapper字段"""
    missing = set(exported_db_schema) - set(mapper_fields)
    extra = set(mapper_fields) - set(exported_db_schema)
    return missing, extra

方案B使用MyBatis-Plus

TableInfo tableInfo = TableInfoHelper.getTableInfo(Entity.class);
for (TableField field : tableInfo.getFields()) {
    System.out.println(field.getColumn() + " - " + field.getProperty());
}

输出:差异清单(缺失字段/类型不匹配/多余字段)


3.2 跨数据库SQL兼容性

检测项

SQL类型 MySQL Oracle 达梦 DB2 检测方法
分页 LIMIT ROWNUM ROWNUM FETCH FIRST Grep搜索
序列 AUTO_INCREMENT SEQ.NEXTVAL SEQ.NEXTVAL SEQ.NEXTVAL Grep搜索
日期 NOW() SYSDATE SYSDATE CURRENT TIMESTAMP Grep搜索
字符串 CONCAT || || || Grep搜索

检测方法

# 搜索分页语句
grep -rn "LIMIT\|ROWNUM\|FETCH FIRST" src/

# 搜索序列
grep -rn "\.NEXTVAL\|AUTO_INCREMENT" src/

# 搜索日期函数
grep -rn "NOW()\|SYSDATE\|CURRENT_TIMESTAMP" src/

输出不兼容SQL语句清单含修复建议


第四阶段代码质量与安全检测P2 - 优化完善)

4.1 依赖冲突检测

工具Maven依赖分析

命令

mvn dependency:tree > dependency-tree.txt

检测项

  • 版本冲突jar包
  • 重复依赖(不同版本)
  • 传递依赖风险

输出:依赖冲突报告(需手动解决)


4.2 安全漏洞扫描

工具SonarQube / OWASP Dependency Check

检测项

  • Shiro版本漏洞CVE-2016-4437等
  • JWT实现安全签名算法、密钥强度
  • SQL注入风险MyBatis #{} vs ${}
  • XSS漏洞前端输入输出

检测方法

# 静态扫描
mvn sonar:sonar

# 依赖漏洞检查
mvn org.owasp:dependency-check-maven:check

重点关注

  • 所有使用${}拼SQL的地方
  • 密码硬编码
  • Druid监控暴露/druid是否需IP限制

输出:安全漏洞清单(按严重等级分类)


4.3 日志敏感信息检测

检测项:日志中输出敏感数据

敏感字段

  • 身份证号
  • 企业名称
  • 手机号
  • 密码

检测方法

# 搜索日志输出
grep -rn "log\.\(info\|debug\|warn\).*\(name\|idCard\|phone\|password\)" src/

输出:敏感信息脱敏建议(使用***替换)


第五阶段性能与部署检测P2 - 性能优化)

5.1 数据库连接池配置

检测项Druid连接池是否满足内蒙数据量

关键配置

  • maxActive - 最大连接数
  • initialSize - 初始连接数
  • maxWait - 获取连接超时时间

检测方法

  1. 压测使用JMeter模拟并发请求
  2. 监控:访问http://localhost:8080/druid查看连接池状态
  3. 分析:是否存在连接等待超时

输出:连接池调优建议


5.2 定时任务负载检测

检测项@Scheduled任务执行时长

定时任务位置com.chinaweal.aiccs.schedule

检测方法

@Scheduled(cron = "0 0 2 * * ?")
public void refreshCache() {
    long start = System.currentTimeMillis();
    try {
        // 原有逻辑
    } finally {
        long duration = System.currentTimeMillis() - start;
        log.info("任务执行时长: {}ms", duration);
    }
}

输出:任务执行时间报告(是否需优化或调整执行时间窗口)


5.3 文档生成性能

检测项PDF/Word批量生成性能

测试场景批量生成100个行政处罚决定书

检测方法

  1. 编写测试脚本
  2. 统计总耗时
  3. 分析瓶颈PDF生成 iText vs Word处理 docx4j

输出:性能瓶颈分析(是否需异步处理)


三、检测工具清单

工具 用途 使用场景
Grep 代码搜索 硬编码、SQL语句、敏感信息
Maven 依赖分析 mvn dependency:tree
Druid监控 数据库性能 http://localhost:8080/druid
JMeter 接口压测 连接池、接口性能
SonarQube 代码质量 静态扫描、安全漏洞
Postman 接口测试 API连通性、权限验证
Redis-cli 缓存检查 KEYS * / GET key
Python 自动化脚本 Mapper对比、数据导出

四、输出物标准

每个检测项完成后需输出:

  1. 检测报告Markdown格式

    • 检测目的
    • 检测方法
    • 检测结果
    • 问题汇总
  2. 问题清单Excel

    • 序号
    • 问题分类
    • 优先级P0/P1/P2
    • 问题描述
    • 涉及文件
    • 负责人
    • 状态(待修复/修复中/已完成)
  3. 修复建议(具体到文件/行号)

    • 原代码
    • 修改后代码
    • 原因说明
  4. 验证结果(修复后回归测试)

    • 测试方法
    • 测试结果
    • 截图/日志

五、时间安排建议

阶段 检测项数量 预计工作量 参与人员
阶段一:基础环境 3项 2天 后端开发
阶段二:业务适配 3项 3天 后端开发 + 业务分析师
阶段三:数据持久层 2项 3天 后端开发 + DBA
阶段四:质量与安全 3项 2天 后端开发 + 安全工程师
阶段五:性能与部署 3项 2天 后端开发 + 运维
合计 14项 12天 -

并行执行建议

  • 阶段二和阶段三可并行(不同人员)
  • 阶段四和阶段五可并行(不同人员)
  • 最短周期:6天2人并行

六、风险控制

高风险项

  1. 数据库连接失败P0

    • 风险:系统无法启动
    • 应对:提前获取内蒙环境数据库连接信息
  2. 业务规则差异P1

    • 风险:监管流程不符合内蒙法规
    • 应对:邀请内蒙业务专家参与评审
  3. SQL兼容性问题P1

    • 风险:查询失败、数据错误
    • 应对逐条测试关键业务SQL

回归测试建议

所有修复完成后,需进行:

  1. 冒烟测试:核心业务流程(登录、查询、审批)
  2. 接口测试Postman测试所有API
  3. 性能测试JMeter压测关键接口
  4. 数据一致性:对比数据库记录与缓存数据

七、检查清单模板

☑ 数据库连接检测
  ☑ aiccs数据源连接成功
  ☑ aiceps数据源连接成功
  ☑ aicris数据源连接成功
  ☑ crgs数据源连接成功
  ☑ aicbiz数据源连接成功
  ☑ aicorg数据源连接成功
  ☑ youfool数据源连接成功

☑ 配置文件本地化检测
  ☑ application.yml已更新内蒙IP
  ☑ Forest外部接口地址已确认
  ☑ SM4加密密钥已配置
  ☑ 文件上传路径已调整

☑ ...(其他检测项)

八、附录

A. 关键配置文件位置

  • src/main/resources/application.yml - 主配置文件
  • src/main/resources/application-{profile}.yml - 环境配置
  • src/main/resources/mybatis/config/mybatis-config.xml - MyBatis配置
  • src/main/resources/forest/ - Forest接口配置

B. 关键代码位置

  • com.chinaweal.aiccs.config - 数据源配置
  • com.chinaweal.aiccs.shiro - Shiro权限配置
  • com.chinaweal.aiccs.schedule - 定时任务
  • com.chinaweal.youfool.framework.shiro.realm - Realm实现

C. 联系人

  • 后端开发负责人:
  • DBA
  • 业务分析师:
  • 运维负责人:

文档版本v1.0 最后更新2026-01-05 维护人Claude Code