From 74b70036207421736b3675c8f61181abfd57751d Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 16 Oct 2024 13:50:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=A7=91=E6=99=AE=E6=96=87?= =?UTF-8?q?=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/controller/ArticleScience.go | 55 +++++++++++++++++++++++++++++++ api/controller/base.go | 6 ++++ api/dao/ArticleScience.go | 56 ++++++++++++++++++++++++++++++++ api/dto/ArticleScience.go | 47 ++++++++++++++++++++++----- api/model/ArticleScience.go | 2 ++ api/model/ArticleScienceClass.go | 2 ++ api/requests/ArticleScience.go | 50 ++++++++++++++++++++++++++++ api/router/router.go | 33 +++++++++++++++++++ 8 files changed, 242 insertions(+), 9 deletions(-) create mode 100644 api/controller/ArticleScience.go create mode 100644 api/requests/ArticleScience.go diff --git a/api/controller/ArticleScience.go b/api/controller/ArticleScience.go new file mode 100644 index 0000000..2491df7 --- /dev/null +++ b/api/controller/ArticleScience.go @@ -0,0 +1,55 @@ +package controller + +import ( + "github.com/gin-gonic/gin" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/dto" + "hospital-admin-api/api/requests" + "hospital-admin-api/api/responses" + "hospital-admin-api/global" + "hospital-admin-api/utils" +) + +type ArticleScience struct{} + +// GetArticleSciencePage 获取科普文章列表-分页 +func (b *ArticleScience) GetArticleSciencePage(c *gin.Context) { + ArticleScienceRequest := requests.ArticleScienceRequest{} + req := ArticleScienceRequest.GetArticleSciencePage + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + if req.Page == 0 { + req.Page = 1 + } + + if req.PageSize == 0 { + req.PageSize = 20 + } + + // 获取分类数据 + articleScienceDao := dao.ArticleScienceDao{} + articleScience, total, err := articleScienceDao.GetArticleSciencePageSearch(req, req.Page, req.PageSize) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + g := dto.GetArticleScienceListDto(articleScience) + + result := make(map[string]interface{}) + result["page"] = req.Page + result["page_size"] = req.PageSize + result["total"] = total + result["data"] = g + responses.OkWithData(result, c) +} diff --git a/api/controller/base.go b/api/controller/base.go index 0b9e332..73237f5 100644 --- a/api/controller/base.go +++ b/api/controller/base.go @@ -18,6 +18,7 @@ type Api struct { productManage // 商品管理 couponManage // 优惠卷管理 basicManage // 基础数据管理 + articleManage // 文章管理 } // SysSetting 系统设置 @@ -105,3 +106,8 @@ type couponManage struct { type basicManage struct { Basic } + +// 文章管理 +type articleManage struct { + ArticleScience +} diff --git a/api/dao/ArticleScience.go b/api/dao/ArticleScience.go index 9853ed8..a50056d 100644 --- a/api/dao/ArticleScience.go +++ b/api/dao/ArticleScience.go @@ -4,6 +4,7 @@ import ( "gorm.io/gorm" "gorm.io/gorm/clause" "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" "hospital-admin-api/global" ) @@ -156,3 +157,58 @@ func (r *ArticleScienceDao) GetArticleScienceListByTime(maps interface{}, startT } return m, nil } + +// GetArticleSciencePageSearch 获取列表-分页 +func (r *ArticleScienceDao) GetArticleSciencePageSearch(req requests.GetArticleSciencePage, page, pageSize int) (m []*model.ArticleScience, total int64, err error) { + var totalRecords int64 + + // 构建查询条件 + query := global.Db.Model(&model.ArticleScience{}) + + // 来源 + query = query.Preload("ArticleScienceSource") + + // 分类 + query = query.Preload("ArticleScienceClass.ArticleScience") + + // 文章标题 + if req.ArticleTitle != "" { + query = query.Where("article_title LIKE ?", "%"+req.ArticleTitle+"%") + } + + // 文章状态 + if req.ArticleStatus != nil { + query = query.Where("article_status = ?", req.ArticleStatus) + } + + // 是否置顶 + if req.IsTop != nil { + query = query.Where("is_top = ?", req.IsTop) + } + + // 文章来源 + if req.SourceId != "" { + query = query.Where("source_id = ?", req.SourceId) + } + + // 排序 + if req.Order != nil { + if req.Order.UpdatedAt != "" { + query = query.Order("updated_at " + req.Order.UpdatedAt) + } + } + + // 排序 + query = query.Order("created_at desc") + + // 查询总数量 + if err := query.Count(&totalRecords).Error; err != nil { + return nil, 0, err + } + + err = query.Scopes(model.Paginate(page, pageSize)).Find(&m).Error + if err != nil { + return nil, 0, err + } + return m, totalRecords, nil +} diff --git a/api/dto/ArticleScience.go b/api/dto/ArticleScience.go index 7c8bf73..9b6b3cc 100644 --- a/api/dto/ArticleScience.go +++ b/api/dto/ArticleScience.go @@ -8,15 +8,17 @@ import ( // ArticleScienceDto 文章-科普 type ArticleScienceDto struct { - ArticleId string `json:"article_id"` // 主键id - ArticleTitle string `json:"article_title"` // 文章标题 - ArticleStatus int `json:"article_status"` // 文章状态(1:正常 2:禁用) - IsTop int `json:"is_top"` // 是否置顶(0:否 1:是) - ArticleImage string `json:"article_image"` // 文章图片(1张) - SourceId string `json:"source_id"` // 文章来源id - ArticleUrl string `json:"article_url"` // 文章地址 - CreatedAt model.LocalTime `json:"created_at"` // 创建时间 - UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间 + ArticleId string `json:"article_id"` // 主键id + ArticleTitle string `json:"article_title"` // 文章标题 + ArticleStatus int `json:"article_status"` // 文章状态(1:正常 2:禁用) + IsTop int `json:"is_top"` // 是否置顶(0:否 1:是) + ArticleImage string `json:"article_image"` // 文章图片(1张) + SourceId string `json:"source_id"` // 文章来源id + ArticleUrl string `json:"article_url"` // 文章地址 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间 + ArticleScienceSource *ArticleScienceSourceDto `json:"article_science_source"` // 文章来源 + ArticleScienceClass []*BasicArticleClassDto `json:"article_science_class"` // 文章分类 } // GetArticleScienceDto 详情 @@ -53,6 +55,11 @@ func GetArticleScienceListDto(m []*model.ArticleScience) []*ArticleScienceDto { UpdatedAt: v.UpdatedAt, } + // 加载文章来源 + if v.ArticleScienceSource != nil { + response = response.LoadArticleScienceSource(v.ArticleScienceSource) + } + // 将转换后的结构体添加到新切片中 responses[i] = response } @@ -60,3 +67,25 @@ func GetArticleScienceListDto(m []*model.ArticleScience) []*ArticleScienceDto { return responses } + +// LoadArticleScienceSource 加载文章来源 +func (r *ArticleScienceDto) LoadArticleScienceSource(m *model.ArticleScienceSource) *ArticleScienceDto { + if m != nil { + r.ArticleScienceSource = GetArticleScienceSourceDto(m) + } + return r +} + +// LoadArticleScienceClass 加载文章分类 +func (r *ArticleScienceDto) LoadArticleScienceClass(m []*model.ArticleScienceClass) *ArticleScienceDto { + if len(m) > 0 { + for _, v := range m { + if v.BasicArticleClass != nil { + basicArticleClass := GetBasicArticleClassDto(v.BasicArticleClass) + + r.ArticleScienceClass = append(r.ArticleScienceClass, basicArticleClass) + } + } + } + return r +} diff --git a/api/model/ArticleScience.go b/api/model/ArticleScience.go index e2d1346..3ae4e65 100644 --- a/api/model/ArticleScience.go +++ b/api/model/ArticleScience.go @@ -16,6 +16,8 @@ type ArticleScience struct { SourceId int64 `gorm:"column:source_id;type:bigint(19);comment:文章来源id;NOT NULL" json:"source_id"` ArticleUrl string `gorm:"column:article_url;type:varchar(255);comment:文章地址;NOT NULL" json:"article_url"` Model + ArticleScienceSource *ArticleScienceSource `gorm:"foreignKey:SourceId;references:source_id" json:"article_science_source"` + ArticleScienceClass []*ArticleScienceClass `gorm:"foreignKey:ArticleId;references:article_id" json:"article_science_class"` } func (m *ArticleScience) TableName() string { diff --git a/api/model/ArticleScienceClass.go b/api/model/ArticleScienceClass.go index 7a0e2e1..3ee7b3f 100644 --- a/api/model/ArticleScienceClass.go +++ b/api/model/ArticleScienceClass.go @@ -12,6 +12,8 @@ type ArticleScienceClass struct { ArticleId int64 `gorm:"column:article_id;type:bigint(19);comment:文章-科普id;NOT NULL" json:"article_id"` BasicClassId int64 `gorm:"column:basic_class_id;type:bigint(19);comment:基础数据-科普-分类id;NOT NULL" json:"basic_class_id"` Model + ArticleScience *ArticleScience `gorm:"foreignKey:ArticleId;references:article_id" json:"article_science"` + BasicArticleClass *BasicArticleClass `gorm:"foreignKey:BasicClassId;references:basic_class_id" json:"basic_article_class"` } func (m *ArticleScienceClass) TableName() string { diff --git a/api/requests/ArticleScience.go b/api/requests/ArticleScience.go new file mode 100644 index 0000000..53ddefd --- /dev/null +++ b/api/requests/ArticleScience.go @@ -0,0 +1,50 @@ +package requests + +type ArticleScienceRequest struct { + GetArticleSciencePage // 获取科普文章列表-分页 + GetArticleScienceList // 获取科普文章列表 + PutArticleScience // 修改科普文章 + AddArticleScience // 新增科普文章 +} + +// GetArticleSciencePage 获取科普文章列表-分页 +type GetArticleSciencePage struct { + Page int `json:"page" form:"page" label:"页码"` + PageSize int `json:"page_size" form:"page_size" label:"每页个数"` + ArticleTitle string `json:"article_title" form:"article_title" label:"文章标题"` // 文章标题 + ArticleStatus *int `json:"article_status" form:"article_status" label:"文章状态" validate:"omitempty,numeric,oneof=1 2"` // 文章状态(1:正常 2:禁用) + IsTop *int `json:"is_top" form:"is_top" label:"是否置顶" validate:"omitempty,numeric,oneof=0 1"` // 是否置顶(0:否 1:是) + SourceId string `json:"source_id" form:"source_id" label:"文章来源"` // 文章来源id + Order *GetArticleSciencePageOrder `json:"order" form:"order" label:"排序"` +} + +// GetArticleSciencePageOrder 获取科普文章列表-分页-排序条件 +type GetArticleSciencePageOrder struct { + UpdatedAt string `json:"updated_at" form:"updated_at" label:"排序"` // 修改时间 +} + +// GetArticleScienceList 获取科普文章列表 +type GetArticleScienceList struct { + ArticleTitle string `json:"article_title" form:"article_title" label:"文章标题"` // 文章标题 + ArticleStatus *int `json:"article_status" form:"article_status" label:"文章状态" validate:"omitempty,numeric,oneof=1 2"` // 文章状态(1:正常 2:禁用) + IsTop *int `json:"is_top" form:"is_top" label:"是否置顶" validate:"omitempty,numeric,oneof=0 1"` // 是否置顶(0:否 1:是) + SourceId string `json:"source_id" form:"source_id" label:"文章来源"` // 文章来源id + Order *GetArticleSciencePageOrder `json:"order" form:"order" label:"排序"` +} + +// GetArticleScienceListOrder 获取科普文章列表-排序条件 +type GetArticleScienceListOrder struct { + BasicClassSort string `json:"basic_class_sort" form:"basic_class_sort" label:"排序"` // 排序(越大排序越靠前) +} + +// PutArticleScience 修改科普文章 +type PutArticleScience struct { + BasicClassName string `json:"basic_class_name" form:"basic_class_name" label:"分类名称" validate:"required"` + BasicClassSort uint `json:"basic_class_sort" form:"basic_class_sort" label:"排序值" validate:"required,number,min=1"` +} + +// AddArticleScience 新增科普文章 +type AddArticleScience struct { + BasicClassName string `json:"basic_class_name" form:"basic_class_name" label:"分类名称" validate:"required"` + BasicClassSort uint `json:"basic_class_sort" form:"basic_class_sort" label:"排序值" validate:"required,number,min=1"` +} diff --git a/api/router/router.go b/api/router/router.go index 0a67a9f..7762ad1 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -876,4 +876,37 @@ func privateRouter(r *gin.Engine, api controller.Api) { articleClassGroup.POST("", api.Basic.BasicArticleClass.AddBasicArticleClass) } } + + // 文章管理 + articleGroup := adminGroup.Group("/article") + { + // 科普文章 + scienceGroup := articleGroup.Group("science") + { + // 获取科普文章列表-分页 + scienceGroup.POST("/page", api.ArticleScience.GetArticleSciencePage) + + // 获取科普文章详情 + + // 修改科普文章 + + // 新增科普文章 + + // 科普文章来源 + sourceGroup := scienceGroup.Group("source") + { + // 获取来源列表-分页 + sourceGroup.POST("/page", api.ArticleScience.GetArticleSciencePage) + + // 获取来源列表 + + // 获取来源详情 + + // 修改来源文章 + + // 新增来源文章 + } + } + + } }