47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
from datetime import datetime
|
||
|
||
from sqlalchemy.orm import Session
|
||
|
||
from app.models.download import DownloadRecord
|
||
from app.models.order import Order
|
||
from app.models.user import User
|
||
from app.models.work import Work
|
||
from app.services.wecom_bot import send_wecom_text
|
||
|
||
|
||
def _build_download_notice(work: Work, buyer: User, order: Order) -> str:
|
||
return "\n".join(
|
||
[
|
||
"【图绘下载通知】",
|
||
f"作品ID:{work.id}",
|
||
f"作品标题:{work.title}",
|
||
f"设计师:{work.designer or '-'}",
|
||
f"购买用户:{buyer.nickname or buyer.phone or buyer.id}",
|
||
f"金额:{order.amount}元",
|
||
f"下载时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}",
|
||
f"作品链接:https://tuhui.cloud/detail/{work.id}",
|
||
]
|
||
)
|
||
|
||
|
||
def record_download(db: Session, order: Order, work: Work, buyer: User) -> DownloadRecord:
|
||
existing = db.query(DownloadRecord).filter(DownloadRecord.order_id == order.id).first()
|
||
if existing:
|
||
return existing
|
||
|
||
record = DownloadRecord(
|
||
user_id=buyer.id,
|
||
work_id=work.id,
|
||
order_id=order.id,
|
||
designer_name=work.designer or "",
|
||
work_title=work.title or "",
|
||
amount=float(order.amount or 0.0),
|
||
)
|
||
db.add(record)
|
||
work.downloads = int(work.downloads or 0) + 1
|
||
return record
|
||
|
||
|
||
def notify_download(work: Work, buyer: User, order: Order):
|
||
send_wecom_text(_build_download_notice(work, buyer, order))
|