Files
general-system-framework/dbCtrl/clsUserTb.py

145 lines
5.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 文件声明了封装用户信息表相关的数据表操作
import copy
from common.dbORMType import stuTbUser
from common.generalFunc import CCommon
from sqliteModule.sqlite_db import g_dbInst
# 用户类别 int ---> string
def _int2str_usertype(userType: int) -> str:
from msg_dict import g_uiCtrlScript
if 0 == userType:
strRet = g_uiCtrlScript['CTRL_USER_TYPE_ADMIN']
elif 1 == userType:
strRet = g_uiCtrlScript['CTRL_USER_TYPE_TECH']
else:
strRet = g_uiCtrlScript['CTRL_USER_TYPE_OP']
return strRet
class CTbUserMgt:
# public:
def __init__(self):
self._m_tbName = 't_user'
self._m_record = [] # 存储表中记录每条记录是一个stuTbUser类型
self._m_error: str = '' # 存储反馈的错误信息
self._getAllUserInfo() # 读取所有用户信息
# 创建用户
def addNewUser(self, userID: str, userType: int) -> bool:
key_list = list(stuTbUser.keys())
strSqlCmd = ('INSERT INTO ' + self._m_tbName + '(' + key_list[0] + ',' +
key_list[1] + ',' + key_list[3] + ') VALUES (?, ?, ?)')
strTime = CCommon.fnGetCurrentTime() # 获取当前时间用于记录用户创建
bRes = g_dbInst.execute_sql(strSqlCmd, (userID, userType, strTime))
if bRes: # 更新到用户信息缓存
stuTbUser[key_list[0]] = userID
stuTbUser[key_list[1]] = userType
stuTbUser[key_list[3]] = strTime
other = copy.deepcopy(stuTbUser)
self._m_record.append(other)
return bRes
# 修改密码
def changePasswd(self, userID: str, userPasswd: str) -> bool:
keys_list = list(stuTbUser.keys()) # 转换为列表
strSqlCmd = 'UPDATE ' + self._m_tbName + ' SET ' + keys_list[2] + ' = ? WHERE ' + keys_list[0] + ' = ?'
bRes = g_dbInst.execute_sql(strSqlCmd, (userPasswd, userID))
if bRes and self._m_record:
for user in self._m_record:
if userID == user[keys_list[0]]:
user[keys_list[2]] = userPasswd
break
return bRes
# 删除用户
def delUser(self, userID: list[str]) -> bool:
if not userID:
return False
# 使用 IN 语句支持批量删除
keys_list = list(stuTbUser.keys())
placeholders = ','.join(['?'] * len(userID))
strSqlCmd = f'DELETE FROM {self._m_tbName} WHERE {keys_list[0]} IN ({placeholders})'
bRes = g_dbInst.execute_sql(strSqlCmd, tuple(userID))
# 删除成功了,要同步更新到缓存
if bRes and self._m_record:
nTotal = len(self._m_record)
nScan = 0
while nScan < nTotal:
user_id = list(self._m_record[nScan].items())[0][1]
if user_id in userID:
del self._m_record[nScan]
nTotal -= 1
continue
nScan += 1
return bRes
# 读取指定用户密码
def getPasswdByUserID(self, userID: str) -> str:
strRes = None
if self._m_record:
for user in self._m_record:
lstSingle = list(user.items())
if userID == lstSingle[0][1]:
strRes = lstSingle[2][1]
break
return strRes
# 读取所有用户id
def readAllUserIDs(self) -> list:
lstRet = []
if self._m_record:
for item in self._m_record:
lstRet.append(list(item.items())[0][1])
return lstRet
# 读取除管理员以外其他用户的id 类别和创建日期
def readUserId_type_date(self) -> list[tuple[str, str, str]]:
lstRet = []
if self._m_record:
for user in self._m_record:
lstSingle = list(user.items())
# 只添加非管理员用户用户类型不等于0
if lstSingle[1][1] != 0:
# 使用_int2str_usertype转换用户类别为字符串
user_type_str = _int2str_usertype(lstSingle[1][1])
singleItem = (lstSingle[0][1], user_type_str, lstSingle[3][1])
lstRet.append(singleItem)
return lstRet
# 根据用户id获取其用户类别
def getUserTypeById(self, userID: str) -> str:
strRet = None
if self._m_record:
for item in self._m_record:
lstSingle = list(item.items())
if userID == lstSingle[0][1]:
strRet = _int2str_usertype(lstSingle[1][1])
break
return strRet
# -------------------------------------------
# 获取错误信息
def getLastError(self) -> str:
return self._m_error
# private:
# 一次读取所有用户信息包括id 类别,密码,创建日期
def _getAllUserInfo(self) -> None:
strSqlCmd = 'SELECT * FROM ' + self._m_tbName
allUsers = g_dbInst.fetch_all(strSqlCmd)
if allUsers:
theField = list(stuTbUser.keys())
for user in allUsers:
stuTbUser[theField[0]] = user[0]
stuTbUser[theField[1]] = user[1]
stuTbUser[theField[2]] = user[2]
stuTbUser[theField[3]] = user[3]
other = copy.deepcopy(stuTbUser)
self._m_record.append(other)
# **************************************************************
g_userCtrl = CTbUserMgt() # 全局对象实例