修复商店购买逻辑及优化商品展示

This commit is contained in:
HibiKier 2025-01-13 11:38:16 +08:00
parent 3310f784da
commit eb29854478
3 changed files with 24 additions and 7 deletions

View File

@ -410,15 +410,14 @@ class ShopManage:
return "购买的数量要大于0!" return "购买的数量要大于0!"
goods_list = ( goods_list = (
await GoodsInfo.filter( await GoodsInfo.filter(
Q(goods_limit_time__gte=time.time()) | Q(goods_limit_time=0), Q(goods_limit_time__gte=time.time()) | Q(goods_limit_time=0)
goods_limit_time=0,
) )
.annotate() .annotate()
.order_by("id") .order_by("id")
.all() .all()
) )
if name.isdigit(): if name.isdigit():
if int(name) >= len(goods_list) or int(name) <= 0: if int(name) > len(goods_list) or int(name) <= 0:
return "道具编号不存在..." return "道具编号不存在..."
goods = goods_list[int(name) - 1] goods = goods_list[int(name) - 1]
elif filter_goods := [g for g in goods_list if g.goods_name == name]: elif filter_goods := [g for g in goods_list if g.goods_name == name]:

View File

@ -1,3 +1,4 @@
from datetime import datetime
import time import time
from nonebot_plugin_htmlrender import template_to_pic from nonebot_plugin_htmlrender import template_to_pic
@ -19,12 +20,28 @@ class GoodsItem(BaseModel):
"""分区名称""" """分区名称"""
def get_limit_time(end_time: int):
now = int(time.time())
if now > end_time:
return None
current_datetime = datetime.fromtimestamp(now)
end_datetime = datetime.fromtimestamp(end_time)
time_difference = end_datetime - current_datetime
total_seconds = time_difference.total_seconds()
hours = int(total_seconds // 3600)
minutes = int((total_seconds % 3600) // 60)
return f"{hours}:{minutes}"
def get_discount(price: int, discount: float):
return None if discount == 1.0 else int(price * discount)
async def html_image() -> bytes: async def html_image() -> bytes:
"""构建图片""" """构建图片"""
goods_list = ( goods_list = (
await GoodsInfo.filter( await GoodsInfo.filter(
Q(goods_limit_time__gte=time.time()) | Q(goods_limit_time=0), Q(goods_limit_time__gte=time.time()) | Q(goods_limit_time=0)
goods_limit_time=0,
) )
.annotate() .annotate()
.order_by("id") .order_by("id")
@ -48,6 +65,8 @@ async def html_image() -> bytes:
{ {
"id": idx + 1, "id": idx + 1,
"price": goods.goods_price, "price": goods.goods_price,
"discount_price": get_discount(goods.goods_price, goods.goods_discount),
"limit_time": get_limit_time(goods.goods_limit_time),
"daily_limit": goods.daily_limit or "", "daily_limit": goods.daily_limit or "",
"name": goods.goods_name, "name": goods.goods_name,
"icon": icon, "icon": icon,

View File

@ -19,8 +19,7 @@ async def normal_image() -> bytes:
h = 10 h = 10
goods_list = ( goods_list = (
await GoodsInfo.filter( await GoodsInfo.filter(
Q(goods_limit_time__gte=time.time()) | Q(goods_limit_time=0), Q(goods_limit_time__gte=time.time()) | Q(goods_limit_time=0)
goods_limit_time=0,
) )
.annotate() .annotate()
.order_by("id") .order_by("id")