移除数据录入模块,持仓数据跟随种子数据加载

This commit is contained in:
2026-07-24 22:45:13 +08:00
parent 970bea5222
commit 2bcae30378
4 changed files with 1 additions and 121 deletions
+1 -2
View File
@@ -7,7 +7,7 @@ from starlette.middleware.base import BaseHTTPMiddleware
from app.database import engine, Base, SessionLocal
from app.models import User
from app.seed import seed
from app.routers import contracts, analysis, data_input, admin, auth
from app.routers import contracts, analysis, admin, auth
TEMPLATES_DIR = Path(__file__).parent / "templates"
@@ -56,7 +56,6 @@ app.add_middleware(AuthMiddleware)
app.include_router(auth.router)
app.include_router(contracts.router)
app.include_router(analysis.router)
app.include_router(data_input.router)
app.include_router(admin.router)
-71
View File
@@ -1,71 +0,0 @@
from datetime import date
from fastapi import APIRouter, Depends, Form, Request
from fastapi.responses import HTMLResponse, RedirectResponse
from sqlalchemy.orm import Session
from app.database import get_db
from app.models import PositionSnapshot
router = APIRouter(prefix="/input", tags=["input"])
INSTITUTIONS = ["中信期货", "高盛期货", "国泰君安期货", "华泰期货", "东证期货", "银河期货"]
@router.get("/", response_class=HTMLResponse)
def input_page(request: Request):
template = request.app.state.templates.get_template("input.html")
return HTMLResponse(
template.render(request=request, active_nav="input", institutions=INSTITUTIONS)
)
@router.post("/")
def submit_position(
request: Request,
institution: str = Form(...),
direction: str = Form(...),
date_str: str = Form(...),
position: int = Form(...),
avg_cost: float = Form(...),
db: Session = Depends(get_db),
):
d = date.fromisoformat(date_str)
prev = (
db.query(PositionSnapshot)
.filter(
PositionSnapshot.institution == institution,
PositionSnapshot.direction == direction,
PositionSnapshot.date < d,
)
.order_by(PositionSnapshot.date.desc())
.first()
)
delta = position - prev.position if prev else 0
existing = (
db.query(PositionSnapshot)
.filter(
PositionSnapshot.institution == institution,
PositionSnapshot.direction == direction,
PositionSnapshot.date == d,
)
.first()
)
if existing:
existing.position = position
existing.delta = delta
existing.avg_cost = avg_cost
else:
snap = PositionSnapshot(
institution=institution,
direction=direction,
date=d,
position=position,
delta=delta,
avg_cost=avg_cost,
)
db.add(snap)
db.commit()
return RedirectResponse("/analysis", status_code=303)
-3
View File
@@ -198,9 +198,6 @@
<a href="/analysis/" class="{% if active_nav == 'analysis' %}active{% endif %}">
<span class="icon">⚔️</span> 博弈分析
</a>
<a href="/input/" class="{% if active_nav == 'input' %}active{% endif %}">
<span class="icon">📝</span> 数据录入
</a>
<a href="/admin/" class="{% if active_nav == 'admin' %}active{% endif %}">
<span class="icon">⚙️</span> 系统管理
</a>
-45
View File
@@ -1,45 +0,0 @@
{% extends "base.html" %}
{% block title %}数据录入{% endblock %}
{% block heading %}数据录入{% endblock %}
{% block breadcrumb %}机构持仓录入{% endblock %}
{% block content %}
<div class="form-card">
<div class="section-title">持仓快照</div>
<form method="post" action="/input">
<div class="form-group">
<label>机构</label>
<select name="institution" required>
{% for inst in institutions %}
<option value="{{ inst }}">{{ inst }}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label>方向</label>
<select name="direction" required>
<option value="long">多单</option>
<option value="short">空单</option>
</select>
</div>
<div class="form-group">
<label>日期</label>
<input type="date" name="date_str" required>
</div>
<div class="form-group">
<label>持仓量(手)</label>
<input type="number" name="position" required placeholder="例: 193030">
</div>
<div class="form-group">
<label>持仓均价</label>
<input type="number" name="avg_cost" step="0.01" required placeholder="例: 995.26">
</div>
<button type="submit" class="btn btn-primary">提交</button>
</form>
</div>
{% endblock %}