# 清空 inquiry_robot:询价工单及相关、员工岗位;账号仅保留 admin。 # 只动业务/账号数据,不动角色菜单、报价模板、机器人回复语。 # 禁止对现网 jeecg-boot 执行。 $ErrorActionPreference = "Stop" $mysql = "C:\yutongda\tools\mysql-8.0.39-winx64\bin\mysql.exe" if (-not (Test-Path $mysql)) { $alt = Get-ChildItem "C:\yutongda\tools" -Recurse -Filter "mysql.exe" -ErrorAction SilentlyContinue | Select-Object -First 1 if ($alt) { $mysql = $alt.FullName } } if (-not (Test-Path $mysql)) { throw "mysql.exe not found" } $envFile = "E:\wwwroot\.env" if (-not (Test-Path $envFile)) { throw "missing $envFile" } $hostn = "10.206.0.14" $user = "inquiry_robot" $pass = $null $db = "inquiry_robot" $port = "3306" Get-Content $envFile | ForEach-Object { if ($_ -match '^MYSQL_HOST=(.+)$') { $hostn = $Matches[1].Trim() } if ($_ -match '^MYSQL_PORT=(.+)$') { $port = $Matches[1].Trim() } if ($_ -match '^MYSQL_USER=(.+)$') { $user = $Matches[1].Trim() } if ($_ -match '^MYSQL_PASSWORD=(.+)$') { $pass = $Matches[1].Trim() } if ($_ -match '^MYSQL_DB=(.+)$') { $db = $Matches[1].Trim() } } if (-not $pass) { throw "MYSQL_PASSWORD missing in .env" } if ($db -ne "inquiry_robot") { throw "refuse: MYSQL_DB=$db (must be inquiry_robot)" } Write-Output ("target=" + $hostn + ":" + $port + "/" + $db + " user=" + $user) # 先看清除前计数(表不存在则跳过) $beforeSql = @" SELECT 'BEFORE' AS phase; SELECT 'inq_ticket' AS t, COUNT(*) AS c FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name='inq_ticket' AND (SELECT COUNT(*) FROM inq_ticket) IS NOT NULL; "@ function Invoke-Mysql([string]$sql) { $out = & $mysql -h $hostn -P $port -u $user "-p$pass" --default-character-set=utf8mb4 --batch --raw $db -e $sql 2>&1 $out | ForEach-Object { $s = "$_" if ($s -match "Warning|Using a password") { return } $s } if ($LASTEXITCODE -ne 0) { throw ("mysql failed exit=" + $LASTEXITCODE + " sql_head=" + $sql.Substring(0, [Math]::Min(80, $sql.Length))) } } # 动态:仅对已存在的表做 TRUNCATE / DELETE $clearSql = @" SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS=0; -- ---------- 工单及附属 ---------- DELETE FROM inq_exception_case WHERE EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name='inq_exception_case'); DELETE FROM inq_attachment WHERE EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name='inq_attachment'); DELETE FROM inq_quote WHERE EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name='inq_quote'); DELETE FROM inq_ticket_status_log WHERE EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name='inq_ticket_status_log'); DELETE FROM inq_ticket_segment WHERE EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name='inq_ticket_segment'); DELETE FROM inq_ticket WHERE EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name='inq_ticket'); DELETE FROM inq_dashboard_snapshot WHERE EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name='inq_dashboard_snapshot'); -- ---------- 员工岗位 ---------- DELETE FROM inq_staff_role WHERE EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name='inq_staff_role'); -- ---------- 账号:仅保留 admin ---------- -- 先删非 admin 的关联,再删非 admin 用户 DELETE ur FROM sys_user_role ur INNER JOIN sys_user u ON u.id = ur.user_id WHERE LOWER(u.username) <> 'admin'; DELETE ut FROM sys_user_tenant ut INNER JOIN sys_user u ON u.id = ut.user_id WHERE LOWER(u.username) <> 'admin'; DELETE ud FROM sys_user_depart ud INNER JOIN sys_user u ON u.id = ud.user_id WHERE LOWER(u.username) <> 'admin'; DELETE FROM sys_user WHERE LOWER(username) <> 'admin'; SET FOREIGN_KEY_CHECKS=1; SELECT 'AFTER_COUNTS' AS phase; SELECT 'inq_ticket' AS t, (SELECT COUNT(*) FROM inq_ticket) AS c UNION ALL SELECT 'inq_ticket_status_log', (SELECT COUNT(*) FROM inq_ticket_status_log) UNION ALL SELECT 'inq_ticket_segment', (SELECT COUNT(*) FROM inq_ticket_segment) UNION ALL SELECT 'inq_quote', (SELECT COUNT(*) FROM inq_quote) UNION ALL SELECT 'inq_attachment', (SELECT COUNT(*) FROM inq_attachment) UNION ALL SELECT 'inq_exception_case', (SELECT COUNT(*) FROM inq_exception_case) UNION ALL SELECT 'inq_staff_role', (SELECT COUNT(*) FROM inq_staff_role) UNION ALL SELECT 'sys_user', (SELECT COUNT(*) FROM sys_user) UNION ALL SELECT 'sys_user_role', (SELECT COUNT(*) FROM sys_user_role); SELECT id, username, realname, status FROM sys_user; "@ # 部分环境可能没有某附属表:改用逐表安全清理 $probe = Invoke-Mysql "SHOW TABLES;" Write-Output "=== tables ===" $probe | ForEach-Object { $_ } $tables = @($probe | Where-Object { $_ -and $_ -ne "Tables_in_inquiry_robot" }) function Table-Exists([string]$name) { return $tables -contains $name } $stmts = New-Object System.Collections.Generic.List[string] $stmts.Add("SET NAMES utf8mb4;") $stmts.Add("SET FOREIGN_KEY_CHECKS=0;") # 工单相关 foreach ($t in @( "inq_exception_case", "inq_attachment", "inq_quote", "inq_ticket_status_log", "inq_ticket_segment", "inq_ticket", "inq_dashboard_snapshot", "inq_staff_role" )) { if (Table-Exists $t) { $stmts.Add("DELETE FROM ``$t``;") Write-Output ("will_clear=" + $t) } else { Write-Output ("skip_missing=" + $t) } } if (Table-Exists "sys_user") { if (Table-Exists "sys_user_role") { $stmts.Add("DELETE ur FROM sys_user_role ur INNER JOIN sys_user u ON u.id = ur.user_id WHERE LOWER(u.username) <> 'admin';") } if (Table-Exists "sys_user_tenant") { $stmts.Add("DELETE ut FROM sys_user_tenant ut INNER JOIN sys_user u ON u.id = ut.user_id WHERE LOWER(u.username) <> 'admin';") } if (Table-Exists "sys_user_depart") { $stmts.Add("DELETE ud FROM sys_user_depart ud INNER JOIN sys_user u ON u.id = ud.user_id WHERE LOWER(u.username) <> 'admin';") } $stmts.Add("DELETE FROM sys_user WHERE LOWER(username) <> 'admin';") Write-Output "will_clear_sys_user_keep_admin=1" } else { Write-Output "skip_missing=sys_user" } $stmts.Add("SET FOREIGN_KEY_CHECKS=1;") # 执行前计数 Write-Output "=== BEFORE ===" foreach ($t in @("inq_ticket","inq_staff_role","sys_user")) { if (Table-Exists $t) { Invoke-Mysql "SELECT '$t' AS t, COUNT(*) AS c FROM ``$t``;" | ForEach-Object { $_ } } } if (Table-Exists "sys_user") { Invoke-Mysql "SELECT username, realname FROM sys_user;" | ForEach-Object { $_ } } $execSql = ($stmts -join "`n") Write-Output "=== EXEC ===" Invoke-Mysql $execSql | ForEach-Object { $_ } Write-Output "=== AFTER ===" foreach ($t in @("inq_ticket","inq_ticket_status_log","inq_ticket_segment","inq_quote","inq_attachment","inq_exception_case","inq_staff_role","sys_user","sys_user_role")) { if (Table-Exists $t) { Invoke-Mysql "SELECT '$t' AS t, COUNT(*) AS c FROM ``$t``;" | ForEach-Object { $_ } } } if (Table-Exists "sys_user") { Invoke-Mysql "SELECT id, username, realname, status FROM sys_user;" | ForEach-Object { $_ } } Write-Output "CLEAR_DEMO_DATA_DONE"