数据同步页增加持仓天数展示,修复持仓同步无法拉取历史数据的问题

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-07-25 21:52:32 +08:00
parent 9fd0116dec
commit d62304b2c4
3 changed files with 10 additions and 8 deletions
-6
View File
@@ -113,12 +113,6 @@ def sync_positions_bg(contract_code: str) -> bool:
.filter(DailyBar.contract == code) .filter(DailyBar.contract == code)
.order_by(DailyBar.date).all() .order_by(DailyBar.date).all()
] ]
# Only sync dates within or after existing position date range;
# akshare may not have data for very old dates
if existing_dates:
min_pos = min(existing_dates)
missing = [d for d in bar_dates if d not in existing_dates and d >= min_pos]
else:
missing = [d for d in bar_dates if d not in existing_dates] missing = [d for d in bar_dates if d not in existing_dates]
total_missing = len(missing) total_missing = len(missing)
+7
View File
@@ -31,9 +31,16 @@ def admin_page(request: Request, db: Session = Depends(get_db)):
.filter(DailyBar.contract == c.code) .filter(DailyBar.contract == c.code)
.count() .count()
) )
pos_days = len({
r[0] for r in
db.query(PositionRanking.date)
.filter(PositionRanking.contract_code == c.code)
.distinct().all()
})
contract_list.append({ contract_list.append({
"id": c.id, "code": c.code, "name": c.name, "id": c.id, "code": c.code, "name": c.name,
"is_active": c.is_active, "bar_count": bar_count, "is_active": c.is_active, "bar_count": bar_count,
"pos_days": pos_days,
}) })
product_data.append({ product_data.append({
+2 -1
View File
@@ -59,11 +59,12 @@
</div> </div>
<div class="product-body" style="display:none;"> <div class="product-body" style="display:none;">
<table style="font-size:0.84rem;"> <table style="font-size:0.84rem;">
<tr><th style="text-align:left;padding:8px 14px;">合约</th><th style="text-align:center;padding:8px 14px;">数据条数</th><th style="text-align:center;padding:8px 14px;">状态</th><th style="text-align:center;padding:8px 14px;">操作</th></tr> <tr><th style="text-align:left;padding:8px 14px;">合约</th><th style="text-align:center;padding:8px 14px;">行情</th><th style="text-align:center;padding:8px 14px;">持仓</th><th style="text-align:center;padding:8px 14px;">状态</th><th style="text-align:center;padding:8px 14px;">操作</th></tr>
{% for c in p.contracts %} {% for c in p.contracts %}
<tr> <tr>
<td style="text-align:left;padding:6px 14px;"><strong>{{ c.code }}</strong></td> <td style="text-align:left;padding:6px 14px;"><strong>{{ c.code }}</strong></td>
<td style="text-align:center;padding:6px 14px;">{{ c.bar_count }}</td> <td style="text-align:center;padding:6px 14px;">{{ c.bar_count }}</td>
<td style="text-align:center;padding:6px 14px;">{{ c.pos_days }}</td>
<td style="text-align:center;padding:6px 14px;"> <td style="text-align:center;padding:6px 14px;">
{% if c.is_active %}<span class="badge badge-up">启用</span>{% else %}<span class="badge badge-down">停用</span>{% endif %} {% if c.is_active %}<span class="badge badge-up">启用</span>{% else %}<span class="badge badge-down">停用</span>{% endif %}
</td> </td>