367 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			367 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package controllers
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"server/models"
 | 
						|
	"strconv"
 | 
						|
 | 
						|
	beego "github.com/beego/beego/v2/server/web"
 | 
						|
)
 | 
						|
 | 
						|
// KnowledgeController 知识库控制器
 | 
						|
type KnowledgeController struct {
 | 
						|
	beego.Controller
 | 
						|
}
 | 
						|
 | 
						|
// List 获取知识列表
 | 
						|
// @router /api/knowledge/list [get]
 | 
						|
func (c *KnowledgeController) List() {
 | 
						|
	// 获取查询参数
 | 
						|
	page, _ := c.GetInt("page", 1)
 | 
						|
	pageSize, _ := c.GetInt("pageSize", 10)
 | 
						|
	status, _ := c.GetInt8("status", -1) // -1表示查询所有
 | 
						|
	categoryId, _ := c.GetInt("categoryId", 0)
 | 
						|
	keyword := c.GetString("keyword", "")
 | 
						|
 | 
						|
	knowledges, total, err := models.GetAllKnowledge(page, pageSize, status, categoryId, keyword)
 | 
						|
	if 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": "success",
 | 
						|
		"data": map[string]interface{}{
 | 
						|
			"list":     knowledges,
 | 
						|
			"total":    total,
 | 
						|
			"page":     page,
 | 
						|
			"pageSize": pageSize,
 | 
						|
		},
 | 
						|
	}
 | 
						|
	c.ServeJSON()
 | 
						|
}
 | 
						|
 | 
						|
// Detail 获取知识详情
 | 
						|
// @router /api/knowledge/detail [get]
 | 
						|
func (c *KnowledgeController) Detail() {
 | 
						|
	id, _ := strconv.Atoi(c.GetString("id"))
 | 
						|
	if id == 0 {
 | 
						|
		c.Data["json"] = map[string]interface{}{
 | 
						|
			"code":    1,
 | 
						|
			"message": "知识ID不能为空",
 | 
						|
			"data":    nil,
 | 
						|
		}
 | 
						|
		c.ServeJSON()
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	knowledge, err := models.GetKnowledgeById(id)
 | 
						|
	if 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": "success",
 | 
						|
		"data":    knowledge,
 | 
						|
	}
 | 
						|
	c.ServeJSON()
 | 
						|
}
 | 
						|
 | 
						|
// Create 创建知识
 | 
						|
// @router /api/knowledge/create [post]
 | 
						|
func (c *KnowledgeController) Create() {
 | 
						|
	// 解析请求体
 | 
						|
	var knowledge models.Knowledge
 | 
						|
	err := json.Unmarshal(c.Ctx.Input.RequestBody, &knowledge)
 | 
						|
	if err != nil {
 | 
						|
		c.Data["json"] = map[string]interface{}{
 | 
						|
			"code":    1,
 | 
						|
			"message": "请求参数格式错误",
 | 
						|
			"data":    nil,
 | 
						|
		}
 | 
						|
		c.ServeJSON()
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	// 验证必填字段
 | 
						|
	if knowledge.Title == "" {
 | 
						|
		c.Data["json"] = map[string]interface{}{
 | 
						|
			"code":    1,
 | 
						|
			"message": "标题不能为空",
 | 
						|
			"data":    nil,
 | 
						|
		}
 | 
						|
		c.ServeJSON()
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	id, err := models.AddKnowledge(&knowledge)
 | 
						|
	if 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":    map[string]interface{}{"id": id},
 | 
						|
	}
 | 
						|
	c.ServeJSON()
 | 
						|
}
 | 
						|
 | 
						|
// Update 更新知识
 | 
						|
// @router /api/knowledge/update [post]
 | 
						|
func (c *KnowledgeController) Update() {
 | 
						|
	// 解析请求体
 | 
						|
	var knowledge models.Knowledge
 | 
						|
	err := json.Unmarshal(c.Ctx.Input.RequestBody, &knowledge)
 | 
						|
	if err != nil {
 | 
						|
		c.Data["json"] = map[string]interface{}{
 | 
						|
			"code":    1,
 | 
						|
			"message": "请求参数格式错误",
 | 
						|
			"data":    nil,
 | 
						|
		}
 | 
						|
		c.ServeJSON()
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	// 验证必填字段
 | 
						|
	if knowledge.Id == 0 {
 | 
						|
		c.Data["json"] = map[string]interface{}{
 | 
						|
			"code":    1,
 | 
						|
			"message": "知识ID不能为空",
 | 
						|
			"data":    nil,
 | 
						|
		}
 | 
						|
		c.ServeJSON()
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	err = models.UpdateKnowledge(knowledge.Id, &knowledge)
 | 
						|
	if 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()
 | 
						|
}
 | 
						|
 | 
						|
// Delete 软删除知识
 | 
						|
// @router /api/knowledge/delete [post]
 | 
						|
func (c *KnowledgeController) Delete() {
 | 
						|
	var request map[string]interface{}
 | 
						|
	err := json.Unmarshal(c.Ctx.Input.RequestBody, &request)
 | 
						|
	if err != nil {
 | 
						|
		c.Data["json"] = map[string]interface{}{
 | 
						|
			"code":    1,
 | 
						|
			"message": "请求参数格式错误",
 | 
						|
			"data":    nil,
 | 
						|
		}
 | 
						|
		c.ServeJSON()
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	id, ok := request["id"].(float64)
 | 
						|
	if !ok {
 | 
						|
		c.Data["json"] = map[string]interface{}{
 | 
						|
			"code":    1,
 | 
						|
			"message": "知识ID不能为空",
 | 
						|
			"data":    nil,
 | 
						|
		}
 | 
						|
		c.ServeJSON()
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	// 从请求头或 session 中获取当前用户信息
 | 
						|
	deleteBy := c.GetString("username")
 | 
						|
	if deleteBy == "" {
 | 
						|
		deleteBy = c.GetString("user")
 | 
						|
	}
 | 
						|
	if deleteBy == "" {
 | 
						|
		deleteBy = "system" // 默认值
 | 
						|
	}
 | 
						|
 | 
						|
	err = models.DeleteKnowledge(int(id), deleteBy)
 | 
						|
	if 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()
 | 
						|
}
 | 
						|
 | 
						|
// GetCategories 获取分类列表
 | 
						|
// @router /api/knowledge/categories [get]
 | 
						|
func (c *KnowledgeController) GetCategories() {
 | 
						|
	categories, err := models.GetAllCategories()
 | 
						|
	if err != nil {
 | 
						|
		c.Data["json"] = map[string]interface{}{
 | 
						|
			"code":    1,
 | 
						|
			"message": "获取分类列表失败: " + err.Error(),
 | 
						|
			"data":    nil,
 | 
						|
		}
 | 
						|
		c.ServeJSON()
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	// 手动转换数据格式,确保字段名正确
 | 
						|
	var result []map[string]interface{}
 | 
						|
	for _, cat := range categories {
 | 
						|
		result = append(result, map[string]interface{}{
 | 
						|
			"categoryId":   cat.CategoryId,
 | 
						|
			"categoryName": cat.CategoryName,
 | 
						|
			"categoryDesc": cat.CategoryDesc,
 | 
						|
			"parentId":     cat.ParentId,
 | 
						|
			"sortOrder":    cat.SortOrder,
 | 
						|
			"createTime":   cat.CreateTime,
 | 
						|
			"updateTime":   cat.UpdateTime,
 | 
						|
		})
 | 
						|
	}
 | 
						|
 | 
						|
	c.Data["json"] = map[string]interface{}{
 | 
						|
		"code":    0,
 | 
						|
		"message": "success",
 | 
						|
		"data":    result,
 | 
						|
	}
 | 
						|
	c.ServeJSON()
 | 
						|
}
 | 
						|
 | 
						|
// GetTags 获取标签列表
 | 
						|
// @router /api/knowledge/tags [get]
 | 
						|
func (c *KnowledgeController) GetTags() {
 | 
						|
	tags, err := models.GetAllTags()
 | 
						|
	if err != nil {
 | 
						|
		c.Data["json"] = map[string]interface{}{
 | 
						|
			"code":    1,
 | 
						|
			"message": "获取标签列表失败: " + err.Error(),
 | 
						|
			"data":    nil,
 | 
						|
		}
 | 
						|
		c.ServeJSON()
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	// 手动转换数据格式,确保字段名正确
 | 
						|
	var result []map[string]interface{}
 | 
						|
	for _, tag := range tags {
 | 
						|
		result = append(result, map[string]interface{}{
 | 
						|
			"tagId":      tag.TagId,
 | 
						|
			"tagName":    tag.TagName,
 | 
						|
			"tagColor":   tag.TagColor,
 | 
						|
			"usageCount": tag.UsageCount,
 | 
						|
			"createTime": tag.CreateTime,
 | 
						|
			"updateTime": tag.UpdateTime,
 | 
						|
		})
 | 
						|
	}
 | 
						|
 | 
						|
	c.Data["json"] = map[string]interface{}{
 | 
						|
		"code":    0,
 | 
						|
		"message": "success",
 | 
						|
		"data":    result,
 | 
						|
	}
 | 
						|
	c.ServeJSON()
 | 
						|
}
 | 
						|
 | 
						|
// AddCategory 添加分类
 | 
						|
// @router /api/knowledge/category/add [post]
 | 
						|
func (c *KnowledgeController) AddCategory() {
 | 
						|
	var category models.KnowledgeCategory
 | 
						|
	err := json.Unmarshal(c.Ctx.Input.RequestBody, &category)
 | 
						|
	if err != nil {
 | 
						|
		c.Data["json"] = map[string]interface{}{
 | 
						|
			"code":    1,
 | 
						|
			"message": "请求参数格式错误",
 | 
						|
			"data":    nil,
 | 
						|
		}
 | 
						|
		c.ServeJSON()
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	id, err := models.AddCategory(&category)
 | 
						|
	if 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":    map[string]interface{}{"categoryId": id},
 | 
						|
	}
 | 
						|
	c.ServeJSON()
 | 
						|
}
 | 
						|
 | 
						|
// AddTag 添加标签
 | 
						|
// @router /api/knowledge/tag/add [post]
 | 
						|
func (c *KnowledgeController) AddTag() {
 | 
						|
	var tag models.KnowledgeTag
 | 
						|
	err := json.Unmarshal(c.Ctx.Input.RequestBody, &tag)
 | 
						|
	if err != nil {
 | 
						|
		c.Data["json"] = map[string]interface{}{
 | 
						|
			"code":    1,
 | 
						|
			"message": "请求参数格式错误",
 | 
						|
			"data":    nil,
 | 
						|
		}
 | 
						|
		c.ServeJSON()
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	id, err := models.AddTag(&tag)
 | 
						|
	if 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":    map[string]interface{}{"tagId": id},
 | 
						|
	}
 | 
						|
	c.ServeJSON()
 | 
						|
}
 |