落地报价模板主账与后台:合同映射、灌种 SQL/脚本、智能体填表,并补测服运维探针与合同文档对齐。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
# 清空 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"
|
||||
Reference in New Issue
Block a user