feat: ✅ 业务逻辑自动化迁移 - Phase 1完成
成果: - ✅ 成功提取9个高质量Service(5.7%) * login-service: 核心登录功能 * sys-user-service: 用户管理 * captcha-service: 验证码服务 * 6个辅助Service - 🔧 创建自动化工具: * extract-quality-services.js: 自动提取并验证 * fix-simple-errors.js: 修复常见Java语法 * fix-remaining-java-syntax.js: Java语法转换 * fix-java-var-declarations.js: 变量声明转换 - 📊 分析报告: * SERVICE_EXTRACTION_REPORT.json: 详细提取结果 * BUSINESS_LOGIC_MIGRATION_REALITY.md: 迁移真实情况 分析发现: - 159个非Addon Service中,9个可直接使用 - 53个Service错误<50个,有望批量修复 - ac00caf确实包含真实业务逻辑,但需要修复 下一步: - 批量修复错误<50的53个Service - 改进转换工具处理常见Java语法
This commit is contained in:
620
wwjcloud-nest-v1/docs/SERVICE_EXTRACTION_REPORT.json
Normal file
620
wwjcloud-nest-v1/docs/SERVICE_EXTRACTION_REPORT.json
Normal file
@@ -0,0 +1,620 @@
|
||||
{
|
||||
"timestamp": "2025-10-27T09:01:14.638Z",
|
||||
"total": 159,
|
||||
"success": 9,
|
||||
"failed": 150,
|
||||
"successRate": "5.7%",
|
||||
"successList": [
|
||||
"admin/auth/impl/login-service-impl.service.ts",
|
||||
"admin/sys/impl/sys-user-service-impl.service.ts",
|
||||
"admin/captcha/cache/captcha-cache-service-redis-impl.service.ts",
|
||||
"admin/captcha/impl/captcha-service-impl.service.ts",
|
||||
"api/wechat/impl/message-handle-impl.service.ts",
|
||||
"cached-service-impl.service.ts",
|
||||
"core/niucloud/impl/i-core-auth-service-impl.service.ts",
|
||||
"example1-handler-provider-impl.service.ts",
|
||||
"example2-handler-provider-impl.service.ts"
|
||||
],
|
||||
"failedList": [
|
||||
{
|
||||
"path": "admin/auth/impl/auth-service-impl.service.ts",
|
||||
"errors": 181
|
||||
},
|
||||
{
|
||||
"path": "admin/auth/impl/config-service-impl.service.ts",
|
||||
"errors": 17
|
||||
},
|
||||
{
|
||||
"path": "admin/dict/impl/dict-service-impl.service.ts",
|
||||
"errors": 92
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-agreement-service-impl.service.ts",
|
||||
"errors": 25
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-area-service-impl.service.ts",
|
||||
"errors": 102
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-attachment-service-impl.service.ts",
|
||||
"errors": 154
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-backup-records-service-impl.service.ts",
|
||||
"errors": 417
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-config-service-impl.service.ts",
|
||||
"errors": 73
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-export-service-impl.service.ts",
|
||||
"errors": 142
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-menu-service-impl.service.ts",
|
||||
"errors": 514
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-notice-log-service-impl.service.ts",
|
||||
"errors": 56
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-notice-service-impl.service.ts",
|
||||
"errors": 80
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-notice-sms-log-service-impl.service.ts",
|
||||
"errors": 61
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-poster-service-impl.service.ts",
|
||||
"errors": 169
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-printer-service-impl.service.ts",
|
||||
"errors": 172
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-printer-template-service-impl.service.ts",
|
||||
"errors": 134
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-role-service-impl.service.ts",
|
||||
"errors": 142
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-schedule-service-impl.service.ts",
|
||||
"errors": 307
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-upgrade-records-service-impl.service.ts",
|
||||
"errors": 139
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-user-log-service-impl.service.ts",
|
||||
"errors": 48
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/sys-user-role-service-impl.service.ts",
|
||||
"errors": 78
|
||||
},
|
||||
{
|
||||
"path": "admin/sys/impl/system-service-impl.service.ts",
|
||||
"errors": 123
|
||||
},
|
||||
{
|
||||
"path": "api/sys/impl/base64-service-impl.service.ts",
|
||||
"errors": 6
|
||||
},
|
||||
{
|
||||
"path": "api/sys/impl/sys-area-service-impl.service.ts",
|
||||
"errors": 121
|
||||
},
|
||||
{
|
||||
"path": "api/sys/impl/sys-config-service-impl.service.ts",
|
||||
"errors": 48
|
||||
},
|
||||
{
|
||||
"path": "api/sys/impl/sys-verify-service-impl.service.ts",
|
||||
"errors": 319
|
||||
},
|
||||
{
|
||||
"path": "api/sys/impl/task-service-impl.service.ts",
|
||||
"errors": 41
|
||||
},
|
||||
{
|
||||
"path": "api/sys/impl/upload-service-impl.service.ts",
|
||||
"errors": 30
|
||||
},
|
||||
{
|
||||
"path": "core/sys/impl/core-agreement-service-impl.service.ts",
|
||||
"errors": 31
|
||||
},
|
||||
{
|
||||
"path": "core/sys/impl/core-config-service-impl.service.ts",
|
||||
"errors": 137
|
||||
},
|
||||
{
|
||||
"path": "core/sys/impl/core-export-service-impl.service.ts",
|
||||
"errors": 97
|
||||
},
|
||||
{
|
||||
"path": "core/sys/impl/core-menu-service-impl.service.ts",
|
||||
"errors": 52
|
||||
},
|
||||
{
|
||||
"path": "core/sys/impl/core-printer-service-impl.service.ts",
|
||||
"errors": 72
|
||||
},
|
||||
{
|
||||
"path": "core/sys/impl/core-scan-service-impl.service.ts",
|
||||
"errors": 25
|
||||
},
|
||||
{
|
||||
"path": "core/sys/impl/core-sys-config-service-impl.service.ts",
|
||||
"errors": 140
|
||||
},
|
||||
{
|
||||
"path": "core/sys/impl/core-upload-service-impl.service.ts",
|
||||
"errors": 71
|
||||
},
|
||||
{
|
||||
"path": "admin/member/impl/member-account-service-impl.service.ts",
|
||||
"errors": 135
|
||||
},
|
||||
{
|
||||
"path": "admin/member/impl/member-address-service-impl.service.ts",
|
||||
"errors": 48
|
||||
},
|
||||
{
|
||||
"path": "admin/member/impl/member-cash-out-service-impl.service.ts",
|
||||
"errors": 126
|
||||
},
|
||||
{
|
||||
"path": "admin/member/impl/member-config-service-impl.service.ts",
|
||||
"errors": 45
|
||||
},
|
||||
{
|
||||
"path": "admin/member/impl/member-label-service-impl.service.ts",
|
||||
"errors": 98
|
||||
},
|
||||
{
|
||||
"path": "admin/member/impl/member-level-service-impl.service.ts",
|
||||
"errors": 110
|
||||
},
|
||||
{
|
||||
"path": "admin/member/impl/member-service-impl.service.ts",
|
||||
"errors": 352
|
||||
},
|
||||
{
|
||||
"path": "admin/member/impl/member-sign-service-impl.service.ts",
|
||||
"errors": 53
|
||||
},
|
||||
{
|
||||
"path": "api/member/impl/member-account-service-impl.service.ts",
|
||||
"errors": 327
|
||||
},
|
||||
{
|
||||
"path": "api/member/impl/member-address-service-impl.service.ts",
|
||||
"errors": 83
|
||||
},
|
||||
{
|
||||
"path": "api/member/impl/member-cash-out-service-impl.service.ts",
|
||||
"errors": 197
|
||||
},
|
||||
{
|
||||
"path": "api/member/impl/member-level-service-impl.service.ts",
|
||||
"errors": 100
|
||||
},
|
||||
{
|
||||
"path": "api/member/impl/member-service-impl.service.ts",
|
||||
"errors": 168
|
||||
},
|
||||
{
|
||||
"path": "api/member/impl/member-sign-service-impl.service.ts",
|
||||
"errors": 191
|
||||
},
|
||||
{
|
||||
"path": "core/member/impl/core-member-account-service-impl.service.ts",
|
||||
"errors": 48
|
||||
},
|
||||
{
|
||||
"path": "core/member/impl/core-member-cash-out-service-impl.service.ts",
|
||||
"errors": 240
|
||||
},
|
||||
{
|
||||
"path": "core/member/impl/core-member-config-service-impl.service.ts",
|
||||
"errors": 80
|
||||
},
|
||||
{
|
||||
"path": "core/member/impl/core-member-level-service-impl.service.ts",
|
||||
"errors": 34
|
||||
},
|
||||
{
|
||||
"path": "core/member/impl/core-member-service-impl.service.ts",
|
||||
"errors": 445
|
||||
},
|
||||
{
|
||||
"path": "admin/site/impl/site-account-log-service-impl.service.ts",
|
||||
"errors": 148
|
||||
},
|
||||
{
|
||||
"path": "admin/site/impl/site-group-service-impl.service.ts",
|
||||
"errors": 177
|
||||
},
|
||||
{
|
||||
"path": "admin/site/impl/site-service-impl.service.ts",
|
||||
"errors": 941
|
||||
},
|
||||
{
|
||||
"path": "admin/site/impl/site-user-service-impl.service.ts",
|
||||
"errors": 122
|
||||
},
|
||||
{
|
||||
"path": "core/site/impl/core-site-account-service-impl.service.ts",
|
||||
"errors": 41
|
||||
},
|
||||
{
|
||||
"path": "core/site/impl/core-site-service-impl.service.ts",
|
||||
"errors": 999
|
||||
},
|
||||
{
|
||||
"path": "admin/pay/impl/pay-channel-service-impl.service.ts",
|
||||
"errors": 180
|
||||
},
|
||||
{
|
||||
"path": "admin/pay/impl/pay-refund-service-impl.service.ts",
|
||||
"errors": 49
|
||||
},
|
||||
{
|
||||
"path": "admin/pay/impl/pay-service-impl.service.ts",
|
||||
"errors": 152
|
||||
},
|
||||
{
|
||||
"path": "admin/pay/impl/pay-transfer-service-impl.service.ts",
|
||||
"errors": 26
|
||||
},
|
||||
{
|
||||
"path": "api/pay/impl/pay-service-impl.service.ts",
|
||||
"errors": 93
|
||||
},
|
||||
{
|
||||
"path": "core/pay/impl/core-pay-channel-service-impl.service.ts",
|
||||
"errors": 55
|
||||
},
|
||||
{
|
||||
"path": "core/pay/impl/core-pay-event-service-impl.service.ts",
|
||||
"errors": 100
|
||||
},
|
||||
{
|
||||
"path": "core/pay/impl/core-pay-service-impl.service.ts",
|
||||
"errors": 245
|
||||
},
|
||||
{
|
||||
"path": "core/pay/impl/core-refund-service-impl.service.ts",
|
||||
"errors": 120
|
||||
},
|
||||
{
|
||||
"path": "core/pay/impl/core-transfer-scene-service-impl.service.ts",
|
||||
"errors": 123
|
||||
},
|
||||
{
|
||||
"path": "core/pay/impl/core-transfer-service-impl.service.ts",
|
||||
"errors": 158
|
||||
},
|
||||
{
|
||||
"path": "admin/notice/impl/notice-log-service-impl.service.ts",
|
||||
"errors": 11
|
||||
},
|
||||
{
|
||||
"path": "admin/notice/impl/notice-service-impl.service.ts",
|
||||
"errors": 28
|
||||
},
|
||||
{
|
||||
"path": "admin/notice/impl/nui-sms-service-impl.service.ts",
|
||||
"errors": 786
|
||||
},
|
||||
{
|
||||
"path": "core/notice/impl/core-notice-service-impl.service.ts",
|
||||
"errors": 216
|
||||
},
|
||||
{
|
||||
"path": "core/notice/impl/core-notice-sms-log-service-impl.service.ts",
|
||||
"errors": 19
|
||||
},
|
||||
{
|
||||
"path": "admin/aliapp/impl/aliapp-config-service-impl.service.ts",
|
||||
"errors": 20
|
||||
},
|
||||
{
|
||||
"path": "admin/channel/impl/admin-app-service-impl.service.ts",
|
||||
"errors": 169
|
||||
},
|
||||
{
|
||||
"path": "admin/diy/impl/diy-config-service-impl.service.ts",
|
||||
"errors": 14
|
||||
},
|
||||
{
|
||||
"path": "admin/diy/impl/diy-route-service-impl.service.ts",
|
||||
"errors": 42
|
||||
},
|
||||
{
|
||||
"path": "admin/diy/impl/diy-service-impl.service.ts",
|
||||
"errors": 472
|
||||
},
|
||||
{
|
||||
"path": "admin/diy/impl/diy-theme-service-impl.service.ts",
|
||||
"errors": 188
|
||||
},
|
||||
{
|
||||
"path": "admin/diy_form/impl/diy-form-config-service-impl.service.ts",
|
||||
"errors": 20
|
||||
},
|
||||
{
|
||||
"path": "admin/diy_form/impl/diy-form-records-service-impl.service.ts",
|
||||
"errors": 329
|
||||
},
|
||||
{
|
||||
"path": "admin/diy_form/impl/diy-form-service-impl.service.ts",
|
||||
"errors": 594
|
||||
},
|
||||
{
|
||||
"path": "admin/generator/impl/generate-column-service-impl.service.ts",
|
||||
"errors": 1
|
||||
},
|
||||
{
|
||||
"path": "admin/generator/impl/generate-service-impl.service.ts",
|
||||
"errors": 298
|
||||
},
|
||||
{
|
||||
"path": "admin/home/impl/auth-site-service-impl.service.ts",
|
||||
"errors": 330
|
||||
},
|
||||
{
|
||||
"path": "admin/install/impl/install-system-service-impl.service.ts",
|
||||
"errors": 44
|
||||
},
|
||||
{
|
||||
"path": "admin/niucloud/impl/cloud-build-service-impl.service.ts",
|
||||
"errors": 131
|
||||
},
|
||||
{
|
||||
"path": "admin/niucloud/impl/niu-cloud-service-impl.service.ts",
|
||||
"errors": 148
|
||||
},
|
||||
{
|
||||
"path": "admin/stat/impl/stat-hour-service-impl.service.ts",
|
||||
"errors": 143
|
||||
},
|
||||
{
|
||||
"path": "admin/stat/impl/stat-service-impl.service.ts",
|
||||
"errors": 89
|
||||
},
|
||||
{
|
||||
"path": "admin/upgrade/impl/upgrade-service-impl.service.ts",
|
||||
"errors": 523
|
||||
},
|
||||
{
|
||||
"path": "admin/upload/impl/storage-config-service-impl.service.ts",
|
||||
"errors": 84
|
||||
},
|
||||
{
|
||||
"path": "admin/verify/impl/verifier-service-impl.service.ts",
|
||||
"errors": 71
|
||||
},
|
||||
{
|
||||
"path": "admin/verify/impl/verify-service-impl.service.ts",
|
||||
"errors": 90
|
||||
},
|
||||
{
|
||||
"path": "admin/weapp/impl/weapp-config-service-impl.service.ts",
|
||||
"errors": 106
|
||||
},
|
||||
{
|
||||
"path": "admin/weapp/impl/weapp-template-service-impl.service.ts",
|
||||
"errors": 40
|
||||
},
|
||||
{
|
||||
"path": "admin/weapp/impl/weapp-version-service-impl.service.ts",
|
||||
"errors": 115
|
||||
},
|
||||
{
|
||||
"path": "admin/wechat/impl/wechat-config-service-impl.service.ts",
|
||||
"errors": 999
|
||||
},
|
||||
{
|
||||
"path": "admin/wechat/impl/wechat-media-service-impl.service.ts",
|
||||
"errors": 135
|
||||
},
|
||||
{
|
||||
"path": "admin/wechat/impl/wechat-menu-service-impl.service.ts",
|
||||
"errors": 9
|
||||
},
|
||||
{
|
||||
"path": "admin/wechat/impl/wechat-reply-service-impl.service.ts",
|
||||
"errors": 123
|
||||
},
|
||||
{
|
||||
"path": "admin/wechat/impl/wechat-template-service-impl.service.ts",
|
||||
"errors": 39
|
||||
},
|
||||
{
|
||||
"path": "admin/wxoplatform/impl/oplatform-config-service-impl.service.ts",
|
||||
"errors": 14
|
||||
},
|
||||
{
|
||||
"path": "admin/wxoplatform/impl/oplatform-server-service-impl.service.ts",
|
||||
"errors": 51
|
||||
},
|
||||
{
|
||||
"path": "admin/wxoplatform/impl/oplatform-service-impl.service.ts",
|
||||
"errors": 146
|
||||
},
|
||||
{
|
||||
"path": "admin/wxoplatform/impl/weapp-version-service-impl.service.ts",
|
||||
"errors": 264
|
||||
},
|
||||
{
|
||||
"path": "api/agreement/impl/agreement-service-impl.service.ts",
|
||||
"errors": 16
|
||||
},
|
||||
{
|
||||
"path": "api/channel/impl/app-service-impl.service.ts",
|
||||
"errors": 999
|
||||
},
|
||||
{
|
||||
"path": "api/diy/impl/diy-form-service-impl.service.ts",
|
||||
"errors": 551
|
||||
},
|
||||
{
|
||||
"path": "api/diy/impl/diy-service-impl.service.ts",
|
||||
"errors": 111
|
||||
},
|
||||
{
|
||||
"path": "api/login/impl/auth-service-impl.service.ts",
|
||||
"errors": 39
|
||||
},
|
||||
{
|
||||
"path": "api/login/impl/login-service-impl.service.ts",
|
||||
"errors": 134
|
||||
},
|
||||
{
|
||||
"path": "api/login/impl/register-service-impl.service.ts",
|
||||
"errors": 129
|
||||
},
|
||||
{
|
||||
"path": "api/weapp/impl/serve-service-impl.service.ts",
|
||||
"errors": 30
|
||||
},
|
||||
{
|
||||
"path": "api/weapp/impl/weapp-service-impl.service.ts",
|
||||
"errors": 152
|
||||
},
|
||||
{
|
||||
"path": "api/wechat/impl/serve-service-impl.service.ts",
|
||||
"errors": 31
|
||||
},
|
||||
{
|
||||
"path": "api/wechat/impl/wechat-service-impl.service.ts",
|
||||
"errors": 151
|
||||
},
|
||||
{
|
||||
"path": "core/aliapp/impl/core-aliapp-config-service-impl.service.ts",
|
||||
"errors": 16
|
||||
},
|
||||
{
|
||||
"path": "core/app/impl/core-app-service-impl.service.ts",
|
||||
"errors": 2
|
||||
},
|
||||
{
|
||||
"path": "core/app/impl/core-async-task-service-impl.service.ts",
|
||||
"errors": 8
|
||||
},
|
||||
{
|
||||
"path": "core/app/impl/core-queue-service-impl.service.ts",
|
||||
"errors": 16
|
||||
},
|
||||
{
|
||||
"path": "core/captcha/impl/core-captcha-img-service-impl.service.ts",
|
||||
"errors": 31
|
||||
},
|
||||
{
|
||||
"path": "core/captcha/impl/default-captcha-service-impl.service.ts",
|
||||
"errors": 42
|
||||
},
|
||||
{
|
||||
"path": "core/channel/impl/core-app-cloud-service-impl.service.ts",
|
||||
"errors": 120
|
||||
},
|
||||
{
|
||||
"path": "core/channel/impl/core-app-service-impl.service.ts",
|
||||
"errors": 17
|
||||
},
|
||||
{
|
||||
"path": "core/channel/impl/core-h5-service-impl.service.ts",
|
||||
"errors": 14
|
||||
},
|
||||
{
|
||||
"path": "core/channel/impl/core-pc-service-impl.service.ts",
|
||||
"errors": 14
|
||||
},
|
||||
{
|
||||
"path": "core/diy/impl/core-diy-service-impl.service.ts",
|
||||
"errors": 31
|
||||
},
|
||||
{
|
||||
"path": "core/diy_form/impl/core-diy-form-config-service-impl.service.ts",
|
||||
"errors": 124
|
||||
},
|
||||
{
|
||||
"path": "core/diy_form/impl/core-diy-form-records-service-impl.service.ts",
|
||||
"errors": 272
|
||||
},
|
||||
{
|
||||
"path": "core/niucloud/impl/i-core-niucloud-config-service-impl.service.ts",
|
||||
"errors": 11
|
||||
},
|
||||
{
|
||||
"path": "core/poster/impl/core-poster-service-impl.service.ts",
|
||||
"errors": 97
|
||||
},
|
||||
{
|
||||
"path": "core/schedule/impl/core-schedule-service-impl.service.ts",
|
||||
"errors": 118
|
||||
},
|
||||
{
|
||||
"path": "core/sms/impl/core-sms-service-impl.service.ts",
|
||||
"errors": 34
|
||||
},
|
||||
{
|
||||
"path": "core/upload/impl/core-base64-service-impl.service.ts",
|
||||
"errors": 999
|
||||
},
|
||||
{
|
||||
"path": "core/upload/impl/core-fetch-service-impl.service.ts",
|
||||
"errors": 24
|
||||
},
|
||||
{
|
||||
"path": "core/upload/impl/core-storage-service-impl.service.ts",
|
||||
"errors": 64
|
||||
},
|
||||
{
|
||||
"path": "core/user/impl/core-user-service-impl.service.ts",
|
||||
"errors": 6
|
||||
},
|
||||
{
|
||||
"path": "core/weapp/impl/core-weapp-cloud-service-impl.service.ts",
|
||||
"errors": 83
|
||||
},
|
||||
{
|
||||
"path": "core/weapp/impl/core-weapp-config-service-impl.service.ts",
|
||||
"errors": 31
|
||||
},
|
||||
{
|
||||
"path": "core/weapp/impl/core-weapp-delivery-service-impl.service.ts",
|
||||
"errors": 99
|
||||
},
|
||||
{
|
||||
"path": "core/weapp/impl/core-weapp-service-impl.service.ts",
|
||||
"errors": 11
|
||||
},
|
||||
{
|
||||
"path": "core/wechat/impl/core-wechat-config-service-impl.service.ts",
|
||||
"errors": 31
|
||||
},
|
||||
{
|
||||
"path": "core/wechat/impl/core-wechat-reply-service-impl.service.ts",
|
||||
"errors": 22
|
||||
},
|
||||
{
|
||||
"path": "core/wxoplatform/impl/core-oplatform-service-impl.service.ts",
|
||||
"errors": 24
|
||||
},
|
||||
{
|
||||
"path": "core/wxoplatform/impl/core-oplatform-static-config-service-impl.service.ts",
|
||||
"errors": 33
|
||||
}
|
||||
]
|
||||
}
|
||||
245
wwjcloud-nest-v1/tools/extract-quality-services.js
Executable file
245
wwjcloud-nest-v1/tools/extract-quality-services.js
Executable file
@@ -0,0 +1,245 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* 高质量Service自动提取工具
|
||||
*
|
||||
* 功能:
|
||||
* 1. 从ac00caf备份中逐个提取Service
|
||||
* 2. 跳过addon模块
|
||||
* 3. 每次提取后验证编译
|
||||
* 4. 只保留能编译通过的Service
|
||||
* 5. 生成详细报告
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { execSync } = require('child_process');
|
||||
|
||||
const BACKUP_DIR = '/tmp/ac00caf-services-backup';
|
||||
const TARGET_DIR = path.join(__dirname, '../wwjcloud/libs/wwjcloud-core/src/services');
|
||||
const PROJECT_DIR = path.join(__dirname, '../wwjcloud');
|
||||
|
||||
// 获取所有非addon的service文件
|
||||
function getAllNonAddonServices(dir, basePath = '') {
|
||||
const services = [];
|
||||
const items = fs.readdirSync(dir, { withFileTypes: true });
|
||||
|
||||
for (const item of items) {
|
||||
const fullPath = path.join(dir, item.name);
|
||||
const relativePath = path.join(basePath, item.name);
|
||||
|
||||
// 跳过addon目录
|
||||
if (item.name === 'addon' || relativePath.includes('/addon/')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (item.isDirectory()) {
|
||||
services.push(...getAllNonAddonServices(fullPath, relativePath));
|
||||
} else if (item.name.endsWith('-impl.service.ts')) {
|
||||
services.push({
|
||||
name: item.name,
|
||||
relativePath: relativePath,
|
||||
fullPath: fullPath,
|
||||
category: getCategoryFromPath(relativePath)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
function getCategoryFromPath(relativePath) {
|
||||
const parts = relativePath.split('/');
|
||||
if (parts.includes('auth')) return 'auth';
|
||||
if (parts.includes('sys')) return 'sys';
|
||||
if (parts.includes('member')) return 'member';
|
||||
if (parts.includes('site')) return 'site';
|
||||
if (parts.includes('pay')) return 'pay';
|
||||
if (parts.includes('notice')) return 'notice';
|
||||
if (parts.includes('dict')) return 'dict';
|
||||
return 'other';
|
||||
}
|
||||
|
||||
function compileProject() {
|
||||
try {
|
||||
console.log(' 🔨 编译中...');
|
||||
execSync('npm run build', {
|
||||
cwd: PROJECT_DIR,
|
||||
stdio: 'pipe',
|
||||
timeout: 120000 // 2分钟超时
|
||||
});
|
||||
return { success: true, errors: 0 };
|
||||
} catch (error) {
|
||||
const output = error.stdout?.toString() || error.stderr?.toString() || '';
|
||||
const errorMatch = output.match(/Found (\d+) error/);
|
||||
const errorCount = errorMatch ? parseInt(errorMatch[1]) : 999;
|
||||
return { success: false, errors: errorCount, output };
|
||||
}
|
||||
}
|
||||
|
||||
function extractService(service) {
|
||||
const targetPath = path.join(TARGET_DIR, service.relativePath);
|
||||
const targetDir = path.dirname(targetPath);
|
||||
|
||||
// 确保目标目录存在
|
||||
if (!fs.existsSync(targetDir)) {
|
||||
fs.mkdirSync(targetDir, { recursive: true });
|
||||
}
|
||||
|
||||
// 复制文件
|
||||
fs.copyFileSync(service.fullPath, targetPath);
|
||||
}
|
||||
|
||||
function revertService(service) {
|
||||
const targetPath = path.join(TARGET_DIR, service.relativePath);
|
||||
|
||||
// 恢复到空实现版本(从当前HEAD)
|
||||
try {
|
||||
execSync(`git checkout HEAD -- ${targetPath}`, {
|
||||
cwd: path.join(__dirname, '..'),
|
||||
stdio: 'pipe'
|
||||
});
|
||||
} catch (error) {
|
||||
// 如果git checkout失败,删除文件
|
||||
if (fs.existsSync(targetPath)) {
|
||||
fs.unlinkSync(targetPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 主流程
|
||||
async function main() {
|
||||
console.log('╔══════════════════════════════════════════════════════════════╗');
|
||||
console.log('║ 🎯 高质量Service自动提取工具 ║');
|
||||
console.log('╚══════════════════════════════════════════════════════════════╝\n');
|
||||
|
||||
// 1. 获取所有非addon的service
|
||||
console.log('📋 扫描ac00caf备份中的Service文件...');
|
||||
const services = getAllNonAddonServices(BACKUP_DIR);
|
||||
console.log(`✅ 找到 ${services.length} 个非Addon Service\n`);
|
||||
|
||||
// 2. 按优先级排序
|
||||
const priorityOrder = ['auth', 'dict', 'sys', 'member', 'site', 'pay', 'notice', 'other'];
|
||||
services.sort((a, b) => {
|
||||
const aPriority = priorityOrder.indexOf(a.category);
|
||||
const bPriority = priorityOrder.indexOf(b.category);
|
||||
return aPriority - bPriority;
|
||||
});
|
||||
|
||||
// 3. 先验证当前基线是否可编译
|
||||
console.log('🔍 验证当前基线(应该0错误)...');
|
||||
const baselineResult = compileProject();
|
||||
if (!baselineResult.success) {
|
||||
console.log(`❌ 当前基线有 ${baselineResult.errors} 个错误,请先修复!`);
|
||||
process.exit(1);
|
||||
}
|
||||
console.log('✅ 当前基线编译通过(0错误)\n');
|
||||
|
||||
// 4. 逐个提取并验证
|
||||
const results = {
|
||||
success: [],
|
||||
failed: [],
|
||||
total: services.length
|
||||
};
|
||||
|
||||
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
|
||||
console.log('🚀 开始逐个提取并验证...\n');
|
||||
|
||||
for (let i = 0; i < services.length; i++) {
|
||||
const service = services[i];
|
||||
const progress = `[${i + 1}/${services.length}]`;
|
||||
|
||||
console.log(`${progress} ${service.category.toUpperCase()}: ${service.name}`);
|
||||
|
||||
// 提取service
|
||||
extractService(service);
|
||||
|
||||
// 编译验证
|
||||
const result = compileProject();
|
||||
|
||||
if (result.success) {
|
||||
console.log(` ✅ 成功 - 0错误`);
|
||||
results.success.push(service);
|
||||
} else {
|
||||
console.log(` ❌ 失败 - ${result.errors}个错误`);
|
||||
results.failed.push({
|
||||
service,
|
||||
errors: result.errors
|
||||
});
|
||||
|
||||
// 回退这个service
|
||||
revertService(service);
|
||||
console.log(` ↩️ 已回退`);
|
||||
}
|
||||
|
||||
console.log('');
|
||||
}
|
||||
|
||||
// 5. 生成报告
|
||||
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
|
||||
console.log('╔══════════════════════════════════════════════════════════════╗');
|
||||
console.log('║ 📊 提取结果统计 ║');
|
||||
console.log('╚══════════════════════════════════════════════════════════════╝\n');
|
||||
|
||||
console.log(`📁 总扫描: ${results.total} 个Service`);
|
||||
console.log(`✅ 成功提取: ${results.success.length} 个 (${(results.success.length/results.total*100).toFixed(1)}%)`);
|
||||
console.log(`❌ 提取失败: ${results.failed.length} 个 (${(results.failed.length/results.total*100).toFixed(1)}%)\n`);
|
||||
|
||||
if (results.success.length > 0) {
|
||||
console.log('✅ 成功提取的Service:\n');
|
||||
const byCategory = {};
|
||||
results.success.forEach(s => {
|
||||
if (!byCategory[s.category]) byCategory[s.category] = [];
|
||||
byCategory[s.category].push(s.name);
|
||||
});
|
||||
|
||||
Object.keys(byCategory).forEach(category => {
|
||||
console.log(` ${category.toUpperCase()}:`);
|
||||
byCategory[category].forEach(name => {
|
||||
console.log(` - ${name}`);
|
||||
});
|
||||
console.log('');
|
||||
});
|
||||
}
|
||||
|
||||
if (results.failed.length > 0) {
|
||||
console.log('❌ 提取失败的Service(需要手工修复):\n');
|
||||
results.failed.forEach(({ service, errors }) => {
|
||||
console.log(` - ${service.name} (${errors}个错误)`);
|
||||
});
|
||||
console.log('');
|
||||
}
|
||||
|
||||
// 6. 保存详细报告
|
||||
const report = {
|
||||
timestamp: new Date().toISOString(),
|
||||
total: results.total,
|
||||
success: results.success.length,
|
||||
failed: results.failed.length,
|
||||
successRate: (results.success.length / results.total * 100).toFixed(1) + '%',
|
||||
successList: results.success.map(s => s.relativePath),
|
||||
failedList: results.failed.map(f => ({
|
||||
path: f.service.relativePath,
|
||||
errors: f.errors
|
||||
}))
|
||||
};
|
||||
|
||||
const reportPath = path.join(__dirname, '../docs/SERVICE_EXTRACTION_REPORT.json');
|
||||
fs.writeFileSync(reportPath, JSON.stringify(report, null, 2));
|
||||
console.log(`📝 详细报告已保存到: docs/SERVICE_EXTRACTION_REPORT.json\n`);
|
||||
|
||||
console.log('🎉 提取完成!\n');
|
||||
|
||||
if (results.success.length > 0) {
|
||||
console.log('💡 下一步:');
|
||||
console.log(' 1. 提交成功提取的Service');
|
||||
console.log(' 2. 运行时测试验证API功能');
|
||||
console.log(' 3. 根据失败列表手工修复剩余Service\n');
|
||||
}
|
||||
}
|
||||
|
||||
// 执行
|
||||
main().catch(error => {
|
||||
console.error('❌ 执行失败:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
93
wwjcloud-nest-v1/tools/fix-simple-errors.js
Normal file
93
wwjcloud-nest-v1/tools/fix-simple-errors.js
Normal file
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* 修复简单常见错误
|
||||
* 专门处理ac00caf中的常见低级错误
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const BACKUP_DIR = '/tmp/ac00caf-services-backup';
|
||||
|
||||
function getAllServiceFiles(dir, basePath = '') {
|
||||
const services = [];
|
||||
const items = fs.readdirSync(dir, { withFileTypes: true });
|
||||
|
||||
for (const item of items) {
|
||||
const fullPath = path.join(dir, item.name);
|
||||
const relativePath = path.join(basePath, item.name);
|
||||
|
||||
if (item.name === 'addon' || relativePath.includes('/addon/')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (item.isDirectory()) {
|
||||
services.push(...getAllServiceFiles(fullPath, relativePath));
|
||||
} else if (item.name.endsWith('-impl.service.ts')) {
|
||||
services.push({ fullPath, relativePath });
|
||||
}
|
||||
}
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
console.log('🔧 批量修复ac00caf中的简单错误...\n');
|
||||
|
||||
const services = getAllServiceFiles(BACKUP_DIR);
|
||||
let fixCount = 0;
|
||||
|
||||
services.forEach(service => {
|
||||
let content = fs.readFileSync(service.fullPath, 'utf-8');
|
||||
const original = content;
|
||||
|
||||
// 1. 删除孤立的super()调用(没有extends的类)
|
||||
// 查找类声明
|
||||
const classMatch = content.match(/@Injectable\(\)\s*export\s+class\s+\w+\s*\{/);
|
||||
if (classMatch && !content.includes(' extends ')) {
|
||||
// 没有extends,删除super()
|
||||
content = content.replace(/^\s*super\(\);?\s*$/gm, '');
|
||||
}
|
||||
|
||||
// 2. 修复ObjectUtil/StringUtil等Java工具类
|
||||
content = content.replace(/ObjectUtil\.isEmpty\(/g, '!');
|
||||
content = content.replace(/ObjectUtil\.isNotEmpty\(/g, '!!');
|
||||
content = content.replace(/StringUtil\.isEmpty\(/g, '!');
|
||||
content = content.replace(/StringUtil\.isNotEmpty\(/g, '!!');
|
||||
content = content.replace(/StringUtil\.isBlank\(/g, '!');
|
||||
content = content.replace(/StringUtil\.isNotBlank\(/g, '!!');
|
||||
|
||||
// 3. 删除多余的右括号(由于上面的替换产生)
|
||||
content = content.replace(/!!\)/g, '');
|
||||
content = content.replace(/!\)/g, '');
|
||||
|
||||
// 4. 修复CollUtil
|
||||
content = content.replace(/CollUtil\.isEmpty\(/g, '!');
|
||||
content = content.replace(/CollUtil\.isNotEmpty\(/g, '!!');
|
||||
|
||||
// 5. 修复Arrays.asList() → 数组字面量
|
||||
content = content.replace(/Arrays\.asList\(([^)]+)\)/g, '[$1]');
|
||||
|
||||
// 6. 修复Collections.emptyList() → []
|
||||
content = content.replace(/Collections\.emptyList\(\)/g, '[]');
|
||||
content = content.replace(/Collections\.emptyMap\(\)/g, '{}');
|
||||
|
||||
// 7. 修复Optional
|
||||
content = content.replace(/Optional\.ofNullable\(([^)]+)\)\.orElse\(([^)]+)\)/g, '($1) || ($2)');
|
||||
content = content.replace(/Optional\.of\(([^)]+)\)/g, '$1');
|
||||
|
||||
// 8. 修复LocalDateTime.now() → new Date()
|
||||
content = content.replace(/LocalDateTime\.now\(\)/g, 'new Date()');
|
||||
content = content.replace(/LocalDate\.now\(\)/g, 'new Date()');
|
||||
|
||||
// 9. 删除System.out.println
|
||||
content = content.replace(/^\s*System\.out\.println\([^)]*\);?\s*$/gm, '');
|
||||
|
||||
if (content !== original) {
|
||||
fs.writeFileSync(service.fullPath, content, 'utf-8');
|
||||
fixCount++;
|
||||
}
|
||||
});
|
||||
|
||||
console.log(`✅ 已修复 ${fixCount} 个Service的简单错误\n`);
|
||||
console.log('💡 重新运行提取工具验证效果...\n');
|
||||
|
||||
@@ -106,7 +106,7 @@ import { ServeController as ApiWeappServeController } from './controllers/api/we
|
||||
import { WeappController as ApiWeappWeappController } from './controllers/api/weapp/weapp.controller';
|
||||
import { ServeController as ApiWechatServeController } from './controllers/api/wechat/serve.controller';
|
||||
import { WechatController as ApiWechatWechatController } from './controllers/api/wechat/wechat.controller';
|
||||
import { CoreAddonController as CoreCoreAddonController } from './controllers/core/core-addon.controller';
|
||||
// import { CoreAddonController as CoreCoreAddonController } from './controllers/core/core-addon.controller'; // Addon模块已禁用
|
||||
import { CoreAsyncTaskController as CoreCoreAsyncTaskController } from './controllers/core/core-async.controller';
|
||||
import { CoreQueueControlController as CoreCoreQueueControlController } from './controllers/core/core-queue-control.controller';
|
||||
import { HttpServerErrorController as CoreHttpServerErrorController } from './controllers/core/http-server-error.controller';
|
||||
|
||||
Reference in New Issue
Block a user