Files

124 lines
4.1 KiB
Python

"""Run all CMA tasks by direct import - no subprocess needed"""
import sys, os
backend_dir = '/root/cma-management/backend'
sys.path.insert(0, backend_dir)
os.chdir(backend_dir)
os.environ['PYTHONPATH'] = backend_dir
# Load env
from dotenv import load_dotenv
load_dotenv()
# Import all needed modules
from app.database import get_session_local
from app.models import DataSourceConfig, KPIValue, KPIDefinition
from openpyxl import Workbook, load_workbook
import urllib.request, json
print("=" * 70)
print("【子任务1】插入数据源记录")
print("=" * 70)
db = get_session_local()()
try:
existing = db.query(DataSourceConfig).filter(DataSourceConfig.name == 'ERP系统 - 博海网络').first()
if existing:
print(f" [OK] 已存在: id={existing.id}")
else:
s = DataSourceConfig(name='ERP系统 - 博海网络', source_type='erp',
api_endpoint='http://127.0.0.1:8300/api/v1',
api_key='erp-gateway-key-bhwl-2026', sync_type='batch', status='active')
db.add(s); db.commit(); db.refresh(s)
print(f" [OK] 插入成功: id={s.id}")
for r in db.query(DataSourceConfig).all():
print(f" id={r.id}, name={r.name}, type={r.source_type}, status={r.status}")
finally:
db.close()
print()
print("=" * 70)
print("【子任务4】创建Excel导入模板")
print("=" * 70)
template_dir = os.path.join(backend_dir, 'templates')
os.makedirs(template_dir, exist_ok=True)
wb = Workbook()
ws = wb.active
ws.title = 'KPI导入模板'
for i, h in enumerate(['kpi_code', 'kpi_name', 'period', 'actual_value', 'unit', 'dimension'], 1):
ws.cell(row=1, column=i, value=h)
sample = [
['F_REVENUE', '营业收入', '2026-06', 500000, '万元', 'finance'],
['F_PROFIT_RATE', '销售毛利率', '2026-06', 28.5, '%', 'finance'],
]
for ri, rd in enumerate(sample, 2):
for ci, v in enumerate(rd, 1):
ws.cell(row=ri, column=ci, value=v)
fp = os.path.join(template_dir, 'kpi_import_template.xlsx')
wb.save(fp)
print(f" [OK] 模板已创建: {fp} ({os.path.getsize(fp)} bytes)")
print()
print("=" * 70)
print("【子任务2】ERP同步验证")
print("=" * 70)
# Check backend
try:
req = urllib.request.Request('http://127.0.0.1:8010/health')
resp = urllib.request.urlopen(req, timeout=3)
print(f" [OK] 后端服务运行中: {json.loads(resp.read())}")
except Exception as e:
print(f" [INFO] 后端服务未运行: {e}")
# Run ERP sync - dry run then actual
from scripts.erp_sync import run_sync
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(name)s: %(message)s')
print("\n --- dry-run ---")
run_sync(dry_run=True)
print("\n --- 实际同步 ---")
run_sync(dry_run=False)
print("\n --- 验证 kpi_values ---")
db = get_session_local()()
try:
vals = db.query(KPIValue).filter(KPIValue.source_type == 'erp').all()
print(f" source_type='erp' 记录数: {len(vals)}")
for v in vals:
k = db.query(KPIDefinition).filter(KPIDefinition.id == v.kpi_id).first()
kc = k.kpi_code if k else '?'
print(f" {kc} | {v.period} | {v.actual_value} | {v.data_status} | {v.remark[:40] if v.remark else ''}")
finally:
db.close()
print()
print("=" * 70)
print("【子任务3】Crontab设定")
print("=" * 70)
# Read current crontab and check
import subprocess
result = subprocess.run(['crontab', '-l'], capture_output=True, text=True, timeout=10)
existing = result.stdout if result.returncode == 0 else ''
cron_line = "0 1 * * * cd /root/cma-management/backend && /usr/bin/python3 scripts/erp_sync.py >> /var/log/cma-erp-sync.log 2>&1"
if 'erp_sync' in existing:
print(" [OK] cron任务已存在")
else:
new_cron = existing.strip() + '\n' + cron_line + '\n' if existing.strip() else cron_line + '\n'
r = subprocess.run(['crontab'], input=new_cron, capture_output=True, text=True, timeout=10)
if r.returncode == 0:
print(f" [OK] cron已添加: {cron_line}")
else:
print(f" [WARN] 添加失败: {r.stderr}")
print(f" 请手动运行: (crontab -l 2>/dev/null; echo '{cron_line}') | crontab -")
print()
print("=" * 50)
print("所有任务执行完毕")
print("=" * 50)