yunzer_go/server/controllers/oa.go
2025-11-06 15:56:29 +08:00

110 lines
2.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()
}