70 lines
3.0 KiB
Plaintext
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": "查询成功"
|
|
} |