✨ 种子商店新增筛选功能
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import ast
|
||||
import os
|
||||
import re
|
||||
from contextlib import asynccontextmanager
|
||||
from unittest import result
|
||||
|
||||
import aiosqlite
|
||||
|
||||
@@ -87,6 +89,102 @@ class CPlantManager:
|
||||
logger.warning(f"查询作物失败: {name}", e=e)
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
async def getPlantPhaseByName(cls, name: str) -> list:
|
||||
"""根据作物名称获取作物各个阶段
|
||||
|
||||
Args:
|
||||
name (str): 作物名称
|
||||
|
||||
Returns:
|
||||
list: 阶段数组
|
||||
"""
|
||||
try:
|
||||
async with cls.m_pDB.execute(
|
||||
"SELECT phase FROM plant WHERE name = ?", (name,)
|
||||
) as cursor:
|
||||
row = await cursor.fetchone()
|
||||
|
||||
if not row:
|
||||
return []
|
||||
|
||||
phase = row[0].split(',')
|
||||
|
||||
seen = set()
|
||||
result = []
|
||||
for x in phase:
|
||||
if x not in seen:
|
||||
seen.add(x)
|
||||
result.append(x)
|
||||
|
||||
return result
|
||||
except Exception as e:
|
||||
logger.warning(f"查询作物阶段失败: {name}", e=e)
|
||||
return []
|
||||
|
||||
@classmethod
|
||||
async def getPlantPhaseNumberByName(cls, name: str) -> int:
|
||||
"""根据作物名称获取作物总阶段数
|
||||
|
||||
Args:
|
||||
name (str): 作物名称
|
||||
|
||||
Returns:
|
||||
int: 总阶段数
|
||||
"""
|
||||
try:
|
||||
async with cls.m_pDB.execute(
|
||||
"SELECT phase FROM plant WHERE name = ?", (name,)
|
||||
) as cursor:
|
||||
row = await cursor.fetchone()
|
||||
|
||||
if not row:
|
||||
return -1
|
||||
|
||||
phase = row[0].split(',')
|
||||
|
||||
#去重
|
||||
seen = set()
|
||||
result = []
|
||||
for x in phase:
|
||||
if x not in seen:
|
||||
seen.add(x)
|
||||
result.append(x)
|
||||
|
||||
return len(result)
|
||||
except Exception as e:
|
||||
logger.warning(f"查询作物阶段失败: {name}", e=e)
|
||||
return -1
|
||||
|
||||
@classmethod
|
||||
async def getPlantAgainByName(cls, name: str) -> int:
|
||||
"""根据作物名称获取作物再次成熟时间
|
||||
|
||||
Args:
|
||||
name (str): 作物名称
|
||||
|
||||
Returns:
|
||||
int: 再次成熟时间 单位:h
|
||||
"""
|
||||
|
||||
try:
|
||||
async with cls.m_pDB.execute(
|
||||
"SELECT phase FROM plant WHERE name = ?", (name,)
|
||||
) as cursor:
|
||||
row = await cursor.fetchone()
|
||||
|
||||
if not row:
|
||||
return -1
|
||||
|
||||
phase = row[0].split(',')
|
||||
again = phase[-1] - phase[3] / 60 / 60
|
||||
|
||||
return again
|
||||
|
||||
except Exception as e:
|
||||
logger.warning(f"查询作物阶段失败: {name}", e=e)
|
||||
return -1
|
||||
|
||||
@classmethod
|
||||
async def existsPlant(cls, name: str) -> bool:
|
||||
"""判断作物是否存在
|
||||
|
||||
@@ -8,8 +8,8 @@ from zhenxun.utils._build_image import BuildImage
|
||||
|
||||
from ..dbService import g_pDBService
|
||||
from ..json import g_pJsonManager
|
||||
from .database import CSqlManager
|
||||
from ..tool import g_pToolManager
|
||||
from .database import CSqlManager
|
||||
|
||||
|
||||
class CUserSignDB(CSqlManager):
|
||||
@@ -22,7 +22,7 @@ class CUserSignDB(CSqlManager):
|
||||
"isSupplement": "TINYINT NOT NULL DEFAULT 0", #是否补签
|
||||
"exp": "INT NOT NULL DEFAULT 0", #当天签到经验
|
||||
"point": "INT NOT NULL DEFAULT 0", #当天签到金币
|
||||
"createdAt": "DATETIME NOT NULL DEFAULT (datetime(CURRENT_TIMESTAMP, 'localtime')",#创建时间
|
||||
"createdAt": "DATETIME NOT NULL DEFAULT (datetime(CURRENT_TIMESTAMP, 'localtime'))",#创建时间
|
||||
"PRIMARY KEY": "(uid, signDate)"
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ class CUserSignDB(CSqlManager):
|
||||
"lastSignDate": "DATE DEFAULT NULL", #上次签到日期
|
||||
"continuousDays": "INT NOT NULL DEFAULT 0", #连续签到天数
|
||||
"supplementCount": "INT NOT NULL DEFAULT 0", #补签次数
|
||||
"updatedAt": "DATETIME NOT NULL DEFAULT (datetime(CURRENT_TIMESTAMP, 'localtime')"#更新时间
|
||||
"updatedAt": "DATETIME NOT NULL DEFAULT (datetime(CURRENT_TIMESTAMP, 'localtime'))"#更新时间
|
||||
}
|
||||
|
||||
await cls.ensureTableSchema("userSignLog", userSignLog)
|
||||
@@ -188,7 +188,7 @@ class CUserSignDB(CSqlManager):
|
||||
)
|
||||
|
||||
#计算累签奖励
|
||||
reward = g_pJsonManager.m_pSign['continuou'].get(f"{totalSignDays + 1}", None)
|
||||
reward = g_pJsonManager.m_pSign['continuou'].get(f"{totalSignDays}", None)
|
||||
|
||||
if reward:
|
||||
point += reward.get('point', 0)
|
||||
|
||||
+40
-1
@@ -4,8 +4,8 @@ from zhenxun.services.log import logger
|
||||
|
||||
from ..dbService import g_pDBService
|
||||
from ..json import g_pJsonManager
|
||||
from .database import CSqlManager
|
||||
from ..tool import g_pToolManager
|
||||
from .database import CSqlManager
|
||||
|
||||
|
||||
class CUserSoilDB(CSqlManager):
|
||||
@@ -241,6 +241,45 @@ class CUserSoilDB(CSqlManager):
|
||||
(value, uid, soilIndex),
|
||||
)
|
||||
|
||||
@classmethod
|
||||
async def updateUserSoilFields(cls, uid: str, soilIndex: int, updates: dict) -> bool:
|
||||
"""批量更新指定用户土地的多个字段
|
||||
|
||||
Args:
|
||||
uid (str): 用户ID
|
||||
soilIndex (int): 土地索引
|
||||
updates (dict): 字段-新值的字典
|
||||
|
||||
Returns:
|
||||
bool: 如果无可更新字段则返回 False,否则更新成功返回 True
|
||||
"""
|
||||
#允许更新的列白名单
|
||||
allowedFields = {
|
||||
"plantName", "plantTime", "matureTime", "soilLevel",
|
||||
"wiltStatus", "fertilizerStatus", "bugStatus",
|
||||
"weedStatus", "waterStatus", "harvestCount"
|
||||
}
|
||||
setClauses = []
|
||||
values = []
|
||||
for field, value in updates.items():
|
||||
if field not in allowedFields:
|
||||
continue
|
||||
setClauses.append(f'"{field}" = ?')
|
||||
values.append(value)
|
||||
if not setClauses:
|
||||
return False
|
||||
|
||||
values.extend([uid, soilIndex])
|
||||
sql = f'UPDATE userSoil SET {", ".join(setClauses)} WHERE uid = ? AND soilIndex = ?'
|
||||
|
||||
try:
|
||||
async with cls._transaction():
|
||||
await cls.m_pDB.execute(sql, tuple(values))
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"批量更新土地字段失败: {e}")
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
async def deleteUserSoil(cls, uid: str, soilIndex: int):
|
||||
"""删除指定用户的土地记录
|
||||
|
||||
Reference in New Issue
Block a user