Files
mp-java/.workbuddy/memory/2026-07-18.md
赵忠林 07bc994eba refactor(database): 更新实体及Mapper中表名为gxwebsoft_core前缀
- 修改所有实体类@TableName注解的表名,添加gxwebsoft_core数据库前缀
- 更新各XML Mapper中的SQL语句表名,统一加上gxwebsoft_core前缀
- 调整关联查询和多个子查询中的表名对应关系,确保与实体类一致
- 涉及实体类包括Company、CompanyComment、Dict、User等多个核心业务表
- 保持代码逻辑和功能不变,确保数据库访问路径更新规范化
2026-07-19 00:12:22 +08:00

3.4 KiB
Raw Blame History

2026-07-18

生产日志报错分析cms-api

用户贴了一段 cms-api 容器日志,三类信息,结论如下:

  1. Table 'modules.sys_user' doesn't exist(真 bug影响功能

    • 根因:部署的 MySQL 库名是 modulesapplication-prod.yml/application-cms.ymljdbc:mysql://.../modules),而 common.system.entity.User 实体 @TableName("sys_user"),且 cms 模块多处使用 UserServiceCmsNavigationControllerCmsArticleControllerLeadReferralServiceImpl 等)。modules 库里缺 sys_user 系统表 → 任何依赖查 sys_user 的请求抛 SQLSyntaxErrorException → 500。
    • 性质:数据库初始化/迁移遗漏,不是代码逻辑 bug(代码正确,库缺表)。仓库内无 sys_user 建表 SQL说明系统基础表由外部初始化脚本/主 server 工程提供。
    • 修复方向:在 modules 库执行系统基础 schemasys_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.findExpiredUnpaidOrdersSystem.out.println,表示当前无超时未支付订单。正常运维日志。

修复sys_ 系统表改指 gxwebsoft_core schema

用户确认架构意图系统表sys_ 前缀)本就在中央库 gxwebsoft_core(与 modules 同实例 1Panel-mysql-Bqdtpwl 模块 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 比对,无副作用只读。