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

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.database import engine, Base, SessionLocal
from app.models import User from app.models import User
from app.seed import seed 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" TEMPLATES_DIR = Path(__file__).parent / "templates"
@@ -56,7 +56,6 @@ app.add_middleware(AuthMiddleware)
app.include_router(auth.router) app.include_router(auth.router)
app.include_router(contracts.router) app.include_router(contracts.router)
app.include_router(analysis.router) app.include_router(analysis.router)
app.include_router(data_input.router)
app.include_router(admin.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 %}"> <a href="/analysis/" class="{% if active_nav == 'analysis' %}active{% endif %}">
<span class="icon">⚔️</span> 博弈分析 <span class="icon">⚔️</span> 博弈分析
</a> </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 %}"> <a href="/admin/" class="{% if active_nav == 'admin' %}active{% endif %}">
<span class="icon">⚙️</span> 系统管理 <span class="icon">⚙️</span> 系统管理
</a> </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 %}