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": "查询成功" }