feat: OKR模板库改造 — 弹窗模板库联动+时间分解落库+制造业包6个
This commit is contained in:
@@ -155,9 +155,39 @@ def create_plan(
|
||||
db.add(plan)
|
||||
db.commit()
|
||||
db.refresh(plan)
|
||||
|
||||
# OKR时间分解:KR创建时自动生成3个月度里程碑(按截止日期向前均分)
|
||||
if due_date and not plan.monthly_milestones:
|
||||
try:
|
||||
plan.monthly_milestones = _auto_build_milestones(due_date)
|
||||
db.commit()
|
||||
except Exception:
|
||||
db.rollback() # 里程碑生成失败不影响KR创建
|
||||
db.refresh(plan)
|
||||
return plan_to_dict(plan)
|
||||
|
||||
|
||||
def _auto_build_milestones(due_date: datetime) -> list:
|
||||
"""按截止日期向前均分3个月度里程碑"""
|
||||
base = due_date.replace(day=1)
|
||||
month_keys = []
|
||||
for i in range(3, 0, -1):
|
||||
y, m = base.year, base.month - i
|
||||
while m <= 0:
|
||||
m += 12
|
||||
y -= 1
|
||||
month_keys.append(f"{y:04d}-{m:02d}")
|
||||
return [
|
||||
{
|
||||
"month": mk,
|
||||
"label": f"里程碑{i + 1}",
|
||||
"status": "pending",
|
||||
"target": None,
|
||||
}
|
||||
for i, mk in enumerate(month_keys)
|
||||
]
|
||||
|
||||
|
||||
@router.put("/{plan_id}")
|
||||
def update_plan(
|
||||
plan_id: int,
|
||||
|
||||
Reference in New Issue
Block a user