新增了后台
This commit is contained in:
@@ -0,0 +1,333 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"strconv"
|
||||
"vote-admin-api/api/dao"
|
||||
"vote-admin-api/api/dto"
|
||||
"vote-admin-api/api/model"
|
||||
"vote-admin-api/api/requests"
|
||||
"vote-admin-api/api/responses"
|
||||
"vote-admin-api/global"
|
||||
"vote-admin-api/utils"
|
||||
)
|
||||
|
||||
type Article struct{}
|
||||
|
||||
// GetArticlePage 获取图文列表-分页
|
||||
func (r *Article) GetArticlePage(c *gin.Context) {
|
||||
articleRequest := requests.ArticleRequest{}
|
||||
req := articleRequest.GetArticlePage
|
||||
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
|
||||
}
|
||||
|
||||
if req.Order != nil {
|
||||
if req.Order.VoteNum != "" {
|
||||
if req.Order.VoteNum != "desc" && req.Order.VoteNum != "asc" {
|
||||
responses.FailWithMessage("排序字段错误", c)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取数据
|
||||
articleDao := dao.ArticleDao{}
|
||||
articles, total, err := articleDao.GetArticlePageSearch(req, req.Page, req.PageSize)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetArticleListDto(articles)
|
||||
|
||||
result := make(map[string]interface{})
|
||||
result["page"] = req.Page
|
||||
result["page_size"] = req.PageSize
|
||||
result["total"] = total
|
||||
result["data"] = g
|
||||
responses.OkWithData(result, c)
|
||||
}
|
||||
|
||||
// GetArticle 获取图文详情
|
||||
func (r *Article) GetArticle(c *gin.Context) {
|
||||
id := c.Param("article_id")
|
||||
if id == "" {
|
||||
responses.FailWithMessage("缺少参数", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 将 id 转换为 int64 类型
|
||||
articleId, err := strconv.ParseInt(id, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取数据
|
||||
articleDao := dao.ArticleDao{}
|
||||
article, err := articleDao.GetArticleById(articleId)
|
||||
if err != nil {
|
||||
responses.FailWithMessage("文章错误", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取作者数据
|
||||
articleAuthorDao := dao.ArticleAuthorDao{}
|
||||
maps := make(map[string]interface{})
|
||||
maps["article_id"] = articleId
|
||||
articleAuthors, err := articleAuthorDao.GetArticleAuthorPreloadList(maps)
|
||||
if err != nil {
|
||||
responses.FailWithMessage("文章错误", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取排名
|
||||
rank, _ := articleDao.GetArticleRank(article.ArticleId)
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetArticleDto(article)
|
||||
|
||||
// 加载数据-作者
|
||||
g.LoadArticleAuthor(articleAuthors)
|
||||
|
||||
// 加载数据-作者排名
|
||||
g.LoadRank(rank)
|
||||
|
||||
responses.OkWithData(g, c)
|
||||
}
|
||||
|
||||
// PutArticle 修改图文详情
|
||||
func (r *Article) PutArticle(c *gin.Context) {
|
||||
articleRequest := requests.ArticleRequest{}
|
||||
req := articleRequest.PutArticle
|
||||
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
|
||||
}
|
||||
|
||||
id := c.Param("article_id")
|
||||
if id == "" {
|
||||
responses.FailWithMessage("缺少参数", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 将 id 转换为 int64 类型
|
||||
articleId, err := strconv.ParseInt(id, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取订单数据
|
||||
articleDao := dao.ArticleDao{}
|
||||
article, err := articleDao.GetArticleById(articleId)
|
||||
if err != nil {
|
||||
responses.FailWithMessage("图文异常", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 开始事务
|
||||
tx := global.Db.Begin()
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
tx.Rollback()
|
||||
fmt.Println(r)
|
||||
}
|
||||
}()
|
||||
|
||||
articleData := make(map[string]interface{})
|
||||
|
||||
// 文章标题
|
||||
if article.ArticleTitle != req.ArticleTitle {
|
||||
articleData["article_title"] = req.ArticleTitle
|
||||
}
|
||||
|
||||
// 文章状态
|
||||
if article.ArticleStatus != req.ArticleStatus {
|
||||
articleData["article_status"] = req.ArticleStatus
|
||||
}
|
||||
|
||||
// 文章内容
|
||||
if article.ArticleContent != req.ArticleContent {
|
||||
articleData["article_content"] = req.ArticleContent
|
||||
}
|
||||
|
||||
// 修改
|
||||
if len(articleData) > 0 {
|
||||
err = articleDao.EditArticleById(tx, articleId, articleData)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 删除作者
|
||||
articleAuthorDao := dao.ArticleAuthorDao{}
|
||||
maps := make(map[string]interface{})
|
||||
maps["article_id"] = articleId
|
||||
err = articleAuthorDao.DeleteArticleAuthor(tx, maps)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
baseHospitalDao := dao.BaseHospitalDao{}
|
||||
// 新增作者
|
||||
for _, author := range req.ArticleAuthor {
|
||||
if author.HospitalId == "" {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("请选择作者所属医院", c)
|
||||
return
|
||||
}
|
||||
|
||||
if author.AuthorName == "" {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("请输入作者名称", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 检测医院
|
||||
hospitalId, err := strconv.ParseInt(author.HospitalId, 10, 64)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
baseHospital, err := baseHospitalDao.GetBaseHospitalById(hospitalId)
|
||||
if err != nil || baseHospital == nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("医院错误", c)
|
||||
return
|
||||
}
|
||||
|
||||
ArticleAuthor := &model.ArticleAuthor{
|
||||
ArticleId: articleId,
|
||||
AuthorName: author.AuthorName,
|
||||
HospitalId: hospitalId,
|
||||
}
|
||||
ArticleAuthor, err = articleAuthorDao.AddArticleAuthor(tx, ArticleAuthor)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
responses.Ok(c)
|
||||
}
|
||||
|
||||
// AddArticle 新增图文详情
|
||||
func (r *Article) AddArticle(c *gin.Context) {
|
||||
articleRequest := requests.ArticleRequest{}
|
||||
req := articleRequest.AddArticle
|
||||
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
|
||||
}
|
||||
|
||||
// 开始事务
|
||||
tx := global.Db.Begin()
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("操作失败", c)
|
||||
return
|
||||
}
|
||||
}()
|
||||
|
||||
article := &model.Article{
|
||||
ArticleTitle: req.ArticleTitle,
|
||||
ArticleStatus: req.ArticleStatus,
|
||||
VoteNum: 0,
|
||||
ArticleContent: req.ArticleContent,
|
||||
}
|
||||
|
||||
articleDao := dao.ArticleDao{}
|
||||
article, err := articleDao.AddArticle(tx, article)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 新增作者
|
||||
baseHospitalDao := dao.BaseHospitalDao{}
|
||||
articleAuthorDao := dao.ArticleAuthorDao{}
|
||||
for _, author := range req.ArticleAuthor {
|
||||
if author.HospitalId == "" {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("请选择作者所属医院", c)
|
||||
return
|
||||
}
|
||||
|
||||
if author.AuthorName == "" {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("请输入作者名称", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 检测医院
|
||||
hospitalId, err := strconv.ParseInt(author.HospitalId, 10, 64)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
baseHospital, err := baseHospitalDao.GetBaseHospitalById(hospitalId)
|
||||
if err != nil || baseHospital == nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("医院错误", c)
|
||||
return
|
||||
}
|
||||
|
||||
ArticleAuthor := &model.ArticleAuthor{
|
||||
ArticleId: article.ArticleId,
|
||||
AuthorName: author.AuthorName,
|
||||
HospitalId: hospitalId,
|
||||
}
|
||||
ArticleAuthor, err = articleAuthorDao.AddArticleAuthor(tx, ArticleAuthor)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
responses.Ok(c)
|
||||
}
|
||||
@@ -2,5 +2,12 @@ package controller
|
||||
|
||||
// Api api接口
|
||||
type Api struct {
|
||||
Public // 公共方法
|
||||
Public // 公共方法
|
||||
Article // 图文
|
||||
Video // 视频
|
||||
BaseAgreement // 基础数据-协议
|
||||
User // 用户
|
||||
UserVoteDay // 投票记录
|
||||
System // 配置
|
||||
BaseHospital // 基础数据-医院
|
||||
}
|
||||
|
||||
@@ -0,0 +1,198 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"strconv"
|
||||
"vote-admin-api/api/dao"
|
||||
"vote-admin-api/api/dto"
|
||||
"vote-admin-api/api/model"
|
||||
"vote-admin-api/api/requests"
|
||||
"vote-admin-api/api/responses"
|
||||
"vote-admin-api/global"
|
||||
"vote-admin-api/utils"
|
||||
)
|
||||
|
||||
type BaseAgreement struct{}
|
||||
|
||||
// GetBaseAgreementPage 获取协议列表-分页
|
||||
func (b *BaseAgreement) GetBaseAgreementPage(c *gin.Context) {
|
||||
baseAgreementRequest := requests.BaseAgreementRequest{}
|
||||
req := baseAgreementRequest.GetBaseAgreementPage
|
||||
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
|
||||
}
|
||||
|
||||
if req.Page == 0 {
|
||||
req.Page = 1
|
||||
}
|
||||
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = 20
|
||||
}
|
||||
|
||||
// 获取分类数据
|
||||
baseAgreementDao := dao.BaseAgreementDao{}
|
||||
baseAgreement, total, err := baseAgreementDao.GetBaseAgreementPageSearch(req.Page, req.PageSize)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetBaseAgreementListDto(baseAgreement)
|
||||
|
||||
result := make(map[string]interface{})
|
||||
result["page"] = req.Page
|
||||
result["page_size"] = req.PageSize
|
||||
result["total"] = total
|
||||
result["data"] = g
|
||||
responses.OkWithData(result, c)
|
||||
}
|
||||
|
||||
// GetBaseAgreement 获取协议详情
|
||||
func (b *BaseAgreement) GetBaseAgreement(c *gin.Context) {
|
||||
id := c.Param("agreement_id")
|
||||
if id == "" {
|
||||
responses.FailWithMessage("缺少参数", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 将 id 转换为 int64 类型
|
||||
agreementId, err := strconv.ParseInt(id, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取协议数据
|
||||
baseAgreementDao := dao.BaseAgreementDao{}
|
||||
baseAgreement, err := baseAgreementDao.GetBaseAgreementById(agreementId)
|
||||
if err != nil {
|
||||
responses.FailWithMessage("分类异常", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetBaseAgreementDto(baseAgreement)
|
||||
|
||||
responses.OkWithData(g, c)
|
||||
}
|
||||
|
||||
// PutBaseAgreement 修改协议
|
||||
func (b *BaseAgreement) PutBaseAgreement(c *gin.Context) {
|
||||
BaseAgreementRequest := requests.BaseAgreementRequest{}
|
||||
req := BaseAgreementRequest.PutBaseAgreement
|
||||
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("agreement_id")
|
||||
if id == "" {
|
||||
responses.FailWithMessage("缺少参数", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 将 id 转换为 int64 类型
|
||||
agreementId, err := strconv.ParseInt(id, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取协议数据
|
||||
baseAgreementDao := dao.BaseAgreementDao{}
|
||||
baseAgreement, err := baseAgreementDao.GetBaseAgreementById(agreementId)
|
||||
if err != nil {
|
||||
responses.FailWithMessage("分类异常", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 修改值
|
||||
baseAgreementData := make(map[string]interface{})
|
||||
|
||||
// 协议标题
|
||||
if req.AgreementTitle != baseAgreement.AgreementTitle {
|
||||
baseAgreementData["agreement_title"] = req.AgreementTitle
|
||||
}
|
||||
|
||||
// 协议内容
|
||||
if req.AgreementContent != baseAgreement.AgreementContent {
|
||||
baseAgreementData["agreement_content"] = req.AgreementContent
|
||||
}
|
||||
|
||||
if len(baseAgreementData) > 0 {
|
||||
// 开始事务
|
||||
tx := global.Db.Begin()
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
err = baseAgreementDao.EditBaseAgreementById(tx, agreementId, baseAgreementData)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("操作失败", c)
|
||||
return
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
}
|
||||
|
||||
responses.Ok(c)
|
||||
}
|
||||
|
||||
// AddBaseAgreement 新增协议
|
||||
func (b *BaseAgreement) AddBaseAgreement(c *gin.Context) {
|
||||
BaseAgreementRequest := requests.BaseAgreementRequest{}
|
||||
req := BaseAgreementRequest.AddBaseAgreement
|
||||
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()
|
||||
}
|
||||
}()
|
||||
|
||||
baseAgreement := &model.BaseAgreement{
|
||||
AgreementTitle: req.AgreementTitle,
|
||||
AgreementType: req.AgreementType,
|
||||
AgreementContent: req.AgreementContent,
|
||||
}
|
||||
|
||||
baseAgreementDao := dao.BaseAgreementDao{}
|
||||
baseAgreement, err := baseAgreementDao.AddBaseAgreement(tx, baseAgreement)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
responses.Ok(c)
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
// Package controller 科室管理
|
||||
package controller
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"vote-admin-api/api/dao"
|
||||
"vote-admin-api/api/dto"
|
||||
"vote-admin-api/api/requests"
|
||||
"vote-admin-api/api/responses"
|
||||
"vote-admin-api/global"
|
||||
"vote-admin-api/utils"
|
||||
)
|
||||
|
||||
type BaseHospital struct{}
|
||||
|
||||
// GetHospitalList 获取医院列表
|
||||
func (b *BaseHospital) GetHospitalList(c *gin.Context) {
|
||||
baseHospitalRequest := requests.BaseHospitalRequest{}
|
||||
req := baseHospitalRequest.GetBaseHospitalList
|
||||
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
|
||||
}
|
||||
|
||||
baseHospitalDao := dao.BaseHospitalDao{}
|
||||
baseHospitals, err := baseHospitalDao.GetBaseHospitalLimitByMaps(req)
|
||||
if err != nil {
|
||||
responses.Ok(c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
getHospitalLimitResponse := dto.GetBaseHospitalListDto(baseHospitals)
|
||||
responses.OkWithData(getHospitalLimitResponse, c)
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"time"
|
||||
"vote-admin-api/api/dao"
|
||||
"vote-admin-api/api/dto"
|
||||
"vote-admin-api/api/requests"
|
||||
@@ -102,6 +103,7 @@ func (b *Public) GetCaptcha(c *gin.Context) {
|
||||
id, b64s, err := utils.GenerateCaptcha()
|
||||
if err != nil {
|
||||
responses.FailWithMessage("验证码获取失败", c)
|
||||
return
|
||||
}
|
||||
|
||||
responses.OkWithData(gin.H{
|
||||
@@ -109,3 +111,116 @@ func (b *Public) GetCaptcha(c *gin.Context) {
|
||||
"b64s": b64s,
|
||||
}, c)
|
||||
}
|
||||
|
||||
// GetIndex 首页
|
||||
func (b *Public) GetIndex(c *gin.Context) {
|
||||
dataDao := dao.DataDao{}
|
||||
data, err := dataDao.GetDataById(1)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
g := dto.IndexDto{
|
||||
ViewNum: data.ViewNum,
|
||||
VoteNum: data.VoteNum,
|
||||
}
|
||||
|
||||
responses.OkWithData(g, c)
|
||||
}
|
||||
|
||||
// GetIndexData 首页动态统计数据
|
||||
func (b *Public) GetIndexData(c *gin.Context) {
|
||||
publicRequest := requests.PublicRequest{}
|
||||
req := publicRequest.GetIndexData
|
||||
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
|
||||
}
|
||||
|
||||
if err := c.ShouldBind(&req); err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 返回值
|
||||
var g []*dto.IndexDataDto
|
||||
results := make(map[string]int64)
|
||||
|
||||
// 分类(1:新增用户数 2:图文投票数 3:视频投票数)
|
||||
if req.Type == 1 {
|
||||
// 新增用户数
|
||||
endTime, _ := time.Parse("2006-01-02", req.EndTime)
|
||||
req.EndTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second).Format("2006-01-02 15:04:05")
|
||||
|
||||
userDao := dao.UserDao{}
|
||||
maps := make(map[string]interface{})
|
||||
users, err := userDao.GetUserListByTime(maps, req.StartTime, req.EndTime, "created_at")
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
for _, user := range users {
|
||||
date := time.Time(user.CreatedAt).Format("2006-01-02")
|
||||
results[date]++
|
||||
}
|
||||
}
|
||||
|
||||
// 图文投票数
|
||||
if req.Type == 2 {
|
||||
endTime, _ := time.Parse("2006-01-02", req.EndTime)
|
||||
req.EndTime = endTime.Format("2006-01-02")
|
||||
|
||||
articleVoteDayDao := dao.ArticleVoteDayDao{}
|
||||
maps := make(map[string]interface{})
|
||||
articleVoteDays, err := articleVoteDayDao.GetArticleVoteDayListByTime(maps, req.StartTime, req.EndTime, "voted_at")
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
for _, articleVoteDay := range articleVoteDays {
|
||||
votedAt := time.Time(*articleVoteDay.VotedAt)
|
||||
date := votedAt.Format("2006-01-02")
|
||||
results[date]++
|
||||
}
|
||||
}
|
||||
|
||||
// 视频投票数
|
||||
if req.Type == 3 {
|
||||
endTime, _ := time.Parse("2006-01-02", req.EndTime)
|
||||
req.EndTime = endTime.Format("2006-01-02")
|
||||
|
||||
videoVoteDayDao := dao.VideoVoteDayDao{}
|
||||
maps := make(map[string]interface{})
|
||||
videoVoteDays, err := videoVoteDayDao.GetVideoVoteDayListByTime(maps, req.StartTime, req.EndTime, "voted_at")
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
for _, videoVoteDay := range videoVoteDays {
|
||||
votedAt := time.Time(*videoVoteDay.VotedAt)
|
||||
date := votedAt.Format("2006-01-02")
|
||||
results[date]++
|
||||
}
|
||||
}
|
||||
|
||||
for k, v := range results {
|
||||
response := &dto.IndexDataDto{
|
||||
Date: k,
|
||||
Count: v,
|
||||
}
|
||||
|
||||
g = append(g, response)
|
||||
}
|
||||
|
||||
responses.OkWithData(g, c)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"strconv"
|
||||
"vote-admin-api/api/dao"
|
||||
"vote-admin-api/api/dto"
|
||||
"vote-admin-api/api/responses"
|
||||
)
|
||||
|
||||
type System struct{}
|
||||
|
||||
// GetSystemTime 获取投票时间详情
|
||||
func (r *System) GetSystemTime(c *gin.Context) {
|
||||
id := c.Param("system_time_id")
|
||||
if id == "" {
|
||||
responses.FailWithMessage("缺少参数", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 将 id 转换为 int64 类型
|
||||
systemTimeId, err := strconv.ParseInt(id, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取数据
|
||||
systemTimeDao := dao.SystemTimeDao{}
|
||||
systemTime, err := systemTimeDao.GetSystemTimeById(systemTimeId)
|
||||
if err != nil {
|
||||
responses.FailWithMessage("数据异常", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetSystemTimeDto(systemTime)
|
||||
|
||||
responses.OkWithData(g, c)
|
||||
}
|
||||
@@ -0,0 +1,147 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"strconv"
|
||||
"vote-admin-api/api/dao"
|
||||
"vote-admin-api/api/dto"
|
||||
"vote-admin-api/api/requests"
|
||||
"vote-admin-api/api/responses"
|
||||
"vote-admin-api/global"
|
||||
"vote-admin-api/utils"
|
||||
)
|
||||
|
||||
type User struct{}
|
||||
|
||||
// GetUserPage 获取用户列表-分页
|
||||
func (r *User) GetUserPage(c *gin.Context) {
|
||||
userRequest := requests.UserRequest{}
|
||||
req := userRequest.GetUserPage
|
||||
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
|
||||
}
|
||||
|
||||
if req.Page == 0 {
|
||||
req.Page = 1
|
||||
}
|
||||
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = 20
|
||||
}
|
||||
|
||||
// 获取数据
|
||||
userDao := dao.UserDao{}
|
||||
user, total, err := userDao.GetUserPageSearch(req, req.Page, req.PageSize)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetUserListDto(user)
|
||||
|
||||
result := make(map[string]interface{})
|
||||
result["page"] = req.Page
|
||||
result["page_size"] = req.PageSize
|
||||
result["total"] = total
|
||||
result["data"] = g
|
||||
responses.OkWithData(result, c)
|
||||
}
|
||||
|
||||
// GetUser 获取用户详情
|
||||
func (r *User) GetUser(c *gin.Context) {
|
||||
id := c.Param("user_id")
|
||||
if id == "" {
|
||||
responses.FailWithMessage("缺少参数", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 将 id 转换为 int64 类型
|
||||
userId, err := strconv.ParseInt(id, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取数据
|
||||
userDao := dao.UserDao{}
|
||||
user, err := userDao.GetUserById(userId)
|
||||
if err != nil {
|
||||
responses.FailWithMessage("用户异常", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetUserDto(user)
|
||||
|
||||
responses.OkWithData(g, c)
|
||||
}
|
||||
|
||||
// PutUserStatus 操作用户状态
|
||||
func (r *User) PutUserStatus(c *gin.Context) {
|
||||
userRequest := requests.UserRequest{}
|
||||
req := userRequest.PutUserStatus
|
||||
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("user_id")
|
||||
if id == "" {
|
||||
responses.FailWithMessage("缺少参数", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 将 id 转换为 int64 类型
|
||||
userId, err := strconv.ParseInt(id, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取数据
|
||||
userDao := dao.UserDao{}
|
||||
user, err := userDao.GetUserById(userId)
|
||||
if err != nil {
|
||||
responses.FailWithMessage("用户异常", c)
|
||||
return
|
||||
}
|
||||
|
||||
if req.UserStatus == user.UserStatus {
|
||||
responses.Ok(c)
|
||||
return
|
||||
}
|
||||
|
||||
// 开始事务
|
||||
tx := global.Db.Begin()
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
userData := make(map[string]interface{})
|
||||
userData["user_status"] = req.UserStatus
|
||||
err = userDao.EditUserById(tx, userId, userData)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("操作失败", c)
|
||||
return
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
responses.Ok(c)
|
||||
}
|
||||
@@ -0,0 +1,260 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"strconv"
|
||||
"time"
|
||||
"vote-admin-api/api/dao"
|
||||
"vote-admin-api/api/dto"
|
||||
"vote-admin-api/api/requests"
|
||||
"vote-admin-api/api/responses"
|
||||
"vote-admin-api/global"
|
||||
"vote-admin-api/utils"
|
||||
)
|
||||
|
||||
type UserVoteDay struct{}
|
||||
|
||||
// GetUserArticleVotePage 用户投票记录列表-图文-分页
|
||||
func (r *UserVoteDay) GetUserArticleVotePage(c *gin.Context) {
|
||||
userVoteDayRequest := requests.UserVoteDayRequest{}
|
||||
req := userVoteDayRequest.GetArticleUserVoteDayPage
|
||||
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
|
||||
}
|
||||
|
||||
if req.Page == 0 {
|
||||
req.Page = 1
|
||||
}
|
||||
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = 20
|
||||
}
|
||||
|
||||
userId, err := strconv.ParseInt(req.UserId, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
var total int64
|
||||
|
||||
articleVoteDayDao := dao.ArticleVoteDayDao{}
|
||||
articleVoteDay, total, err := articleVoteDayDao.GetArticleVoteDayByUserIdPageSearch(userId, req.Page, req.PageSize)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := make([]*dto.UserVoteDto, len(articleVoteDay))
|
||||
for i, v := range articleVoteDay {
|
||||
createdAt := time.Time(v.CreatedAt).Format("2006-01-02 15:04:05")
|
||||
|
||||
response := &dto.UserVoteDto{
|
||||
Id: fmt.Sprintf("%d", v.ArticleId),
|
||||
Title: v.Article.ArticleTitle,
|
||||
VotedAt: createdAt,
|
||||
}
|
||||
|
||||
// 将转换后的结构体添加到新切片中
|
||||
g[i] = response
|
||||
}
|
||||
|
||||
result := make(map[string]interface{})
|
||||
result["page"] = req.Page
|
||||
result["page_size"] = req.PageSize
|
||||
result["total"] = total
|
||||
result["data"] = g
|
||||
responses.OkWithData(result, c)
|
||||
}
|
||||
|
||||
// GetUserVideoVotePage 用户投票记录列表-视频-分页
|
||||
func (r *UserVoteDay) GetUserVideoVotePage(c *gin.Context) {
|
||||
userVoteDayRequest := requests.UserVoteDayRequest{}
|
||||
req := userVoteDayRequest.GetVideoUserVoteDayPage
|
||||
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
|
||||
}
|
||||
|
||||
if req.Page == 0 {
|
||||
req.Page = 1
|
||||
}
|
||||
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = 20
|
||||
}
|
||||
|
||||
userId, err := strconv.ParseInt(req.UserId, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
var total int64
|
||||
|
||||
videoVoteDayDao := dao.VideoVoteDayDao{}
|
||||
videoVoteDay, total, err := videoVoteDayDao.GetVideoVoteDayByUserIdPageSearch(userId, req.Page, req.PageSize)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := make([]*dto.UserVoteDto, len(videoVoteDay))
|
||||
for i, v := range videoVoteDay {
|
||||
createdAt := time.Time(v.CreatedAt).Format("2006-01-02 15:04:05")
|
||||
|
||||
response := &dto.UserVoteDto{
|
||||
Id: fmt.Sprintf("%d", v.VideoId),
|
||||
Title: v.Video.VideoTitle,
|
||||
VotedAt: createdAt,
|
||||
}
|
||||
|
||||
// 将转换后的结构体添加到新切片中
|
||||
g[i] = response
|
||||
}
|
||||
|
||||
result := make(map[string]interface{})
|
||||
result["page"] = req.Page
|
||||
result["page_size"] = req.PageSize
|
||||
result["total"] = total
|
||||
result["data"] = g
|
||||
responses.OkWithData(result, c)
|
||||
}
|
||||
|
||||
// GetArticleVotePage 投票记录列表-图文-分页
|
||||
func (r *UserVoteDay) GetArticleVotePage(c *gin.Context) {
|
||||
userVoteDayRequest := requests.UserVoteDayRequest{}
|
||||
req := userVoteDayRequest.GetArticleVoteDayPage
|
||||
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
|
||||
}
|
||||
|
||||
if req.Page == 0 {
|
||||
req.Page = 1
|
||||
}
|
||||
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = 20
|
||||
}
|
||||
|
||||
articleId, err := strconv.ParseInt(req.ArticleId, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
var total int64
|
||||
|
||||
articleVoteDayDao := dao.ArticleVoteDayDao{}
|
||||
articleVoteDay, total, err := articleVoteDayDao.GetArticleVoteDayByArticleIdPageSearch(articleId, req.Page, req.PageSize)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := make([]*dto.UserVoteDto, len(articleVoteDay))
|
||||
for i, v := range articleVoteDay {
|
||||
createdAt := time.Time(v.CreatedAt).Format("2006-01-02 15:04:05")
|
||||
|
||||
response := &dto.UserVoteDto{
|
||||
Id: fmt.Sprintf("%d", v.ArticleId),
|
||||
AppIden: v.User.AppIden,
|
||||
VotedAt: createdAt,
|
||||
}
|
||||
|
||||
// 将转换后的结构体添加到新切片中
|
||||
g[i] = response
|
||||
}
|
||||
|
||||
result := make(map[string]interface{})
|
||||
result["page"] = req.Page
|
||||
result["page_size"] = req.PageSize
|
||||
result["total"] = total
|
||||
result["data"] = g
|
||||
responses.OkWithData(result, c)
|
||||
}
|
||||
|
||||
// GetVideoVotePage 投票记录列表-视频-分页
|
||||
func (r *UserVoteDay) GetVideoVotePage(c *gin.Context) {
|
||||
userVoteDayRequest := requests.UserVoteDayRequest{}
|
||||
req := userVoteDayRequest.GetVideoVoteDayPage
|
||||
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
|
||||
}
|
||||
|
||||
if req.Page == 0 {
|
||||
req.Page = 1
|
||||
}
|
||||
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = 20
|
||||
}
|
||||
|
||||
videoId, err := strconv.ParseInt(req.VideoId, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
var total int64
|
||||
|
||||
videoVoteDayDao := dao.VideoVoteDayDao{}
|
||||
videoVoteDay, total, err := videoVoteDayDao.GetVideoVoteDayByVideoIdPageSearch(videoId, req.Page, req.PageSize)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := make([]*dto.UserVoteDto, len(videoVoteDay))
|
||||
for i, v := range videoVoteDay {
|
||||
createdAt := time.Time(v.CreatedAt).Format("2006-01-02 15:04:05")
|
||||
|
||||
response := &dto.UserVoteDto{
|
||||
Id: fmt.Sprintf("%d", v.VideoId),
|
||||
AppIden: v.User.AppIden,
|
||||
VotedAt: createdAt,
|
||||
}
|
||||
|
||||
// 将转换后的结构体添加到新切片中
|
||||
g[i] = response
|
||||
}
|
||||
|
||||
result := make(map[string]interface{})
|
||||
result["page"] = req.Page
|
||||
result["page_size"] = req.PageSize
|
||||
result["total"] = total
|
||||
result["data"] = g
|
||||
responses.OkWithData(result, c)
|
||||
}
|
||||
@@ -0,0 +1,344 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"strconv"
|
||||
"vote-admin-api/api/dao"
|
||||
"vote-admin-api/api/dto"
|
||||
"vote-admin-api/api/model"
|
||||
"vote-admin-api/api/requests"
|
||||
"vote-admin-api/api/responses"
|
||||
"vote-admin-api/global"
|
||||
"vote-admin-api/utils"
|
||||
)
|
||||
|
||||
type Video struct{}
|
||||
|
||||
// GetVideoPage 获取视频列表-分页
|
||||
func (r *Video) GetVideoPage(c *gin.Context) {
|
||||
VideoRequest := requests.VideoRequest{}
|
||||
req := VideoRequest.GetVideoPage
|
||||
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
|
||||
}
|
||||
|
||||
if req.Order != nil {
|
||||
if req.Order.VoteNum != "" {
|
||||
if req.Order.VoteNum != "desc" && req.Order.VoteNum != "asc" {
|
||||
responses.FailWithMessage("排序字段错误", c)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取数据
|
||||
VideoDao := dao.VideoDao{}
|
||||
Videos, total, err := VideoDao.GetVideoPageSearch(req, req.Page, req.PageSize)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetVideoListDto(Videos)
|
||||
|
||||
result := make(map[string]interface{})
|
||||
result["page"] = req.Page
|
||||
result["page_size"] = req.PageSize
|
||||
result["total"] = total
|
||||
result["data"] = g
|
||||
responses.OkWithData(result, c)
|
||||
}
|
||||
|
||||
// GetVideo 获取视频详情
|
||||
func (r *Video) GetVideo(c *gin.Context) {
|
||||
id := c.Param("video_id")
|
||||
if id == "" {
|
||||
responses.FailWithMessage("缺少参数", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 将 id 转换为 int64 类型
|
||||
videoId, err := strconv.ParseInt(id, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取数据
|
||||
VideoDao := dao.VideoDao{}
|
||||
video, err := VideoDao.GetVideoById(videoId)
|
||||
if err != nil {
|
||||
responses.FailWithMessage("视频错误", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取作者数据
|
||||
VideoAuthorDao := dao.VideoAuthorDao{}
|
||||
maps := make(map[string]interface{})
|
||||
maps["video_id"] = videoId
|
||||
VideoAuthors, err := VideoAuthorDao.GetVideoAuthorPreloadList(maps)
|
||||
if err != nil {
|
||||
responses.FailWithMessage("视频错误", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取排名
|
||||
rank, _ := VideoDao.GetVideoRank(video.VideoId)
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetVideoDto(video)
|
||||
|
||||
// 加载数据-作者
|
||||
g.LoadVideoAuthor(VideoAuthors)
|
||||
|
||||
// 加载数据-作者排名
|
||||
g.LoadRank(rank)
|
||||
|
||||
responses.OkWithData(g, c)
|
||||
}
|
||||
|
||||
// PutVideo 修改视频详情
|
||||
func (r *Video) PutVideo(c *gin.Context) {
|
||||
VideoRequest := requests.VideoRequest{}
|
||||
req := VideoRequest.PutVideo
|
||||
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
|
||||
}
|
||||
|
||||
id := c.Param("video_id")
|
||||
if id == "" {
|
||||
responses.FailWithMessage("缺少参数", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 将 id 转换为 int64 类型
|
||||
videoId, err := strconv.ParseInt(id, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取订单数据
|
||||
videoDao := dao.VideoDao{}
|
||||
video, err := videoDao.GetVideoById(videoId)
|
||||
if err != nil {
|
||||
responses.FailWithMessage("视频异常", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 开始事务
|
||||
tx := global.Db.Begin()
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
tx.Rollback()
|
||||
fmt.Println(r)
|
||||
}
|
||||
}()
|
||||
|
||||
videoData := make(map[string]interface{})
|
||||
|
||||
// 视频标题
|
||||
if video.VideoTitle != req.VideoTitle {
|
||||
videoData["video_title"] = req.VideoTitle
|
||||
}
|
||||
|
||||
// 视频状态
|
||||
if video.VideoStatus != req.VideoStatus {
|
||||
videoData["video_status"] = req.VideoStatus
|
||||
}
|
||||
|
||||
// 总票数
|
||||
if video.VoteNum != req.VoteNum {
|
||||
videoData["vote_num"] = req.VoteNum
|
||||
}
|
||||
|
||||
// 视频编号
|
||||
if video.VideoNo != req.VideoNo {
|
||||
videoData["video_no"] = req.VideoNo
|
||||
}
|
||||
|
||||
// 视频内容
|
||||
if video.VideoContent != req.VideoContent {
|
||||
videoData["video_content"] = req.VideoContent
|
||||
}
|
||||
|
||||
// 修改
|
||||
if len(videoData) > 0 {
|
||||
err = videoDao.EditVideoById(tx, videoId, videoData)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 删除作者
|
||||
VideoAuthorDao := dao.VideoAuthorDao{}
|
||||
maps := make(map[string]interface{})
|
||||
maps["video_id"] = videoId
|
||||
err = VideoAuthorDao.DeleteVideoAuthor(tx, maps)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
baseHospitalDao := dao.BaseHospitalDao{}
|
||||
// 新增作者
|
||||
for _, author := range req.VideoAuthor {
|
||||
if author.HospitalId == "" {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("请选择作者所属医院", c)
|
||||
return
|
||||
}
|
||||
|
||||
if author.AuthorName == "" {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("请输入作者名称", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 检测医院
|
||||
hospitalId, err := strconv.ParseInt(author.HospitalId, 10, 64)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
baseHospital, err := baseHospitalDao.GetBaseHospitalById(hospitalId)
|
||||
if err != nil || baseHospital == nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("医院错误", c)
|
||||
return
|
||||
}
|
||||
|
||||
videoAuthor := &model.VideoAuthor{
|
||||
VideoId: videoId,
|
||||
AuthorName: author.AuthorName,
|
||||
HospitalId: hospitalId,
|
||||
}
|
||||
videoAuthor, err = VideoAuthorDao.AddVideoAuthor(tx, videoAuthor)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
responses.Ok(c)
|
||||
}
|
||||
|
||||
// AddVideo 新增视频详情
|
||||
func (r *Video) AddVideo(c *gin.Context) {
|
||||
videoRequest := requests.VideoRequest{}
|
||||
req := videoRequest.AddVideo
|
||||
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
|
||||
}
|
||||
|
||||
// 开始事务
|
||||
tx := global.Db.Begin()
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("操作失败", c)
|
||||
return
|
||||
}
|
||||
}()
|
||||
|
||||
video := &model.Video{
|
||||
VideoTitle: req.VideoTitle,
|
||||
VideoStatus: req.VideoStatus,
|
||||
VideoNo: req.VideoNo,
|
||||
VoteNum: req.VoteNum,
|
||||
VideoContent: req.VideoContent,
|
||||
}
|
||||
|
||||
videoDao := dao.VideoDao{}
|
||||
video, err := videoDao.AddVideo(tx, video)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 新增作者
|
||||
baseHospitalDao := dao.BaseHospitalDao{}
|
||||
videoAuthorDao := dao.VideoAuthorDao{}
|
||||
for _, author := range req.VideoAuthor {
|
||||
if author.HospitalId == "" {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("请选择作者所属医院", c)
|
||||
return
|
||||
}
|
||||
|
||||
if author.AuthorName == "" {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("请输入作者名称", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 检测医院
|
||||
hospitalId, err := strconv.ParseInt(author.HospitalId, 10, 64)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
baseHospital, err := baseHospitalDao.GetBaseHospitalById(hospitalId)
|
||||
if err != nil || baseHospital == nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("医院错误", c)
|
||||
return
|
||||
}
|
||||
|
||||
videoAuthor := &model.VideoAuthor{
|
||||
VideoId: video.VideoId,
|
||||
AuthorName: author.AuthorName,
|
||||
HospitalId: hospitalId,
|
||||
}
|
||||
videoAuthor, err = videoAuthorDao.AddVideoAuthor(tx, videoAuthor)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
responses.Ok(c)
|
||||
}
|
||||
Reference in New Issue
Block a user