# 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` 比对,无副作用只读。