yunzer_go/server/controllers/department.go

271 lines
6.2 KiB
Go

package controllers
import (
"encoding/json"
"server/models"
beego "github.com/beego/beego/v2/server/web"
)
// DepartmentController 部门控制器
type DepartmentController struct {
beego.Controller
}
// GetTenantDepartments 获取租户下的所有部门
// @router /departments/tenant/:tenantId [get]
func (c *DepartmentController) GetTenantDepartments() {
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
}
departments, err := models.GetTenantDepartments(tenantId)
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "获取部门列表失败: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
// 格式化返回数据
deptList := make([]map[string]interface{}, 0)
for _, dept := range 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,
})
}
c.Data["json"] = map[string]interface{}{
"code": 0,
"message": "获取部门列表成功",
"data": deptList,
}
c.ServeJSON()
}
// GetDepartmentInfo 获取部门详情
// @router /departments/:id [get]
func (c *DepartmentController) GetDepartmentInfo() {
id, err := c.GetInt(":id")
if err != nil || id <= 0 {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "部门ID无效",
"data": nil,
}
c.ServeJSON()
return
}
department, err := models.GetDepartmentById(id)
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "部门不存在",
"data": nil,
}
c.ServeJSON()
return
}
c.Data["json"] = map[string]interface{}{
"code": 0,
"message": "获取部门信息成功",
"data": map[string]interface{}{
"id": department.Id,
"tenant_id": department.TenantId,
"name": department.Name,
"code": department.Code,
"parent_id": department.ParentId,
"description": department.Description,
"manager_id": department.ManagerId,
"sort_order": department.SortOrder,
"status": department.Status,
},
}
c.ServeJSON()
}
// AddDepartment 添加部门
// @router /departments [post]
func (c *DepartmentController) AddDepartment() {
var deptData struct {
TenantId int `json:"tenant_id"`
Name string `json:"name"`
Code string `json:"code"`
ParentId int `json:"parent_id"`
Description string `json:"description"`
ManagerId int `json:"manager_id"`
SortOrder int `json:"sort_order"`
Status int8 `json:"status"`
}
err := json.Unmarshal(c.Ctx.Input.RequestBody, &deptData)
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "请求参数错误: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
department := &models.Department{
TenantId: deptData.TenantId,
Name: deptData.Name,
Code: deptData.Code,
ParentId: deptData.ParentId,
Description: deptData.Description,
ManagerId: deptData.ManagerId,
SortOrder: deptData.SortOrder,
Status: deptData.Status,
}
if department.TenantId == 0 {
department.TenantId = 1
}
id, err := models.AddDepartment(department)
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "添加部门失败: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
department.Id = int(id)
c.Data["json"] = map[string]interface{}{
"code": 0,
"message": "添加部门成功",
"data": department,
}
c.ServeJSON()
}
// UpdateDepartment 更新部门信息
// @router /departments/:id [put]
func (c *DepartmentController) UpdateDepartment() {
id, err := c.GetInt(":id")
if err != nil || id <= 0 {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "部门ID无效",
"data": nil,
}
c.ServeJSON()
return
}
var updateData struct {
Name string `json:"name"`
Code string `json:"code"`
ParentId int `json:"parent_id"`
Description string `json:"description"`
ManagerId int `json:"manager_id"`
SortOrder int `json:"sort_order"`
Status int8 `json:"status"`
}
err = json.Unmarshal(c.Ctx.Input.RequestBody, &updateData)
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "请求参数错误: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
department, err := models.GetDepartmentById(id)
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "部门不存在",
"data": nil,
}
c.ServeJSON()
return
}
department.Name = updateData.Name
department.Code = updateData.Code
department.ParentId = updateData.ParentId
department.Description = updateData.Description
department.ManagerId = updateData.ManagerId
department.SortOrder = updateData.SortOrder
department.Status = updateData.Status
if err := models.UpdateDepartment(department); err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "更新部门信息失败: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
c.Data["json"] = map[string]interface{}{
"code": 0,
"message": "更新部门信息成功",
"data": department,
}
c.ServeJSON()
}
// DeleteDepartment 删除部门
// @router /departments/:id [delete]
func (c *DepartmentController) DeleteDepartment() {
id, err := c.GetInt(":id")
if err != nil || id <= 0 {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "部门ID无效",
"data": nil,
}
c.ServeJSON()
return
}
if err := models.DeleteDepartment(id); err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "删除部门失败: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
c.Data["json"] = map[string]interface{}{
"code": 0,
"message": "删除部门成功",
"data": nil,
}
c.ServeJSON()
}