from PDAPI import * import TempLateAPI.GERP.API.FormAPI.FormData as FormData # 处理获取部门成员请求 def HandleGetDepartmentMember(table, cleanedData): """处理获取部门成员请求""" DepartmentUUID = flask.request.args.get("DepartmentUUID") PageIndex = max(flask.request.args.get("PageIndex", 1, type=int), 1) PageSize = min(flask.request.args.get("PageSize", 10, type=int), 100) # 构建查询 if DepartmentUUID and DepartmentUUID != "all" and DepartmentUUID != "0"*32: # 检查部门是否存在 if not (Department := GERPDepartment.query.filter( GERPDepartment.DepartmentUUID == Get16toBytes(DepartmentUUID) ).first()): return {"code": 1, "msg": "部门 不存在"} # 获取该部门的所有成员 MembersSMTM = Department.dept_GERPSMTM.all() else: # 获取所有部门的所有成员 MembersSMTM = GERPSMTM.query.all() # 处理成员数据 Data = {} for UserSMTM in MembersSMTM: # 获取用户所属的所有部门 DepartmentSMTMs = UserSMTM.User.dept_GERPSMTM.options( sqlalchemy.orm.joinedload(GERPSMTM.Department) ).all() # 构建DepartmentUUIDs和Departments字段 DepartmentUUIDs = [GetBytesTo16(i.DepartmentUUID) for i in DepartmentSMTMs] DepartmentNames = [Smtm.Department.DepartmentName for Smtm in DepartmentSMTMs if Smtm.Department] # 避免重复处理同一个用户 UserUUIDStr = GetBytesTo16(UserSMTM.User.UserUUID) if UserUUIDStr in Data: continue # 构建用户数据 Data[UserUUIDStr] = { "UserUUID": UserUUIDStr, "UserJobNumber": GetBytesTo16(UserSMTM.User.UserJobNumber) if UserSMTM.User.UserJobNumber else "未启用工号", "UserName": UserSMTM.User.UserName, "UserPermission": UserSMTM.User.UserPermission, "UserGender": Gender2Str(UserSMTM.User.UserGender), "UserEmail": UserSMTM.User.UserEmail, "UserTele": UserSMTM.User.GetTele(), "UserLastLoginDate": UserSMTM.User.UserLastLoginDate.strftime("%Y年%m月%d日 %H时%M分%S秒 UTC+8") if UserSMTM.User.UserLastLoginDate else "从未登录", "UserCreateTime": UserSMTM.User.UserCreateTime.strftime("%Y年%m月%d日 %H时%M分%S秒 UTC+8"), "DepartmentUUIDs": ";".join(DepartmentUUIDs) if DepartmentUUIDs else "", "Departments": ";".join(DepartmentNames) if DepartmentNames else "", "PersonInChargeStatus": UserSMTM.PersonInChargeStatus if (DepartmentUUID and DepartmentUUID != "all" and DepartmentUUID != "0"*32) else 0 } # 分页处理 DataList = list(Data.values()) Total = len(DataList) StartIndex = (PageIndex - 1) * PageSize EndIndex = StartIndex + PageSize PageData = DataList[StartIndex:EndIndex] # 返回数据 return { "code": 0, "total": Total, "data": PageData } # 注册函数类型插件 FormData.RegisterFunctionExtension("DepartmentMember", "get", HandleGetDepartmentMember)