40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
"""过期单获取器"""
|
|
from typing import List, Dict
|
|
from datetime import datetime
|
|
from src3.tapd_api import TAPDUnifiedApi
|
|
|
|
|
|
class OverdueFetcher:
|
|
"""过期单获取器"""
|
|
|
|
def __init__(self, workspace_id: str, logger):
|
|
self.workspace_id = workspace_id
|
|
self.logger = logger
|
|
self.api = TAPDUnifiedApi(workspace_id, logger)
|
|
|
|
def fetch_all_overdue(self, owner_list: List[str]) -> List[dict]:
|
|
"""获取所有过期单(需求+缺陷)"""
|
|
stories = self.api.get_overdue_stories(owner_list)
|
|
bugs = self.api.get_overdue_bugs(owner_list)
|
|
|
|
# 合并并计算过期天数
|
|
all_items = stories + bugs
|
|
for item in all_items:
|
|
item['overdue_days'] = self.calculate_overdue_days(item['due'])
|
|
item['url'] = self._get_url(item)
|
|
|
|
return all_items
|
|
|
|
def calculate_overdue_days(self, due_date: str) -> int:
|
|
"""计算过期天数"""
|
|
today = datetime.now().date()
|
|
due = datetime.strptime(due_date, '%Y-%m-%d').date()
|
|
return (today - due).days
|
|
|
|
def _get_url(self, item: dict) -> str:
|
|
"""获取单据URL"""
|
|
if item['type'] == 'story':
|
|
return self.api.get_story_url(item['id'])
|
|
else:
|
|
return self.api.get_bug_url(item['id'])
|