新增科普文章来源管理

This commit is contained in:
wucongxing8150 2024-10-16 15:58:41 +08:00
parent aab466b4ea
commit 653694d98d
5 changed files with 332 additions and 6 deletions

View File

@ -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)
}

View File

@ -110,4 +110,5 @@ type basicManage struct {
// 文章管理
type articleManage struct {
ArticleScience
ArticleScienceSource
}

View File

@ -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
}

View File

@ -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"` // 来源图片
}

View File

@ -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)
}
}