Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
350c9fb877 |
32
app.py
32
app.py
@@ -398,18 +398,46 @@ def api_calendar_sync():
|
||||
@app.route('/api/calendar-sync-all', methods=['GET'])
|
||||
@login_required
|
||||
def api_calendar_sync_all():
|
||||
"""批量查询过去15天~未来15天的钉钉日程,按日期分组返回"""
|
||||
"""批量查询过去15天~未来15天的钉钉日程,按日期分组返回,并自动填充到对应日期的 checkin"""
|
||||
import json as _json
|
||||
from datetime import datetime, timedelta
|
||||
today = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
results = []
|
||||
saved_days = 0
|
||||
for delta in range(-15, 16):
|
||||
d = today + timedelta(days=delta)
|
||||
ds = d.strftime('%Y-%m-%d')
|
||||
events = _fetch_dingtalk_events(ds)
|
||||
if events:
|
||||
results.append({'date': ds, 'events': events})
|
||||
return jsonify({'ok': True, 'data': results})
|
||||
# 自动去重填充到对应日期的 checkin
|
||||
existing = get_checkin(ds)
|
||||
data = existing['data'] if existing else {'morning': [], 'evening': [], 'study': []}
|
||||
morning = data.get('morning', [])
|
||||
existing_texts = set()
|
||||
for mi in morning:
|
||||
t = mi if isinstance(mi, str) else mi.get('text', '')
|
||||
if t.strip():
|
||||
existing_texts.add(t.strip())
|
||||
added = False
|
||||
for evt in events:
|
||||
summary = (evt.get('summary') or '').strip()
|
||||
if not summary:
|
||||
continue
|
||||
text = f"【{evt['time']}】{summary}" if evt.get('time') else summary
|
||||
loc = evt.get('location', '')
|
||||
if loc:
|
||||
text += f" @{loc}"
|
||||
text = text.strip()
|
||||
if text not in existing_texts:
|
||||
morning.append(text)
|
||||
existing_texts.add(text)
|
||||
added = True
|
||||
if added:
|
||||
data['morning'] = morning
|
||||
save_checkin(ds, data)
|
||||
saved_days += 1
|
||||
return jsonify({'ok': True, 'data': results, 'saved_days': saved_days})
|
||||
|
||||
|
||||
# ── 启动 ──────────────────────────────────────────────
|
||||
|
||||
@@ -410,7 +410,7 @@
|
||||
var totalDays = data.length;
|
||||
var totalEvents = 0;
|
||||
data.forEach(function(d){ totalEvents += d.events.length; });
|
||||
summary.innerHTML = '同步完成!共 <b>' + totalDays + '</b> 天有日程,合计 <b>' + totalEvents + '</b> 个会议';
|
||||
summary.innerHTML = '同步完成!共 <b>' + totalDays + '</b> 天有日程,合计 <b>' + totalEvents + '</b> 个会议' + (res.saved_days ? ',已自动填充 <b>' + res.saved_days + '</b> 天' : '');
|
||||
|
||||
// 渲染结果列表
|
||||
var html = '';
|
||||
|
||||
Reference in New Issue
Block a user