Files
SMANAGE/backup/_api_backup/TempLateAPI/GERP/API/SiteUserManagement/GetSiteUsers.api
T

70 lines
3.0 KiB
Plaintext

from PDAPI import *
__metadata__ = {
"methods": ["GET"],
"blueprint": "GERP",
"permission": 1.0,
"attributes": [],
"limit": "1 per second",
"form": [
{"Name": "Page", "Type": "int", "Required": False},
]
}
def HandleRequest():
data = []
page_index = flask.request.args.get("PageIndex", 1, type = int)
page_size = flask.request.args.get("PageSize", 10, type = int)
search_field = flask.request.args.get("SearchField", "UserUUID")
search_keyword = flask.request.args.get("SearchKeyword", "").strip()
match_mode = flask.request.args.get("MatchMode", "Like") # Like/Regex
sort_field = flask.request.args.get("SortField", "UserCreateTime")
sort_order = flask.request.args.get("SortOrder", "Desc") # Asc/Desc
query = GERPUser.query
if search_keyword and search_field in [
"UserUUID", "UserJobNumber", "UserName", "UserEmail", "UserTele"
]:
model_field = search_field
if match_mode == "Like":
query = query.filter(getattr(GERPUser, model_field).ilike(f"%{search_keyword}%"))
elif match_mode == "Regex":
try:
re.compile(search_keyword)
query = query.filter(sqlalchemy.text(f"{model_field} REGEXP :keyword")).params(keyword=search_keyword)
except re.error:
return {"code": 500, "msg": "正则表达式格式错误", "data": []}
if sort_field in [
"UserUUID", "UserJobNumber", "UserName", "UserPermission",
"UserCreateTime", "UserLastLoginDate"
]:
if sort_order == "Desc":
query = query.order_by(getattr(GERPUser, sort_field).desc())
else:
query = query.order_by(getattr(GERPUser, sort_field).asc())
else:
query = query.order_by(GERPUser.UserCreateTime.desc())
total_count = query.count()
offset = (page_index - 1) * page_size
users = query.offset(offset).limit(page_size).all()
for user in users:
user: GERPUser
data.append({
"UserUUID": GetBytesTo16(user.UserUUID),
"UserJobNumber": GetBytesTo16(user.UserJobNumber) if user.UserJobNumber else "未启用工号",
"UserName": user.UserName,
"UserPermission": user.UserPermission,
"UserGender": Gender2Str(user.UserGender),
"UserEmail": user.UserEmail or "未填写",
"UserEmailVerify": user.UserEmailVerify,
"UserAccountLicense": user.UserAccountLicense,
"UserTele": user.GetTele() or "未填写",
"UserLastLoginDate": user.UserLastLoginDate.strftime("%Y年%m月%d日 %H时%M分%S秒 UTC+8")
if user.UserLastLoginDate else "从未登录",
"UserCreateTime": user.UserCreateTime.strftime("%Y年%m月%d日 %H时%M分%S秒 UTC+8")
})
return {
"code": 0,
"count": total_count,
"data": data,
"msg": "查询成功"
}