增加cms模块
This commit is contained in:
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user