2025-06-07 10:45:09 +08:00
|
|
|
|
from db.pgsql import PostgreSQL
|
|
|
|
|
|
from db.system_config_dao import SystemConfigDAO
|
2025-06-16 11:55:19 +08:00
|
|
|
|
import logging
|
2025-06-07 10:45:09 +08:00
|
|
|
|
|
2025-06-16 11:55:19 +08:00
|
|
|
|
class LoginDAO:
|
|
|
|
|
|
"""用户登录数据访问对象"""
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
|
"""初始化数据访问对象"""
|
|
|
|
|
|
self.db = PostgreSQL()
|
|
|
|
|
|
|
|
|
|
|
|
def __del__(self):
|
|
|
|
|
|
"""析构函数,确保数据库连接关闭"""
|
|
|
|
|
|
if hasattr(self, 'db'):
|
|
|
|
|
|
# 如果连接还打开着,确保关闭
|
|
|
|
|
|
try:
|
|
|
|
|
|
self.db.disconnect()
|
|
|
|
|
|
except:
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
def check_user_login(self, user_id: str, password: str) -> bool:
|
|
|
|
|
|
"""检查用户登录凭证
|
|
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
|
user_id: 用户ID
|
|
|
|
|
|
password: 用户密码
|
|
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
bool: 登录是否成功
|
|
|
|
|
|
"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
self.db.connect()
|
|
|
|
|
|
sql = "SELECT 1 FROM sys_user WHERE user_id=%s AND password=md5(%s)"
|
|
|
|
|
|
result = self.db.execute_query(sql, (user_id, password))
|
|
|
|
|
|
return bool(len(result) > 0)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
logging.error(f"检查用户登录失败: {str(e)}")
|
|
|
|
|
|
return False
|
|
|
|
|
|
finally:
|
|
|
|
|
|
self.db.disconnect()
|
|
|
|
|
|
|
|
|
|
|
|
def get_user_info(self, user_id: str):
|
|
|
|
|
|
"""获取用户信息
|
|
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
|
user_id: 用户ID
|
|
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
tuple: (用户名, 公司名, 公司ID, 职位ID) 或 (None, None, None, None)
|
|
|
|
|
|
"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
self.db.connect()
|
|
|
|
|
|
sql = """
|
|
|
|
|
|
SELECT user_id, nick_name AS user_name, position_id,
|
|
|
|
|
|
f_getname('GETCORPEXP', '', '', org_id) AS corp_name,
|
|
|
|
|
|
org_id AS corp_id, default_org_id
|
|
|
|
|
|
FROM sys_user
|
|
|
|
|
|
WHERE user_id = %s
|
|
|
|
|
|
"""
|
|
|
|
|
|
result = self.db.execute_query(sql, (user_id,))
|
|
|
|
|
|
if result:
|
|
|
|
|
|
user_name = result[0]['user_name']
|
|
|
|
|
|
corp_name = result[0]['corp_name']
|
|
|
|
|
|
corp_id = result[0]['corp_id']
|
|
|
|
|
|
position_id = result[0]['position_id']
|
|
|
|
|
|
default_org_id = result[0]['default_org_id']
|
|
|
|
|
|
|
|
|
|
|
|
# 如果有默认账套ID,使用默认账套ID替代登录账套ID
|
|
|
|
|
|
if default_org_id:
|
|
|
|
|
|
corp_id = default_org_id
|
|
|
|
|
|
# 查询默认账套的名称
|
|
|
|
|
|
corp_name_sql = """
|
|
|
|
|
|
SELECT corp_exp
|
|
|
|
|
|
FROM sys_org
|
|
|
|
|
|
WHERE org_id = %s
|
|
|
|
|
|
"""
|
|
|
|
|
|
corp_result = self.db.execute_query(corp_name_sql, (corp_id,))
|
|
|
|
|
|
if corp_result:
|
|
|
|
|
|
corp_name = corp_result[0]['corp_exp']
|
|
|
|
|
|
|
|
|
|
|
|
# 将用户的当前账套ID保存到内存中
|
|
|
|
|
|
SystemConfigDAO.save_user_selected_corp(user_id, corp_id)
|
|
|
|
|
|
|
|
|
|
|
|
return user_name, corp_name, corp_id, position_id
|
|
|
|
|
|
return None, None, None, None
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
logging.error(f"获取用户信息失败: {str(e)}")
|
|
|
|
|
|
return None, None, None, None
|
|
|
|
|
|
finally:
|
|
|
|
|
|
self.db.disconnect()
|
|
|
|
|
|
|
|
|
|
|
|
# 为保持向后兼容,添加全局函数
|
2025-06-07 10:45:09 +08:00
|
|
|
|
def check_user_login(user_id: str, password: str) -> bool:
|
2025-06-16 11:55:19 +08:00
|
|
|
|
dao = LoginDAO()
|
|
|
|
|
|
return dao.check_user_login(user_id, password)
|
2025-06-07 10:45:09 +08:00
|
|
|
|
|
|
|
|
|
|
def get_user_info(user_id: str):
|
2025-06-16 11:55:19 +08:00
|
|
|
|
dao = LoginDAO()
|
|
|
|
|
|
return dao.get_user_info(user_id)
|