package controllers import ( "server/services" beego "github.com/beego/beego/v2/server/web" ) // OAController OA基础数据控制器 type OAController struct { beego.Controller } // GetOABaseData 获取OA基础数据(部门、职位、角色) // 这是一个合并接口,用于一次性获取所有基础数据,减少网络请求次数 // @router /api/oa/base-data/:tenantId [get] func (c *OAController) GetOABaseData() { tenantId, err := c.GetInt(":tenantId") if err != nil || tenantId < 0 { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "租户ID无效", "data": nil, } c.ServeJSON() return } // 调用 services 层获取数据 baseData, err := services.GetOABaseData(tenantId) if err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "获取基础数据失败: " + err.Error(), "data": nil, } c.ServeJSON() return } // 预分配切片容量,减少内存分配 deptCount := len(baseData.Departments) posCount := len(baseData.Positions) roleCount := len(baseData.Roles) // 格式化部门数据(预分配容量) deptList := make([]map[string]interface{}, 0, deptCount) for _, dept := range baseData.Departments { deptList = append(deptList, map[string]interface{}{ "id": dept.Id, "tenant_id": dept.TenantId, "name": dept.Name, "code": dept.Code, "parent_id": dept.ParentId, "description": dept.Description, "manager_id": dept.ManagerId, "sort_order": dept.SortOrder, "status": dept.Status, "create_time": dept.CreateTime, "update_time": dept.UpdateTime, }) } // 格式化职位数据(预分配容量) posList := make([]map[string]interface{}, 0, posCount) for _, pos := range baseData.Positions { posList = append(posList, map[string]interface{}{ "id": pos.Id, "tenant_id": pos.TenantId, "name": pos.Name, "code": pos.Code, "department_id": pos.DepartmentId, "level": pos.Level, "description": pos.Description, "sort_order": pos.SortOrder, "status": pos.Status, "create_time": pos.CreateTime, "update_time": pos.UpdateTime, }) } // 格式化角色数据(预分配容量) roleList := make([]map[string]interface{}, 0, roleCount) for _, role := range baseData.Roles { roleList = append(roleList, map[string]interface{}{ "roleId": role.RoleId, "tenantId": role.TenantId, "roleCode": role.RoleCode, "roleName": role.RoleName, "description": role.Description, "status": role.Status, "sortOrder": role.SortOrder, "createTime": role.CreateTime, "updateTime": role.UpdateTime, }) } c.Data["json"] = map[string]interface{}{ "code": 0, "message": "获取基础数据成功", "data": map[string]interface{}{ "departments": deptList, "positions": posList, "roles": roleList, }, } c.ServeJSON() }