增加cms模块

This commit is contained in:
2026-01-05 17:38:34 +08:00
parent 3c0f01eb36
commit 09cbd721a0
24 changed files with 3158 additions and 955 deletions
+217
View File
@@ -0,0 +1,217 @@
package services
import (
"server/models"
"time"
"github.com/beego/beego/v2/client/orm"
)
// GetArticlesList 获取文章列表
func GetArticlesList(tenant_id int, user_id int, page, pageSize int, keyword string, cate int, status int8) ([]*models.Articles, int64, error) {
o := orm.NewOrm()
qs := o.QueryTable(new(models.Articles))
// 过滤已删除的文章
qs = qs.Filter("delete_time__isnull", true)
// 关键词搜索
if keyword != "" {
cond := orm.NewCondition()
cond1 := cond.Or("title__icontains", keyword).Or("content__icontains", keyword).Or("desc__icontains", keyword)
qs = qs.SetCond(cond1)
}
// 分类筛选
if cate > 0 {
qs = qs.Filter("cate", cate)
}
// 状态筛选
if status >= 0 {
qs = qs.Filter("status", status)
}
// 获取总数
total, err := qs.Count()
if err != nil {
return nil, 0, err
}
// 分页查询
if page <= 0 {
page = 1
}
if pageSize <= 0 {
pageSize = 10
}
offset := (page - 1) * pageSize
var articles []*models.Articles
_, err = qs.OrderBy("-create_time").Limit(pageSize, offset).All(&articles)
return articles, total, err
}
// GetArticleById 根据ID获取文章
func GetArticleById(id int) (*models.Articles, error) {
o := orm.NewOrm()
article := &models.Articles{Id: id}
err := o.Read(article)
if err != nil {
return nil, err
}
// 检查是否已删除
if article.DeleteTime != nil {
return nil, nil // 返回nil表示文章不存在或已删除
}
return article, nil
}
// CreateArticle 创建文章
func CreateArticle(article *models.Articles) (*models.Articles, error) {
o := orm.NewOrm()
id, err := o.Insert(article)
if err != nil {
return nil, err
}
// 获取创建后的文章
article.Id = int(id)
return article, nil
}
// UpdateArticle 更新文章
func UpdateArticle(article *models.Articles) error {
o := orm.NewOrm()
_, err := o.Update(article, "title", "cate", "image", "desc", "author", "content", "publisher", "publishdate", "sort", "status", "is_trans", "transurl", "push", "update_time")
return err
}
// DeleteArticle 删除文章(软删除)
func DeleteArticle(id int) error {
o := orm.NewOrm()
// 获取文章
article := &models.Articles{Id: id}
err := o.Read(article)
if err != nil {
return err
}
// 设置删除时间
now := time.Now()
article.DeleteTime = &now
_, err = o.Update(article, "delete_time")
return err
}
// UpdateArticleStatus 更新文章状态
func UpdateArticleStatus(id int, status int8) error {
o := orm.NewOrm()
article := &models.Articles{Id: id}
err := o.Read(article)
if err != nil {
return err
}
article.Status = status
now := time.Now()
article.UpdateTime = &now
_, err = o.Update(article, "status", "update_time")
return err
}
// IncrementArticleViews 增加文章浏览量
func IncrementArticleViews(id int) error {
o := orm.NewOrm()
article := &models.Articles{Id: id}
err := o.Read(article)
if err != nil {
return err
}
article.Views++
now := time.Now()
article.UpdateTime = &now
_, err = o.Update(article, "views", "update_time")
return err
}
// IncrementArticleLikes 增加文章点赞量
func IncrementArticleLikes(id int) error {
o := orm.NewOrm()
article := &models.Articles{Id: id}
err := o.Read(article)
if err != nil {
return err
}
article.Likes++
now := time.Now()
article.UpdateTime = &now
_, err = o.Update(article, "likes", "update_time")
return err
}
// GetPublishedArticles 获取已发布的文章列表(用于前台展示)
func GetPublishedArticles(page, pageSize int, cate int) ([]*models.Articles, int64, error) {
return GetArticlesList(0, 0, page, pageSize, "", cate, 2) // status=2 表示已发布,tenant_id=0, user_id=0
}
// GetArticleStats 获取文章统计信息
func GetArticleStats() (map[string]int64, error) {
o := orm.NewOrm()
stats := make(map[string]int64)
// 总文章数
total, err := o.QueryTable(new(models.Articles)).Filter("delete_time__isnull", true).Count()
if err != nil {
return nil, err
}
stats["total"] = total
// 草稿数
draft, err := o.QueryTable(new(models.Articles)).Filter("delete_time__isnull", true).Filter("status", 0).Count()
if err != nil {
return nil, err
}
stats["draft"] = draft
// 待审核数
pending, err := o.QueryTable(new(models.Articles)).Filter("delete_time__isnull", true).Filter("status", 1).Count()
if err != nil {
return nil, err
}
stats["pending"] = pending
// 已发布数
published, err := o.QueryTable(new(models.Articles)).Filter("delete_time__isnull", true).Filter("status", 2).Count()
if err != nil {
return nil, err
}
stats["published"] = published
// 隐藏数
hidden, err := o.QueryTable(new(models.Articles)).Filter("delete_time__isnull", true).Filter("status", 3).Count()
if err != nil {
return nil, err
}
stats["hidden"] = hidden
return stats, nil
}
+14 -5
View File
@@ -144,20 +144,29 @@ func AddUser(username, password, email, nickname, avatar string, tenantId, role,
return nil, fmt.Errorf("查询用户失败: %v", err)
}
// 3. 生成盐值(每个用户唯一)
// 3. 获取该租户下用户的最大Uid,用于生成新的Uid
var maxUid int
err = o.Raw("SELECT COALESCE(MAX(uid), 0) FROM yz_users WHERE tenant_id = ? AND delete_time IS NULL", tenantId).QueryRow(&maxUid)
if err != nil {
return nil, fmt.Errorf("获取最大Uid失败: %v", err)
}
newUid := maxUid + 1
// 4. 生成盐值(每个用户唯一)
salt, err := generateUserSalt()
if err != nil {
return nil, fmt.Errorf("生成盐值失败: %v", err)
}
// 4. 加密密码(结合盐值)
// 5. 加密密码(结合盐值)
hashedPassword, err := hashUserPassword(password, salt)
if err != nil {
return nil, fmt.Errorf("密码加密失败: %v", err)
}
// 5. 构建用户对象
// 6. 构建用户对象
user := &models.User{
Uid: newUid,
TenantId: tenantId,
Username: username,
Password: hashedPassword,
@@ -171,13 +180,13 @@ func AddUser(username, password, email, nickname, avatar string, tenantId, role,
Status: 1,
}
// 6. 插入数据库
// 7. 插入数据库
_, err = o.Insert(user)
if err != nil {
return nil, fmt.Errorf("数据库插入失败: %v", err)
}
// 7. 返回新创建的用户对象
// 8. 返回新创建的用户对象
return user, nil
}