From 653694d98deebcfa728255e74ba20bd831d21a85 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 16 Oct 2024 15:58:41 +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=E6=9D=A5=E6=BA=90=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/controller/ArticleScienceSource.go | 228 +++++++++++++++++++++++++ api/controller/base.go | 1 + api/dao/ArticleScienceSource.go | 55 ++++++ api/requests/ArticleScienceSource.go | 38 +++++ api/router/router.go | 16 +- 5 files changed, 332 insertions(+), 6 deletions(-) create mode 100644 api/controller/ArticleScienceSource.go create mode 100644 api/requests/ArticleScienceSource.go diff --git a/api/controller/ArticleScienceSource.go b/api/controller/ArticleScienceSource.go new file mode 100644 index 0000000..f1ac3e3 --- /dev/null +++ b/api/controller/ArticleScienceSource.go @@ -0,0 +1,228 @@ +package controller + +import ( + "github.com/gin-gonic/gin" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/dto" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/api/responses" + "hospital-admin-api/global" + "hospital-admin-api/utils" + "strconv" +) + +type ArticleScienceSource struct{} + +// GetArticleScienceSourcePage 获取科普文章来源列表-分页 +func (b *ArticleScienceSource) GetArticleScienceSourcePage(c *gin.Context) { + ArticleScienceSourceRequest := requests.ArticleScienceSourceRequest{} + req := ArticleScienceSourceRequest.GetArticleScienceSourcePage + 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 + } + + // 获取分类数据 + articleScienceSourceDao := dao.ArticleScienceSourceDao{} + articleScienceSource, total, err := articleScienceSourceDao.GetArticleScienceSourcePageSearch(req, req.Page, req.PageSize) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + g := dto.GetArticleScienceSourceListDto(articleScienceSource) + + result := make(map[string]interface{}) + result["page"] = req.Page + result["page_size"] = req.PageSize + result["total"] = total + result["data"] = g + responses.OkWithData(result, c) +} + +// GetArticleScienceSourceList 获取科普文章来源列表 +func (b *ArticleScienceSource) GetArticleScienceSourceList(c *gin.Context) { + ArticleScienceSourceRequest := requests.ArticleScienceSourceRequest{} + req := ArticleScienceSourceRequest.GetArticleScienceSourceList + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + // 获取分类数据 + articleScienceSourceDao := dao.ArticleScienceSourceDao{} + articleScienceSource, err := articleScienceSourceDao.GetArticleScienceSourceListSearch(req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + g := dto.GetArticleScienceSourceListDto(articleScienceSource) + + responses.OkWithData(g, c) +} + +// GetArticleScienceSource 获取科普文章来源详情 +func (b *ArticleScienceSource) GetArticleScienceSource(c *gin.Context) { + id := c.Param("source_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + sourceId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 获取科普文章来源数据 + articleScienceSourceDao := dao.ArticleScienceSourceDao{} + articleScienceSource, err := articleScienceSourceDao.GetArticleScienceSourceById(sourceId) + if err != nil { + responses.FailWithMessage("异常", c) + return + } + + // 处理返回值 + g := dto.GetArticleScienceSourceDto(articleScienceSource) + + responses.OkWithData(g, c) +} + +// AddArticleScienceSource 新增科普文章来源 +func (b *ArticleScienceSource) AddArticleScienceSource(c *gin.Context) { + ArticleScienceSourceRequest := requests.ArticleScienceSourceRequest{} + req := ArticleScienceSourceRequest.AddArticleScienceSource + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + articleScienceSource := &model.ArticleScienceSource{ + SourceName: req.SourceName, + SourceImage: utils.RemoveOssDomain(req.SourceImage), + } + + ArticleScienceSourceDao := dao.ArticleScienceSourceDao{} + articleScienceSource, err := ArticleScienceSourceDao.AddArticleScienceSource(tx, articleScienceSource) + if err != nil { + tx.Rollback() + responses.FailWithMessage(err.Error(), c) + return + } + + tx.Commit() + responses.Ok(c) +} + +// PutArticleScienceSource 修改科普文章来源 +func (b *ArticleScienceSource) PutArticleScienceSource(c *gin.Context) { + ArticleScienceSourceRequest := requests.ArticleScienceSourceRequest{} + req := ArticleScienceSourceRequest.PutArticleScienceSource + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + id := c.Param("source_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + sourceId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 获取科普分类数据 + articleScienceSourceDao := dao.ArticleScienceSourceDao{} + articleScienceSource, err := articleScienceSourceDao.GetArticleScienceSourceById(sourceId) + if err != nil { + responses.FailWithMessage("分类异常", c) + return + } + + // 修改值 + articleScienceSourceData := make(map[string]interface{}) + + // 来源名称 + if req.SourceName != articleScienceSource.SourceName { + articleScienceSourceData["source_name"] = req.SourceName + } + + // 来源图片 + sourceImage := utils.RemoveOssDomain(req.SourceImage) + if sourceImage != articleScienceSource.SourceImage { + articleScienceSourceData["source_image"] = sourceImage + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + if len(articleScienceSourceData) > 0 { + err = articleScienceSourceDao.EditArticleScienceSourceById(tx, sourceId, articleScienceSourceData) + if err != nil { + tx.Rollback() + responses.FailWithMessage("操作失败", c) + return + } + + tx.Commit() + } + + tx.Commit() + responses.Ok(c) +} diff --git a/api/controller/base.go b/api/controller/base.go index 73237f5..3dbea4e 100644 --- a/api/controller/base.go +++ b/api/controller/base.go @@ -110,4 +110,5 @@ type basicManage struct { // 文章管理 type articleManage struct { ArticleScience + ArticleScienceSource } diff --git a/api/dao/ArticleScienceSource.go b/api/dao/ArticleScienceSource.go index ed5168d..df03d8a 100644 --- a/api/dao/ArticleScienceSource.go +++ b/api/dao/ArticleScienceSource.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,57 @@ func (r *ArticleScienceSourceDao) GetArticleScienceSourceListByTime(maps interfa } return m, nil } + +// GetArticleScienceSourcePageSearch 获取列表-分页 +func (r *ArticleScienceSourceDao) GetArticleScienceSourcePageSearch(req requests.GetArticleScienceSourcePage, page, pageSize int) (m []*model.ArticleScienceSource, total int64, err error) { + var totalRecords int64 + + // 构建查询条件 + query := global.Db.Model(&model.ArticleScienceSource{}) + + // 来源名称 + if req.SourceName != "" { + query = query.Where("source_name LIKE ?", "%"+req.SourceName+"%") + } + + // 排序 + 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 +} + +// GetArticleScienceSourceListSearch 获取列表 +func (r *ArticleScienceSourceDao) GetArticleScienceSourceListSearch(req requests.GetArticleScienceSourceList) (m []*model.ArticleScienceSource, err error) { + // 构建查询条件 + query := global.Db.Model(&model.ArticleScienceSource{}) + + // 来源名称 + if req.SourceName != "" { + query = query.Where("source_name LIKE ?", "%"+req.SourceName+"%") + } + + // 排序 + query = query.Order("created_at desc") + + err = query.Scopes(model.Paginate(1, 10)).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} diff --git a/api/requests/ArticleScienceSource.go b/api/requests/ArticleScienceSource.go new file mode 100644 index 0000000..01bc103 --- /dev/null +++ b/api/requests/ArticleScienceSource.go @@ -0,0 +1,38 @@ +package requests + +type ArticleScienceSourceRequest struct { + GetArticleScienceSourcePage // 获取科普文章来源列表-分页 + GetArticleScienceSourceList // 获取科普文章来源列表 + PutArticleScienceSource // 修改科普文章来源 + AddArticleScienceSource // 新增科普文章来源 +} + +// GetArticleScienceSourcePage 获取科普文章来源列表-分页 +type GetArticleScienceSourcePage struct { + Page int `json:"page" form:"page" label:"页码"` + PageSize int `json:"page_size" form:"page_size" label:"每页个数"` + SourceName string `json:"source_name" form:"source_name" label:"来源名称"` // 来源名称 + Order *GetArticleScienceSourcePageOrder `json:"order" form:"order" label:"排序"` +} + +// GetArticleScienceSourcePageOrder 获取科普文章来源列表-分页-排序条件 +type GetArticleScienceSourcePageOrder struct { + UpdatedAt string `json:"updated_at" form:"updated_at" label:"排序"` // 修改时间 +} + +// GetArticleScienceSourceList 获取科普文章来源列表 +type GetArticleScienceSourceList struct { + SourceName string `json:"source_name" form:"source_name" label:"来源名称"` // 来源名称 +} + +// PutArticleScienceSource 修改科普文章来源 +type PutArticleScienceSource struct { + SourceName string `json:"source_name" form:"source_name" label:"来源名称" validate:"required"` // 来源名称 + SourceImage string `json:"source_image" form:"source_image" label:"来源图片" validate:"required"` // 来源图片 +} + +// AddArticleScienceSource 新增科普文章来源 +type AddArticleScienceSource struct { + SourceName string `json:"source_name" form:"source_name" label:"来源名称" validate:"required"` // 来源名称 + SourceImage string `json:"source_image" form:"source_image" label:"来源名称" validate:"required"` // 来源图片 +} diff --git a/api/router/router.go b/api/router/router.go index 01aa1bd..70c6b7f 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -904,16 +904,20 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 科普文章来源 sourceGroup := scienceGroup.Group("source") { - // 获取来源列表-分页 - sourceGroup.POST("/page", api.ArticleScience.GetArticleSciencePage) + // 获取科普文章来源列表-分页 + sourceGroup.POST("/page", api.ArticleScienceSource.GetArticleScienceSourcePage) - // 获取来源列表 + // 获取科普文章来源列表 + sourceGroup.GET("/list", api.ArticleScienceSource.GetArticleScienceSourceList) - // 获取来源详情 + // 获取科普文章来源详情 + sourceGroup.GET("/:source_id", api.ArticleScienceSource.GetArticleScienceSource) - // 修改来源文章 + // 修改科普文章来源 + sourceGroup.PUT("/:source_id", api.ArticleScienceSource.PutArticleScienceSource) - // 新增来源文章 + // 新增科普文章来源 + sourceGroup.POST("", api.ArticleScienceSource.AddArticleScienceSource) } }