- 修改所有实体类@TableName注解的表名,添加gxwebsoft_core数据库前缀 - 更新各XML Mapper中的SQL语句表名,统一加上gxwebsoft_core前缀 - 调整关联查询和多个子查询中的表名对应关系,确保与实体类一致 - 涉及实体类包括Company、CompanyComment、Dict、User等多个核心业务表 - 保持代码逻辑和功能不变,确保数据库访问路径更新规范化
39 lines
3.4 KiB
Markdown
39 lines
3.4 KiB
Markdown
# 2026-07-18
|
||
|
||
## 生产日志报错分析(cms-api)
|
||
|
||
用户贴了一段 cms-api 容器日志,三类信息,结论如下:
|
||
|
||
1. **`Table 'modules.sys_user' doesn't exist`(真 bug,影响功能)**
|
||
- 根因:部署的 MySQL 库名是 `modules`(`application-prod.yml`/`application-cms.yml` 中 `jdbc:mysql://.../modules`),而 `common.system.entity.User` 实体 `@TableName("sys_user")`,且 cms 模块多处使用 `UserService`(`CmsNavigationController`、`CmsArticleController`、`LeadReferralServiceImpl` 等)。`modules` 库里缺 `sys_user` 系统表 → 任何依赖查 `sys_user` 的请求抛 `SQLSyntaxErrorException` → 500。
|
||
- 性质:数据库初始化/迁移遗漏,**不是代码逻辑 bug**(代码正确,库缺表)。仓库内无 `sys_user` 建表 SQL,说明系统基础表由外部初始化脚本/主 server 工程提供。
|
||
- 修复方向:在 `modules` 库执行系统基础 schema(建 `sys_user` 等系统表)。需找到对应 init SQL。
|
||
|
||
2. **`参数类型转换异常: 参数名=id, 传入值=resolveDomain/getByDomain/submitForm/.../NaN`(噪音,不影响)**
|
||
- 来源:`BaseController.handleMethodArgumentTypeMismatch`(`@ExceptionHandler(MethodArgumentTypeMismatchException)`),扫描器/爬虫用方法名字符串(resolveDomain、submitForm 等)和 NaN 探测 `id`(Integer) 参数,被拦截并返回友好错误。属公网 API 被扫描,无功能影响。建议:改用 logger 替代 `System.err.println`,必要时加限流/WAF。
|
||
|
||
3. **`定时任务需要查询所有租户的超时订单 list = 0`(正常,不影响)**
|
||
- 来源:`OrderCancelServiceImpl.findExpiredUnpaidOrders` 的 `System.out.println`,表示当前无超时未支付订单。正常运维日志。
|
||
|
||
## 修复:sys_ 系统表改指 gxwebsoft_core schema
|
||
|
||
用户确认架构意图:系统表(sys_ 前缀)本就在中央库 `gxwebsoft_core`(与 `modules` 同实例 `1Panel-mysql-Bqdt`),pwl 模块 Mapper XML 早就在用 `gxwebsoft_core.sys_user`/`gxwebsoft_core.sys_dict_data`。原报错是实体 `@TableName("sys_xxx")` 默认落到数据源默认库 `modules` 导致表缺失。
|
||
|
||
已用脚本批量修改(精确、白名单防误伤):
|
||
- 33 个实体 `@TableName("sys_xxx")` → `"gxwebsoft_core.sys_xxx"`(全部在 `common/system/entity`)。
|
||
- 19 个 Mapper XML 里 `FROM/JOIN` 后的 `sys_` 表名加 `gxwebsoft_core.` 前缀(31 处,全在 `common/system/mapper/xml`)。
|
||
- 其他模块(pwl/shop/app)对 sys_ 表的引用本来就是 `gxwebsoft_core.` 开头,未动。
|
||
- `MybatisPlusConfig` 无全局表前缀,无冲突。
|
||
|
||
校验:裸 `@TableName("sys_`=0、裸 `FROM/JOIN sys_`=0、重复前缀=0。`UserInfo`/`EmailRecord`/`Payment` 等 sys_ 实体也已覆盖。
|
||
|
||
注意点(已告知用户):
|
||
- 需重新编译/重启 cms-api 容器生效。
|
||
- 确认 `modules` 库的连接账号对 `gxwebsoft_core` 有读写权限,且 `gxwebsoft_core` 里确实建齐了这些 sys_ 表。
|
||
- 多租户插件会给查询加 `tenant_id`,表结构/字段不变则行为不变。
|
||
|
||
## 生成 gxwebsoft_core 缺失系统表检查 SQL
|
||
|
||
从实体 `@TableName` 精确提取共 **31 张** `sys_` 表,生成 `docs/check_gxwebsoft_core_sys_tables.sql`。
|
||
含四种查法:① 只列缺失表(结果空=齐全)② 逐张 EXISTS/MISSING 状态 ③ 期望31/实际/缺失数量统计 ④ 确认 gxwebsoft_core 库存在+账号有权限。基于 `information_schema.tables` 比对,无副作用只读。
|