Files
wwjcloud-nest-v1/wwjcloud/migrate-php-business.js
万物街 127a4db1e3 feat: 完成sys模块迁移,对齐PHP/Java框架
- 重构sys模块架构,严格按admin/api/core分层
- 对齐所有sys实体与数据库表结构
- 实现完整的adminapi控制器,匹配PHP/Java契约
- 修复依赖注入问题,确保服务正确注册
- 添加自动迁移工具和契约验证
- 完善多租户支持和审计功能
- 统一命名规范,与PHP业务逻辑保持一致
2025-09-21 21:29:28 +08:00

235 lines
7.8 KiB
JavaScript

// PHP 业务迁移脚本
console.log('🚀 开始迁移 PHP 业务到 NestJS...\n');
// PHP 项目中的核心表列表
const phpTables = [
'sys_user', // 系统用户
'sys_menu', // 系统菜单
'sys_config', // 系统配置
'sys_area', // 系统地区
'sys_dict_type', // 字典类型
'sys_dict_item', // 字典项
'sys_role', // 系统角色
'sys_user_role', // 用户角色关联
'member', // 会员
'member_level', // 会员等级
'member_address', // 会员地址
'site', // 站点
'pay', // 支付记录
'pay_channel', // 支付渠道
'refund', // 退款记录
'wechat_fans', // 微信粉丝
'wechat_media', // 微信素材
'wechat_reply', // 微信回复
'diy', // DIY页面
'diy_form', // DIY表单
'addon', // 插件
'addon_log' // 插件日志
];
// 生成迁移配置
function generateMigrationConfig() {
return {
// 系统核心模块
sys: {
tables: ['sys_user', 'sys_menu', 'sys_config', 'sys_area', 'sys_dict_type', 'sys_dict_item', 'sys_role', 'sys_user_role'],
description: '系统核心模块',
priority: 1
},
// 会员模块
member: {
tables: ['member', 'member_level', 'member_address', 'member_label', 'member_sign', 'member_cash_out', 'member_cash_out_account', 'member_account_log'],
description: '会员管理模块',
priority: 2
},
// 站点模块
site: {
tables: ['site', 'site_group', 'site_account_log'],
description: '站点管理模块',
priority: 3
},
// 支付模块
pay: {
tables: ['pay', 'pay_channel', 'refund', 'transfer', 'transfer_scene'],
description: '支付管理模块',
priority: 4
},
// 微信模块
wechat: {
tables: ['wechat_fans', 'wechat_media', 'wechat_reply'],
description: '微信管理模块',
priority: 5
},
// DIY模块
diy: {
tables: ['diy', 'diy_route', 'diy_theme', 'diy_form', 'diy_form_fields', 'diy_form_submit_config', 'diy_form_write_config', 'diy_form_records', 'diy_form_records_fields'],
description: 'DIY页面模块',
priority: 6
},
// 插件模块
addon: {
tables: ['addon', 'addon_log'],
description: '插件管理模块',
priority: 7
},
// 其他模块
other: {
tables: ['verify', 'verifier', 'stat_hour', 'poster', 'dict'],
description: '其他功能模块',
priority: 8
}
};
}
// 生成迁移计划
function generateMigrationPlan() {
const config = generateMigrationConfig();
const plan = [];
Object.keys(config).forEach(moduleName => {
const module = config[moduleName];
plan.push({
module: moduleName,
description: module.description,
tables: module.tables,
priority: module.priority,
status: 'pending',
estimatedTime: `${module.tables.length * 2} 分钟`
});
});
return plan.sort((a, b) => a.priority - b.priority);
}
// 生成迁移命令
function generateMigrationCommands() {
const plan = generateMigrationPlan();
const commands = [];
plan.forEach(module => {
commands.push(`\n# ${module.description} (${module.module})`);
commands.push(`# 预计时间: ${module.estimatedTime}`);
commands.push(`# 表数量: ${module.tables.length}`);
// 批量迁移命令
commands.push(`curl -X POST http://localhost:3000/adminapi/migration/php/batch-migrate \\`);
commands.push(` -H "Content-Type: application/json" \\`);
commands.push(` -d '{`);
commands.push(` "tableNames": [${module.tables.map(t => `"${t}"`).join(', ')}],`);
commands.push(` "options": {`);
commands.push(` "generateController": true,`);
commands.push(` "generateService": true,`);
commands.push(` "generateEntity": true,`);
commands.push(` "generateDto": true,`);
commands.push(` "generateMapper": true,`);
commands.push(` "generateEvents": true,`);
commands.push(` "generateListeners": true`);
commands.push(` }`);
commands.push(` }'`);
commands.push('');
});
return commands;
}
// 生成 NestJS 模块结构
function generateNestJSModuleStructure() {
return `
src/
├── common/
│ ├── sys/ # 系统核心模块
│ │ ├── sys.module.ts
│ │ ├── controllers/
│ │ │ ├── adminapi/
│ │ │ │ ├── sysUser.controller.ts
│ │ │ │ ├── sysMenu.controller.ts
│ │ │ │ ├── sysConfig.controller.ts
│ │ │ │ └── ...
│ │ │ └── api/
│ │ │ └── ...
│ │ ├── services/
│ │ │ ├── admin/
│ │ │ ├── api/
│ │ │ └── core/
│ │ ├── entity/
│ │ │ ├── sysUser.entity.ts
│ │ │ ├── sysMenu.entity.ts
│ │ │ └── ...
│ │ ├── dto/
│ │ │ ├── create-sysUser.dto.ts
│ │ │ ├── update-sysUser.dto.ts
│ │ │ └── ...
│ │ ├── mapper/
│ │ │ ├── sysUser.mapper.ts
│ │ │ └── ...
│ │ ├── events/
│ │ │ ├── sysUser.created.event.ts
│ │ │ └── ...
│ │ └── listeners/
│ │ ├── sysUser.created.listener.ts
│ │ └── ...
│ ├── member/ # 会员模块
│ │ └── ...
│ ├── site/ # 站点模块
│ │ └── ...
│ ├── pay/ # 支付模块
│ │ └── ...
│ ├── wechat/ # 微信模块
│ │ └── ...
│ ├── diy/ # DIY模块
│ │ └── ...
│ └── addon/ # 插件模块
│ └── ...
└── tools/ # 迁移工具
└── migration/
└── ...
`;
}
// 执行迁移分析
console.log('📊 迁移分析报告');
console.log('================');
const config = generateMigrationConfig();
const plan = generateMigrationPlan();
console.log(`📋 总模块数: ${Object.keys(config).length}`);
console.log(`📋 总表数: ${phpTables.length}`);
console.log(`📋 预计总时间: ${plan.reduce((total, module) => total + parseInt(module.estimatedTime), 0)} 分钟`);
console.log('\n📅 迁移计划:');
plan.forEach((module, index) => {
console.log(`${index + 1}. ${module.description} (${module.module})`);
console.log(` 📋 表数量: ${module.tables.length}`);
console.log(` ⏱️ 预计时间: ${module.estimatedTime}`);
console.log(` 📝 表列表: ${module.tables.slice(0, 3).join(', ')}${module.tables.length > 3 ? '...' : ''}`);
console.log('');
});
console.log('🏗️ 生成的 NestJS 模块结构:');
console.log(generateNestJSModuleStructure());
console.log('🔧 迁移命令:');
const commands = generateMigrationCommands();
commands.forEach(cmd => console.log(cmd));
console.log('\n✨ 迁移工具特性:');
console.log(' ✅ 支持批量迁移');
console.log(' ✅ 支持模块化组织');
console.log(' ✅ 支持优先级排序');
console.log(' ✅ 支持进度跟踪');
console.log(' ✅ 支持错误处理');
console.log(' ✅ 支持迁移报告');
console.log(' ✅ 支持代码预览');
console.log(' ✅ 支持增量迁移');
console.log('\n🎯 下一步操作:');
console.log('1. 启动 NestJS 应用: npm run start:dev');
console.log('2. 执行迁移命令 (见上面的 curl 命令)');
console.log('3. 查看生成的代码文件');
console.log('4. 根据需要调整生成的内容');
console.log('5. 集成到现有业务逻辑中');
console.log('\n🎉 PHP 业务迁移准备完成!');