fix(备份): 防止恢复脚本覆盖数据库并返回失败码
修复根目录 README 的失效文档链接,改为现有 T+ 本地恢复手册。\n恢复脚本移除 RESTORE WITH REPLACE,默认不覆盖已有数据库;成功和失败均写入结果文件,失败显式返回非零退出码,并统一释放数据库连接。\n\n影响范围:项目导航文档与两个本地 SQL Server 恢复辅助脚本。\n\nCo-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
parent
a4794489b1
commit
35fea3802f
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
营销人员绩效工资核算系统。后端 Python/FastAPI,前端 Vue 3,数据存 MySQL,会话与缓存在 Redis。
|
营销人员绩效工资核算系统。后端 Python/FastAPI,前端 Vue 3,数据存 MySQL,会话与缓存在 Redis。
|
||||||
|
|
||||||
> 当前进度:正式工资闭环及同步运维自动化已完成本地开发验证,支持每周原始采集、有限重试、独立心跳和站内提示,并提供 Windows 托管脚本。生产自动化默认关闭,尚未安装启用;真实金额与整月工资尚未验收,首组样本缺人工指导成本。审核能力保留但默认关闭,多原单更正仍单独跟踪。最新交付见 [开发记录](docs/同步运维自动化与样本核对开发记录_2026-10-30.md) 和 [Windows 操作说明](scripts/windows/README.md)。
|
> 当前进度:正式工资闭环及同步运维自动化已完成本地开发验证,支持每周原始采集、有限重试、独立心跳和站内提示,并提供 Windows 托管脚本。辽宁兴晟达真实样本已在隔离库完成正式导入、核算、月结、报表与导出验收,整月实际工资仍须另行核定,见[真实样本业务闭环验收](docs/真实样本业务闭环验收_2026-11-03.md)。生产自动化默认关闭,尚未安装启用。审核能力保留但默认关闭,多原单更正仍单独跟踪。相关说明见 [T+ 本地恢复与同步开发手册](docs/T+本地恢复与同步开发手册.md) 和 [Windows 操作说明](scripts/windows/README.md)。
|
||||||
|
|
||||||
## 快速开始
|
## 快速开始
|
||||||
|
|
||||||
@ -128,6 +128,8 @@ python e2e/system_management.py # 系统管理 13 项
|
|||||||
|
|
||||||
## 相关文档
|
## 相关文档
|
||||||
|
|
||||||
|
客户现场部署见 [客户现场部署与 T+ 连接说明](docs/客户现场部署与T+连接说明.md):按 Linux 容器、Windows Server 或 Linux 原生选择托管方式,连接客户既有 T+ SQL Server。生产 Compose 为 `docker/docker-compose.prod.yml`,T+ 恢复库编排仅用于本地开发。
|
||||||
|
|
||||||
| 文档 | 内容 |
|
| 文档 | 内容 |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| `backend/README.md` | 后端启动、分层约定、接口清单 |
|
| `backend/README.md` | 后端启动、分层约定、接口清单 |
|
||||||
@ -141,7 +143,7 @@ python e2e/system_management.py # 系统管理 13 项
|
|||||||
- 应用新增迁移后,T+ 页面提供正式业务导入预览/执行;业务列表“正式核算”准备人工业务资料或核算已导入资料,台账可查看逐段依据。
|
- 应用新增迁移后,T+ 页面提供正式业务导入预览/执行;业务列表“正式核算”准备人工业务资料或核算已导入资料,台账可查看逐段依据。
|
||||||
- “生成月结快照”首次成功即锁定该月分配;审批退回、重新生成不解锁。历史已生成工资保留,差额计调整单生成当月。
|
- “生成月结快照”首次成功即锁定该月分配;审批退回、重新生成不解锁。历史已生成工资保留,差额计调整单生成当月。
|
||||||
- 后端接口说明、验证状态和已知边界见 `docs/正式工资闭环开发记录_2026-10-30.md`。旧引擎仅通过 `PAYROLL_ALLOW_LEGACY_CALCULATION` 显式启用作历史兼容,默认关闭,不用于最新规则验收。
|
- 后端接口说明、验证状态和已知边界见 `docs/正式工资闭环开发记录_2026-10-30.md`。旧引擎仅通过 `PAYROLL_ALLOW_LEGACY_CALCULATION` 显式启用作历史兼容,默认关闭,不用于最新规则验收。
|
||||||
- 集成回归使用 `scripts/run_isolated_tests.py`;原 `.venv` 不可用时,本机使用 `backend/.venv-workbench/Scripts/python.exe`。测试运行器保留隔离库供复查,不删除原开发数据。
|
- 集成回归使用 `scripts/run_isolated_tests.py`;原 `.venv` 不可用时,本机使用 `backend/.venv-workbench/Scripts/python.exe`。运行器默认清理本次新建的隔离库和账号,绝不删除原开发数据;需复查失败现场时加 `--keep`。
|
||||||
|
|
||||||
审核默认关闭:`PAYROLL_APPROVAL_ENABLED=false`,工资生成直接完成且不产生审批痕迹;如确需系统内复核,显式开启后沿用财务/领导审核和各类审批参数。此配置与旧核算引擎兼容开关独立。
|
审核默认关闭:`PAYROLL_APPROVAL_ENABLED=false`,工资生成直接完成且不产生审批痕迹;如确需系统内复核,显式开启后沿用财务/领导审核和各类审批参数。此配置与旧核算引擎兼容开关独立。
|
||||||
|
|
||||||
|
|||||||
28
db/restore_run.ps1
Normal file
28
db/restore_run.ps1
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# restore_run.ps1 - 独立进程执行 RESTORE,默认不覆盖已有数据库
|
||||||
|
if (-not $env:PAYROLL_RESTORE_CONNECTION_STRING) { throw "PAYROLL_RESTORE_CONNECTION_STRING is required" }
|
||||||
|
$connStr = $env:PAYROLL_RESTORE_CONNECTION_STRING
|
||||||
|
$c = New-Object System.Data.Odbc.OdbcConnection $connStr
|
||||||
|
$cmd = $null
|
||||||
|
try {
|
||||||
|
$c.Open()
|
||||||
|
$cmd = $c.CreateCommand()
|
||||||
|
$cmd.CommandTimeout = 14400
|
||||||
|
$cmd.CommandText = @"
|
||||||
|
RESTORE DATABASE [UFTData472115_000001]
|
||||||
|
FROM DISK = '\\192.168.1.170\dbbak\ceshi20261026.bak'
|
||||||
|
WITH MOVE 'MsSql' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\UFTData472115_000001.mdf',
|
||||||
|
MOVE 'MsSql_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\UFTData472115_000001_log.ldf',
|
||||||
|
RECOVERY, STATS = 10
|
||||||
|
"@
|
||||||
|
$cmd.ExecuteNonQuery() | Out-Null
|
||||||
|
"RESTORE-DONE-OK" | Out-File 'D:\work\code\PayrollManagementSystem\db\restore_result.txt' -Encoding ascii
|
||||||
|
exit 0
|
||||||
|
} catch {
|
||||||
|
$message = $_.Exception.Message
|
||||||
|
if ($_.Exception.InnerException) { $message = $_.Exception.InnerException.Message }
|
||||||
|
("RESTORE-FAILED: " + $message) | Out-File 'D:\work\code\PayrollManagementSystem\db\restore_result.txt' -Encoding ascii
|
||||||
|
exit 1
|
||||||
|
} finally {
|
||||||
|
if ($cmd) { $cmd.Dispose() }
|
||||||
|
if ($c) { $c.Close(); $c.Dispose() }
|
||||||
|
}
|
||||||
19
db/restore_run2.ps1
Normal file
19
db/restore_run2.ps1
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
if (-not $env:PAYROLL_RESTORE_CONNECTION_STRING) { throw "PAYROLL_RESTORE_CONNECTION_STRING is required" }
|
||||||
|
$connStr = $env:PAYROLL_RESTORE_CONNECTION_STRING
|
||||||
|
$c = New-Object System.Data.Odbc.OdbcConnection $connStr
|
||||||
|
$cmd = $null
|
||||||
|
try {
|
||||||
|
$c.Open()
|
||||||
|
$cmd = $c.CreateCommand()
|
||||||
|
$cmd.CommandTimeout = 14400
|
||||||
|
$cmd.CommandText = "RESTORE DATABASE [UFTData472115_000001] FROM DISK = 'C:\baktmp\ceshi20261026.bak' WITH MOVE 'MsSql' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\UFTData472115_000001.mdf', MOVE 'MsSql_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\UFTData472115_000001_log.ldf', RECOVERY, STATS = 10"
|
||||||
|
$cmd.ExecuteNonQuery() | Out-Null
|
||||||
|
"RESTORE-DONE-OK" | Out-File "D:\work\code\PayrollManagementSystem\db\restore_result.txt" -Encoding ascii
|
||||||
|
exit 0
|
||||||
|
} catch {
|
||||||
|
("RESTORE-FAILED: " + $_.Exception.Message) | Out-File "D:\work\code\PayrollManagementSystem\db\restore_result.txt" -Encoding ascii
|
||||||
|
exit 1
|
||||||
|
} finally {
|
||||||
|
if ($cmd) { $cmd.Dispose() }
|
||||||
|
if ($c) { $c.Close(); $c.Dispose() }
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user