chore: 迁移项目路径 C:\NeoZQYY → C:\Project\NeoZQYY

开发环境从旧虚拟机 (DESKTOP-KGB0K5G) 迁移到新机器 (DESKTOP-D676QDA),
项目目录从 C:\NeoZQYY 变更为 C:\Project\NeoZQYY,
批量替换 126 个文件中的绝对路径引用。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Neo
2026-04-10 06:45:29 +08:00
parent f9b1039970
commit 66c9ae8738
126 changed files with 4154 additions and 4127 deletions

View File

@@ -4,7 +4,7 @@
分析手动获取的结账数据,检查时间分布
用法:
cd C:/NeoZQYY
cd C:/Project/NeoZQYY
python scripts/ops/_analyze_settlement_data.py
"""

View File

@@ -1,7 +1,7 @@
"""快速检查 ETL 日志尾部 — 一次性脚本"""
import os, sys
LOG = r"C:\NeoZQYY\export\ETL-Connectors\feiqiu\LOGS\2681a85399e64c76a040163f956e1907.log"
LOG = r"C:\Project\NeoZQYY\export\ETL-Connectors\feiqiu\LOGS\2681a85399e64c76a040163f956e1907.log"
f = open(LOG, "rb")
f.seek(0, 2)

View File

@@ -18,7 +18,7 @@ SYSTEM_LOG_ROOT = os.environ.get("SYSTEM_LOG_ROOT")
if not SYSTEM_LOG_ROOT:
raise RuntimeError("SYSTEM_LOG_ROOT 环境变量未设置")
LOG_FILE = Path(r"C:\NeoZQYY\export\ETL-Connectors\feiqiu\LOGS\2681a85399e64c76a040163f956e1907.log")
LOG_FILE = Path(r"C:\Project\NeoZQYY\export\ETL-Connectors\feiqiu\LOGS\2681a85399e64c76a040163f956e1907.log")
if not LOG_FILE.exists():
raise FileNotFoundError(f"日志文件不存在: {LOG_FILE}")

View File

@@ -7,6 +7,6 @@ sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[2] / "apps" / "b
from app.main import app
spec = app.openapi()
out = pathlib.Path(r"C:\NeoZQYY\docs\contracts\openapi\backend-api.json")
out = pathlib.Path(r"C:\Project\NeoZQYY\docs\contracts\openapi\backend-api.json")
out.write_text(json.dumps(spec, ensure_ascii=False, indent=2), encoding="utf-8")
print(f"Done: {len(spec['paths'])} paths, {len(spec['components']['schemas'])} schemas")

View File

@@ -7,7 +7,7 @@
需要手动调用 API 获取最新的结账数据,确认是否为 API 数据源问题。
用法:
cd C:/NeoZQYY
cd C:/Project/NeoZQYY
python scripts/ops/_fetch_settlement_data_manual.py
"""

View File

@@ -4,7 +4,7 @@
SPI 问题最终诊断报告 - 基于数据库实际查询
用法:
cd C:/NeoZQYY
cd C:/Project/NeoZQYY
python scripts/ops/_final_spi_diagnosis_report.py
"""

View File

@@ -1,4 +1,4 @@
path = 'c:/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md'
with open(path, 'rb') as f:
raw = f.read()
crlf = b'\r\n' in raw

View File

@@ -1,4 +1,4 @@
path = 'c:/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md'
with open(path, 'rb') as f:
raw = f.read()
crlf = b'\r\n' in raw
@@ -33,11 +33,11 @@ for i, line in enumerate(lines):
break
if not found:
open('c:/NeoZQYY/scripts/ops/_fix_status.txt','w').write('target not found')
open('c:/Project/NeoZQYY/scripts/ops/_fix_status.txt','w').write('target not found')
else:
doc = '\n'.join(lines)
if crlf:
doc = doc.replace('\n', '\r\n')
with open(path, 'wb') as f:
f.write(doc.encode('utf-8'))
open('c:/NeoZQYY/scripts/ops/_fix_status.txt','w').write('done')
open('c:/Project/NeoZQYY/scripts/ops/_fix_status.txt','w').write('done')

View File

@@ -1,4 +1,4 @@
path = 'c:/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md'
with open(path, 'rb') as f:
raw = f.read()
crlf = b'\r\n' in raw

View File

@@ -1,4 +1,4 @@
path = 'c:/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
with open(path, 'rb') as f:
raw = f.read()
content = raw.decode('utf-8')

View File

@@ -4,7 +4,7 @@
生成飞球 API 结账数据问题综合报告
用法:
cd C:/NeoZQYY
cd C:/Project/NeoZQYY
python scripts/ops/_generate_settlement_issue_report.py
"""

View File

@@ -1,4 +1,4 @@
path = 'c:/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md'
with open(path, 'rb') as f:
raw = f.read()
doc = raw.decode('utf-8').replace('\r\n', '\n')

View File

@@ -4,7 +4,7 @@
检查结账数据 JSON 文件的结构,了解实际字段名称
用法:
cd C:/NeoZQYY
cd C:/Project/NeoZQYY
python scripts/ops/_inspect_settlement_json.py
"""

View File

@@ -4,7 +4,7 @@
调查 ETL 在 2026-02-14 后停止处理的原因
用法:
cd C:/NeoZQYY
cd C:/Project/NeoZQYY
python scripts/ops/_investigate_etl_gap.py
"""

View File

@@ -1,7 +1,7 @@
p1 = 'c:/NeoZQYY/scripts/ops/txt/progress_p1.txt'
p2 = 'c:/NeoZQYY/scripts/ops/txt/progress_p2.txt'
p3 = 'c:/NeoZQYY/scripts/ops/txt/progress_p3.txt'
out = 'c:/NeoZQYY/docs/h5_ui/compare/PROGRESS.md'
p1 = 'c:/Project/NeoZQYY/scripts/ops/txt/progress_p1.txt'
p2 = 'c:/Project/NeoZQYY/scripts/ops/txt/progress_p2.txt'
p3 = 'c:/Project/NeoZQYY/scripts/ops/txt/progress_p3.txt'
out = 'c:/Project/NeoZQYY/docs/h5_ui/compare/PROGRESS.md'
parts = []
for p in [p1, p2, p3]:
with open(p, 'rb') as f:

View File

@@ -1,4 +1,4 @@
path = 'c:/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
with open(path, 'rb') as f:
content = f.read().decode('utf-8')

View File

@@ -1,6 +1,6 @@
import sys
sys.stdout.reconfigure(encoding='utf-8')
path = 'c:/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
with open(path, 'rb') as f:
raw = f.read()
content = raw.decode('utf-8')

View File

@@ -1,6 +1,6 @@
import sys
sys.stdout.reconfigure(encoding='utf-8')
path = 'c:/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md'
with open(path, 'rb') as f:
content = f.read().decode('utf-8')
lines = content.split('\n')

View File

@@ -1,5 +1,5 @@
import sys
path = 'c:/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md'
with open(path, 'rb') as f:
c = f.read().decode('utf-8')

View File

@@ -1,4 +1,4 @@
path = 'c:/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md'
with open(path, 'rb') as f:
raw = f.read()
crlf = b'\r\n' in raw

View File

@@ -1,10 +1,10 @@
import sys
files = [
('c:/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md',
('c:/Project/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md',
'*v4.1\uff082026-03-11\uff09',
'*v4.2\uff082026-03-11\uff09\uff1a\u95f4\u8ddd\u6d4b\u91cf\u4e13\u7528\u5b50\u4ee3\u7406\uff08SPACING-AGENT.md\uff09\uff1b\u901a\u7528\u5de5\u5177 measure_gaps.py\uff1b\u00a70.8 \u65b0\u589e\u95f4\u8ddd\u4ee3\u7406\u8c03\u7528\u63d0\u793a'
),
('c:/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md',
('c:/Project/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md',
'*v1.9\uff082026-03-11\uff09',
'*v2.0\uff082026-03-11\uff09\uff1a\u65b0\u589e\u95f4\u8ddd\u6d4b\u91cf\u4ee3\u7406\uff08\u6309\u9700\u8c03\u7528\uff09\uff1b\u4fee\u590d\u6587\u4ef6\u5934\u90e8\u63cf\u8ff0\u4e3a 4 \u79cd\u4e13\u804c\u5b50\u4ee3\u7406\u6a21\u5f0f'
),

View File

@@ -1,4 +1,4 @@
path = 'c:/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
with open(path, 'rb') as f:
raw = f.read()
crlf = b'\r\n' in raw

View File

@@ -1,4 +1,4 @@
path = 'c:/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
with open(path, 'rb') as f:
content = f.read().decode('utf-8')

View File

@@ -1,4 +1,4 @@
path = 'c:/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
with open(path, 'rb') as f:
content = f.read().decode('utf-8')

View File

@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
path = 'c:/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
with open(path, 'rb') as f:
content = f.read().decode('utf-8')

View File

@@ -1,9 +1,9 @@
璇诲彇鏁版嵁鐩綍: C:\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis
璇诲彇鏁版嵁鐩綍: C:\Project\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis
============================================================
鎶ュ憡鐢熸垚瀹屾垚
============================================================
杈撳嚭璺緞: C:\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis\dataflow_2026-02-26_102219.md
杈撳嚭璺緞: C:\Project\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis\dataflow_2026-02-26_102219.md
鏂囦欢澶у皬: 516.3 KB
============================================================
EXIT_CODE=0

View File

@@ -4,14 +4,14 @@
============================================================
鏁版嵁娴佺粨鏋勫垎鏋愬畬鎴?
============================================================
杈撳嚭鐩綍: C:\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis
杈撳嚭鐩綍: C:\Project\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis
鎶ュ憡鏂囦欢鍚? dataflow_2026-02-26_102114.md
鍒嗘瀽琛ㄦ暟: 21 (21 鎴愬姛, 0 澶辫触)
鎬昏褰曟暟: 3289
钀界洏璺緞:
json_trees: C:\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis\json_trees
db_schemas: C:\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis\db_schemas
field_mappings: C:\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis\field_mappings
bd_descriptions: C:\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis\bd_descriptions
manifest: C:\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis
json_trees: C:\Project\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis\json_trees
db_schemas: C:\Project\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis\db_schemas
field_mappings: C:\Project\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis\field_mappings
bd_descriptions: C:\Project\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis\bd_descriptions
manifest: C:\Project\NeoZQYY\export\SYSTEM\REPORTS\dataflow_analysis
============================================================

View File

@@ -1,5 +1,5 @@
path = 'c:/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
path_hist = 'c:/NeoZQYY/docs/h5_ui/compare/HISTORY.md'
path = 'c:/Project/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md'
path_hist = 'c:/Project/NeoZQYY/docs/h5_ui/compare/HISTORY.md'
with open(path, 'rb') as f:
lines = f.read().decode('utf-8').split('\n')

View File

@@ -4,7 +4,7 @@
更新飞球结账数据分析报告 - 澄清业务合理性
用法:
cd C:/NeoZQYY
cd C:/Project/NeoZQYY
python scripts/ops/_update_settlement_report_final.py
"""

View File

@@ -3,12 +3,12 @@ checks = []
# 1. Check all 5 doc files exist
for f in [
'c:/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md',
'c:/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md',
'c:/NeoZQYY/docs/h5_ui/compare/SPACING-AGENT.md',
'c:/NeoZQYY/docs/h5_ui/compare/PROGRESS.md',
'c:/NeoZQYY/docs/h5_ui/compare/CHANGELOG.md',
'c:/NeoZQYY/docs/h5_ui/compare/HISTORY.md',
'c:/Project/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md',
'c:/Project/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md',
'c:/Project/NeoZQYY/docs/h5_ui/compare/SPACING-AGENT.md',
'c:/Project/NeoZQYY/docs/h5_ui/compare/PROGRESS.md',
'c:/Project/NeoZQYY/docs/h5_ui/compare/CHANGELOG.md',
'c:/Project/NeoZQYY/docs/h5_ui/compare/HISTORY.md',
]:
exists = os.path.exists(f)
size = os.path.getsize(f) if exists else 0
@@ -17,14 +17,14 @@ for f in [
# 2. Check key content in each exec doc
for path, needles, label in [
('c:/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md', [
('c:/Project/NeoZQYY/docs/h5_ui/compare/AGENT-PLAYBOOK.md', [
'PROGRESS.md', 'mcp_recompile', '5.2.5', 'diff \u56fe\u7279\u5f81',
'\u9547\u70b9\u5bf9\u9f50\u6cd5', 'crop', '645', '1128'
], 'PLAYBOOK'),
('c:/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md', [
('c:/Project/NeoZQYY/docs/h5_ui/compare/ORCHESTRATION-PLAN.md', [
'PROGRESS.md', '\u6bcf\u6b21\u4f1a\u8bdd\u5f00\u59cb', 'mcp_recompile', '5.2.5'
], 'ORCH'),
('c:/NeoZQYY/docs/h5_ui/compare/PROGRESS.md', [
('c:/Project/NeoZQYY/docs/h5_ui/compare/PROGRESS.md', [
'\u4e3b\u4ee3\u7406\u4f1a\u8bdd\u6062\u590d\u6d41\u7a0b', 'MCP \u5c31\u7eea\u68c0\u67e5', '\U0001f501 \u91cd\u5199\u4e2d'
], 'PROGRESS'),
]:

View File

@@ -3,7 +3,7 @@ r"""
黑盒集成测试报告 -- 从 API 输入侧与 DB 输出侧ODS/DWD/DWS进行全链路对比。
用法:
cd C:\NeoZQYY
cd C:\Project\NeoZQYY
uv run python scripts/ops/blackbox_test_report.py
输出: ETL_REPORT_ROOT / blackbox_report_<timestamp>.md

View File

@@ -5,7 +5,7 @@ import os
import shutil
from pathlib import Path
ROOT = Path(r"C:\NeoZQYY")
ROOT = Path(r"C:\Project\NeoZQYY")
ETL_AUDIT = ROOT / "apps" / "etl" / "pipelines" / "feiqiu" / "docs" / "audit" / "changes"
ROOT_AUDIT = ROOT / "docs" / "audit" / "changes"

View File

@@ -9,7 +9,7 @@
使用方式:
cd apps/etl/connectors/feiqiu
python C:/NeoZQYY/scripts/ops/fetch_complex_orders.py
python C:/Project/NeoZQYY/scripts/ops/fetch_complex_orders.py
"""
from __future__ import annotations

View File

@@ -1,7 +1,7 @@
# 生成 ETL 全流程联调综合报告
# 输出路径:{SYSTEM_LOG_ROOT}/{date}__etl_integration_report.md
# 环境变量 SYSTEM_LOG_ROOT 缺失时报错终止。
# 用法cd C:\NeoZQYY && python scripts/ops/gen_integration_report.py
# 用法cd C:\Project\NeoZQYY && python scripts/ops/gen_integration_report.py
import os
import sys

View File

@@ -19,7 +19,7 @@ CACHE_ROOT = Path(
r"\kiro.kiroagent\f2aaff8dac256b544f00059b8ef5d1e2"
r"\74a08cf8613c7dec4db7b264470db812"
)
WORKSPACE = Path(r"C:\NeoZQYY")
WORKSPACE = Path(r"C:\Project\NeoZQYY")
TARGET_PREFIX = Path("docs") / "h5_ui"

View File

@@ -8,7 +8,7 @@ import os
import psycopg2
CONN = dict(host="100.64.0.4", port=5432, user="local-Python", password="Neo-local-1991125")
BASE = r"C:\NeoZQYY"
BASE = r"C:\Project\NeoZQYY"
# 实际密码替换占位符 '***'
APP_READER_PWD = "AppR3ad_2026!"

View File

@@ -6,7 +6,7 @@ $ErrorActionPreference = "Stop"
try {
# CHANGE 2026-03-07 | 定位项目根目录:从 bat 启动目录推算,不穿透 junction
# 背景C:\NeoZQYY 是 junction → D:\NeoZQYY\...\repo
# 背景C:\Project\NeoZQYY 是 junction → D:\NeoZQYY\...\repo
# $MyInvocation.MyCommand.Path 和 Split-Path 都会穿透 junction 解析到 D 盘,
# 导致后端 CWD、.venv python、.env 全部指向 D 盘副本。
# 解决:优先用环境变量 NEOZQYY_ROOT其次用 bat 传入的 %~dp0不穿透 junction

View File

@@ -13,7 +13,7 @@ def run(cmd: str, retries: int = 3, delay: float = 2.0) -> bool:
print(f" [{attempt}/{retries}] {cmd}")
result = subprocess.run(
cmd, shell=True, capture_output=True, text=True,
cwd=r"C:\NeoZQYY", encoding="utf-8", errors="replace",
cwd=r"C:\Project\NeoZQYY", encoding="utf-8", errors="replace",
)
if result.returncode == 0:
if result.stdout.strip():
@@ -49,7 +49,7 @@ def main():
# 获取 dev 的 HEAD commit
result = subprocess.run(
"git rev-parse dev", shell=True, capture_output=True, text=True,
cwd=r"C:\NeoZQYY", encoding="utf-8",
cwd=r"C:\Project\NeoZQYY", encoding="utf-8",
)
if result.returncode != 0:
print("无法获取 dev 的 HEAD退出")
@@ -71,7 +71,7 @@ def main():
# 恢复 stash如果有
stash_result = subprocess.run(
"git stash list", shell=True, capture_output=True, text=True,
cwd=r"C:\NeoZQYY", encoding="utf-8",
cwd=r"C:\Project\NeoZQYY", encoding="utf-8",
)
if stash_result.stdout.strip():
print("恢复 stash…")