执行环境:
221.182.45.100:8066(Mycat 2.0,MySQL 5.7.33 兼容)
执行时间:2026-09-26 23:06 ~ 23:17
目标逻辑库:charging_pile_other
| 脚本 | 结果 |
|---|---|
20260926_charge_authorization.sql |
无需执行:t_charge_authorization 表已存在,结构与最新脚本完全一致(含 partner_ids、uk_company_id、全部最新注释) |
20260926_charge_authorization_partner_ids.sql |
无需执行:partner_ids 列已存在,执行会报 Duplicate column name |
20260926_vin_menu_repair.sql(本次新建) |
已执行生效:补齐 VIN 码管理菜单(父菜单 / 列表 / 6 个按钮) |
20260926_vin_allocate_auth.sql |
已执行生效:额度分配按钮 menu_id=315,已授予管理员角色 |
charging_pile_other.sys_menu 中原无任何 VIN 相关菜单(path LIKE '%vinManagement%' 计数 = 0)。20260901_vin_management.sql 第 18 行起使用 SET @变量 := (SELECT ...),**Mycat 2.0 不支持用户变量**,导致该脚本菜单部分静默不生效(建表部分正常)。20260926_vin_allocate_auth.sql 首次执行**影响 0 行**(父菜单 /vinManagement/list 不存在,INSERT ... SELECT 无匹配行)。20260926_vin_menu_repair.sql(纯子查询、无用户变量、全部幂等)补齐菜单后重跑权限脚本,生效。OR/AND 优先级缺括号,重复执行报 Duplicate entry '1-307' for key 'sys_role_menu.PRIMARY',已修复(菜单范围整体加括号)。charging_pile_other.sys_menu 新增记录:
| menu_id | parent_id | 名称 | 类型 | perms |
|---|---|---|---|---|
| 307 | 0 | VIN码管理 | M | /vinManagement |
| 308 | 307 | VIN码管理 | C | /vinManagement/list |
| 309 | 308 | 新增 | F | /vinManagement/add |
| 310 | 308 | 编辑 | F | /vinManagement/edit |
| 311 | 308 | 删除 | F | /vinManagement/delete |
| 312 | 308 | 启停 | F | /vinManagement/status |
| 313 | 308 | 导入 | F | /vinManagement/import |
| 314 | 308 | 导出 | F | /vinManagement/export |
| 315 | 308 | 额度分配 | F | /vinManagement/allocate |
charging_pile_other.sys_role_menu:以上 9 条菜单均已授予 role_id = 1(管理员)。
其他确认项:
- t_charge_authorization:表存在、0 行数据(待后台配置)。
- t_vin_management(charging_pile_account):含 company_id / fleet_id / init_quota / app_user_id,20260924 额度脚本已生效。
- t_fleet、t_group_company(charging_pile_other):存在,字段齐备。
三个脚本各重复执行一次(mysql -e "source ..."):
20260926_vin_menu_repair.sql → EXIT=0,无错误20260926_vin_allocate_auth.sql → EXIT=0,无错误20260926_charge_authorization.sql → EXIT=0,无错误ruoyi-api-other + ruoyi-other(充电授权)、ruoyi-api-account + ruoyi-account(VIN 额度分配);前端部署最新产物。# 判断(只读)
mysql -h<host> -P8066 -uroot -p --default-character-set=utf8mb4 -e "SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='charging_pile_other' AND TABLE_NAME='t_charge_authorization'"
# 执行(Mycat 建议先复制为英文文件名,再逐脚本 source)
mysql -h<host> -P8066 -uroot -p --default-character-set=utf8mb4 -e "source <绝对路径>/20260926_vin_menu_repair.sql"
20260926_vin_menu_repair.sql → 20260926_vin_allocate_auth.sql(额度分配按钮依赖 VIN码管理列表菜单)。20260926_charge_authorization.sql 与 20260926_charge_authorization_partner_ids.sql 为二选一分支;表已存在时两者都无需执行。SET @变量 / PREPARE,统一使用子查询写法(本目录脚本已按此改造)。--default-character-set=utf8mb4;ALTER TABLE 属 DDL 不可回滚,生产执行前先备份。| 脚本 | 结果 |
|---|---|
20260926_balance_warning.sql(本次新建) |
已执行生效:charging_pile_other.t_company_balance_warning 创建成功 |
221.182.45.100:8066(Mycat 2.0,--default-character-set=utf8mb4;脚本先复制为英文临时名再 source,并校验 $LASTEXITCODE;临时文件与回查导出已清理)SHOW CREATE TABLE charging_pile_other.t_company_balance_warning 与脚本一致(company_warn_amount / sub_warn_amount decimal(12,2)、notify_object / notify_type tinyint、create_time / update_time / del_flag、唯一键 uk_company_id、中文列注释无乱码),表内 0 行(待后台配置)CREATE TABLE IF NOT EXISTS,重复执行无副作用(生产可随部署直接重跑)ruoyi-api-other + ruoyi-other 新版本与前端产物)| 脚本 | 结果 |
|---|---|
20260927_balance_warning_sub_amount_nullable.sql(本次新建) |
已执行生效:t_company_balance_warning.sub_warn_amount 由 NOT NULL 改为 NULL DEFAULT NULL |
t_group_company.account_mode = 1)公司下无子账户,"子账户预警线"不展示也不提交;原列 NOT NULL 会导致共享模式保存失败,故放宽为可空(存 NULL 表示不适用)。221.182.45.100:8066(Mycat 2.0,--default-character-set=utf8mb4;脚本复制为英文临时名后 source,逐条校验 $LASTEXITCODE;临时文件已清理)information_schema.COLUMNS 显示 sub_warn_amount IS_NULLABLE=YES、注释「子账户预警线(元,共享模式下不适用,存NULL)」;SHOW CREATE TABLE 与脚本一致(company_warn_amount 仍为 NOT NULL,唯一键 uk_company_id 保留),中文注释无乱码ALTER TABLE ... MODIFY COLUMN 语句本身可重复执行,本次连续执行两次均 EXIT=0、结构不变TCompanyBalanceWarning.subWarnAmount 已加 @TableField(updateStrategy = FieldStrategy.IGNORED),否则 MyBatis-Plus 默认策略会忽略 null,共享模式切换后旧子账户预警线不会被清空(该列可空是此策略生效的前提)背景:
TGroupCompany实体(ruoyi-api-other)新增account/password字段后,公司列表报Unknown column 'account' in 'field list'(TGroupCompanyMapper全字段 SELECT)。脚本
20260928_company_account_role.sql此前未生效,两层原因:① 原脚本用SET @变量 := (SELECT ...)+PREPARE/EXECUTE条件化 DDL,Mycat 2.0 不支持用户变量 → 静默失效(与 20260901 VIN 脚本同坑);② 脚本缺USE选库语句,-e "source ..."直接报ERROR 1105 (HY000): please use schema。
| 脚本 | 结果 |
|---|---|
20260928_company_account_role.sql(本次改造为 Mycat 兼容) |
已执行生效:t_group_company 补 account/password 列;sys_role 新增 role_id=74「公司/company」(data_scope=5);sys_user.roleType 注释更新为含 5=公司 |
SET @变量/PREPARE,改为两条直接 ALTER TABLE ... ADD COLUMN ... AFTER(非幂等,重复执行报 Duplicate column name 属预期,脚本头已注明);文件开头补 USE charging_pile_other; 语句;第 2、3 部分(sys_role 幂等 INSERT ... WHERE NOT EXISTS / UPDATE、sys_user MODIFY 注释)写法保持,均无用户变量。221.182.45.100:8066(Mycat 2.0,--default-character-set=utf8mb4,客户端指定默认库 charging_pile_other,脚本复制为 C:\...\Temp\company_account_role.sql 后 -e "source ...",EXIT=0)information_schema.COLUMNS 显示 account varchar(255) / password varchar(255) 位于 contact_phone 之后、中文注释无乱码;sys_role 新增行 role_id=74, role_name=公司, role_key=company, data_scope=5, status=0, del_flag=0;sys_user.roleType 注释=「角色类型 1=平台 2=合作商 3=门店 4=修理厂 5=公司」;**原报错 SQL 原样重放成功**(SELECT ... account,password ... FROM t_group_company WHERE del_flag=0 ORDER BY id DESC LIMIT 5 返回 1 行公司数据)sys_role/sys_user 段抽取为独立脚本连续执行两次,均 EXIT=0 且 role_key='company' 行数恒为 1(全表角色 21 行,无重复插入);ALTER 段以 --force 重跑报 Duplicate column name 'account'(Mycat 遇错即停后续语句,未产生副作用)mvn -B -pl ruoyi-service/ruoyi-other -am test-compile SUCCESS(18 个测试源文件编译通过);surefire 2.22.2 定向 TGroupCompanyServiceImplTest 6/6 通过(0 失败 0 错误)TGroupCompanyServiceImpl 新增/编辑/删除公司与 sys_user(roleType=5、role_key=company)的同步逻辑、前端公司页「登录账号」必填项此前已实现,本次仅补齐数据库结构。account/password 为 NULL;前端编辑公司时「登录账号」为只读禁用态,补录账号需业务侧确认放开前端或后台补数据;sys_role 新角色的菜单权限需在「角色管理」中配置(脚本不涉及)。| 脚本 | 结果 |
|---|---|
20260928_company_preferential.sql(本次新建) |
测试库已执行:charging_pile_other.t_company_preferential(公司管理-优惠设置);2026-09-28 经外网入口 221.182.45.100:8066(与内网 192.168.110.111:8066 同一套 Mycat)source 执行,EXIT=0 |
t_company_recharge_record.preferential_type 保持库默认 1=不优惠,历史记录展示不受影响)。source,并校验 $LASTEXITCODE):bash mysql -h<host> -P8066 -uroot -p --default-character-set=utf8mb4 -e "source <绝对路径>/company_preferential.sql" CREATE TABLE IF NOT EXISTS,可随部署直接重跑;脚本无 SET @变量/PREPARE,且带 USE charging_pile_other;(避免 ERROR 1105 please use schema)。bash mysql -h<host> -P8066 -uroot -p --default-character-set=utf8mb4 -e "SHOW CREATE TABLE charging_pile_other.t_company_preferential\G" ruoyi-api-other + ruoyi-other 新版本与前端产物)。TCompanyPreferential(service_discount_rate / billing_template_id 采用 FieldStrategy.IGNORED,切换优惠方式时旧值可被清空)、CompanyPreferentialDTO、Mapper/Service/Controller(/other/company-preferential/detail|save)、接口 /other/group-company/account-mode;TGroupCompanyServiceImpl.addCompany 对未传账户模式的公司按共享模式(1)建档;前端添加/编辑企业弹窗已删除账户模式配置。SHOW CREATE TABLE charging_pile_other.t_company_preferential 返回 8 列(id / company_id / preferential_type / service_discount_rate / billing_template_id / create_time / update_time / del_flag)+ PRIMARY KEY (id) + UNIQUE KEY uk_company_id USING BTREE (company_id),CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT '公司优惠设置',中文注释无乱码;SELECT COUNT(*) = 0(空表);**原报错 SQL 原样重放**(SELECT id,company_id,preferential_type,service_discount_rate,billing_template_id,update_time,create_time,del_flag FROM t_company_preferential WHERE del_flag=0 AND (company_id = 2))EXIT=0 正常返回空结果集;EXPLAIN 解析到逻辑表 charging_pile_other.t_company_preferential(Mycat targetName: prototype);SHOW COLUMNS 显示 company_id Key=UNI、preferential_type 默认 1、del_flag 默认 0。SHOW TABLES ... LIKE 'x' 会报 Calcite Column 'x' not found in any table(LIKE 字面量被当作列名),回查请改用 SHOW CREATE TABLE 或 SHOW TABLES FROM <逻辑库>;不带默认库名执行 DML 报 ERROR 1105 (HY000) please use schema,需在客户端命令末尾追加库名(或在脚本内 USE)。Object 't_company_preferential' not found within 'charging_pile_other'(本次测试库报错即此原因)。| 脚本 | 结果 |
|---|---|
20260928_unify_quota_to_balance.sql(本次新建) |
尚未执行:VIN 码/白名单/卡片三表舍弃 init_quota、统一使用 balance 表示余额 |
t_vin_management)、刷卡卡(t_charging_card)、白名单(t_app_user_whitelist)的「初始分配额度」init_quota 与余额 balance 语义重复,统一舍弃 init_quota:VIN/白名单 CHANGE COLUMN init_quota balance(保留历史数据),卡片 DROP COLUMN init_quota(卡片已有 balance 列,历史分配记录不保留);额度分配与初始额度写入统一改为 balance 列。source,并校验 $LASTEXITCODE):bash mysql -h<host> -P8066 -uroot -p --default-character-set=utf8mb4 -e "source <绝对路径>/unify_quota_to_balance.sql" ALTER TABLE(2 条 CHANGE + 1 条 DROP),重复执行会报 Unknown column/Duplicate column 类错误,忽略即可;以 information_schema 回查为准。bash mysql -h<host> -P8066 -uroot -p --default-character-set=utf8mb4 -e "SHOW COLUMNS FROM charging_pile_account.t_vin_management LIKE 'balance'" mysql -h<host> -P8066 -uroot -p --default-character-set=utf8mb4 -e "SHOW COLUMNS FROM charging_pile_account.t_app_user_whitelist LIKE 'balance'" mysql -h<host> -P8066 -uroot -p --default-character-set=utf8mb4 -e "SHOW COLUMNS FROM charging_pile_account.t_charging_card LIKE 'init_quota'" initQuota 改为 balance(界面文案保留「初始分配额度」)。Unknown column 'init_quota'。