Browse Source

新建语音

ziwen 2 years ago
parent
commit
e32600d11d

+ 119 - 1
controller/voice_broadcast/voice_broadcast.go

@@ -1,13 +1,21 @@
 package voice_broadcast
 
 import (
+	"fmt"
 	"github.com/gin-gonic/gin"
 	"hongze/hongze_yb/controller/response"
+	"hongze/hongze_yb/global"
 	"hongze/hongze_yb/models/request"
 	voiceResp "hongze/hongze_yb/models/response"
+	"hongze/hongze_yb/models/tables/voice_broadcast"
 	"hongze/hongze_yb/services"
 	"hongze/hongze_yb/services/user"
 	"hongze/hongze_yb/utils"
+	"io/ioutil"
+	"os"
+	"path"
+	"strconv"
+	"time"
 )
 
 // BroadcastList
@@ -15,6 +23,7 @@ import (
 // @Param page_index			query int false "页码"
 // @Param page_size				query int false "每页数量"
 // @Param broadcast_id			query int false "语音播报id"
+// @Param section_id			query int false "板块id"
 // @Success 200 {object} []voiceResp.BroadcastListResp
 // @failure 400 {string} string "获取失败"
 // @Router /list [get]
@@ -32,7 +41,7 @@ func BroadcastList(c *gin.Context) {
 	}
 
 	userinfo := user.GetInfoByClaims(c)
-	list, err := services.GetVoiceBroadcastList(req.PageIndex, req.PageSize, req.BroadcastId, userinfo)
+	list, err := services.GetVoiceBroadcastList(req.PageIndex, req.PageSize, req.SectionId, req.BroadcastId, userinfo)
 	if err != nil {
 
 		response.FailMsg("获取语音播报列表失败,"+err.Error(), "QuestionList ErrMsg:"+err.Error(), c)
@@ -50,3 +59,112 @@ func BroadcastList(c *gin.Context) {
 	response.OkData("获取成功", resp, c)
 }
 
+// AddBroadcast
+// @Description 新建语音播报
+// @Param file  query  string  true  "音频文件"
+// @Success 200 {string} string "发布成功"
+// @failure 400 {string} string "发布失败"
+// @Router /add [post]
+func AddBroadcast(c *gin.Context) {
+	//var req request.AddBroadcastReq
+	broadcastName := c.PostForm("broadcast_name")
+	fmt.Println("broadcastName:",broadcastName)
+	nsectionId := c.PostForm("section_id")
+	sectionId, _ := strconv.Atoi(nsectionId)
+	sectionName := c.PostForm("section_name")
+	nvarietyId := c.PostForm("variety_id")
+	varietyId, _ := strconv.Atoi(nvarietyId)
+	varietyName := c.PostForm("variety_name")
+	nauthorId := c.PostForm("author_id")
+	authorId, _ := strconv.Atoi(nauthorId)
+	author := c.PostForm("author")
+	file, err := c.FormFile("file")
+	if err != nil {
+		response.FailMsg("获取资源失败", "获取资源失败, Err:"+err.Error(), c)
+		return
+	}
+
+	ext := path.Ext(file.Filename)
+	if ext != ".mp3" {
+		response.Fail("暂仅支持mp3格式", c)
+		return
+	}
+	dateDir := time.Now().Format("20060102")
+	localDir := global.CONFIG.Serve.StaticDir + "hongze/" + dateDir
+	if err := os.MkdirAll(localDir, 0766); err != nil {
+		response.FailMsg("存储目录创建失败", "QuestionUploadAudio 存储目录创建失败, Err:"+err.Error(), c)
+		return
+	}
+	randStr := utils.GetRandStringNoSpecialChar(28)
+	filtName := randStr + ext
+	fpath := localDir + "/" + filtName
+	defer func() {
+		_ = os.Remove(fpath)
+	}()
+	// 生成文件至指定目录
+	if err := c.SaveUploadedFile(file, fpath); err != nil {
+		response.FailMsg("文件生成失败", "QuestionUploadAudio 文件生成失败, Err:"+err.Error(), c)
+		return
+	}
+	// 获取音频文件时长
+	fByte, err := ioutil.ReadFile(fpath)
+	if err != nil {
+		response.FailMsg("读取本地文件失败", "QuestionUploadAudio 读取本地文件失败", c)
+		return
+	}
+	if len(fByte) <= 0 {
+		response.FailMsg("文件大小有误", "QuestionUploadAudio 文件大小有误", c)
+		return
+	}
+	seconds, err := services.GetMP3PlayDuration(fByte)
+	if err != nil {
+		response.FailMsg("读取文件时长失败", "QuestionUploadAudio 读取文件时长失败", c)
+		return
+	}
+	// 音频大小MB
+	fi, err := os.Stat(fpath)
+	if err != nil {
+		response.FailMsg("读取文件大小失败", "QuestionUploadAudio 读取文件大小失败", c)
+		return
+	}
+	mb := utils.Bit2MB(fi.Size(), 2)
+	// 上传文件至阿里云
+	ossDir := "yb_wx/voice_broadcast/"
+	resourceUrl, err := services.UploadAliyunToDir(filtName, fpath, ossDir)
+	if err != nil {
+		response.FailMsg("文件上传失败", "QuestionUploadAudio 文件上传失败, Err:"+err.Error(), c)
+		return
+	}
+
+	voiceBroadcast := voice_broadcast.VoiceBroadcast{
+		BroadcastName:    broadcastName,
+		SectionId:        sectionId,
+		SectionName:      sectionName,
+		VarietyId:        varietyId,
+		VarietyName:      varietyName,
+		AuthorId:         authorId,
+		Author:           author,
+		VoiceUrl:         resourceUrl,
+		VoicePlaySeconds: fmt.Sprint(seconds),
+		VoiceSize:        fmt.Sprint(mb),
+		CreateTime:       time.Now().Format(utils.FormatDateTime),
+	}
+	err = voiceBroadcast.AddVoiceBroadcast()
+	if err != nil {
+		fmt.Println("AddUserViewHistory err", err.Error())
+	}
+	response.Ok("发布成功", c)
+}
+
+// BroadcastList
+// @Description 语音播报列表
+// @Param page_index			query int false "页码"
+// @Param page_size				query int false "每页数量"
+// @Param broadcast_id			query int false "语音播报id"
+// @Param section_id			query int false "板块id"
+// @Success 200 {object} []voiceResp.BroadcastListResp
+// @failure 400 {string} string "获取失败"
+// @Router /section/list [get]
+func SectionList(c *gin.Context) {
+	
+}

+ 1 - 1
middleware/recover.go

@@ -18,7 +18,7 @@ func Recover() gin.HandlerFunc {
 		contentType := c.ContentType()
 		// 为 multipart forms 设置较低的内存限制(50M) (默认是 32 MiB)
 		if contentType == "multipart/form-data" {
-			err := c.Request.ParseMultipartForm(-50 << 20)
+			err := c.Request.ParseMultipartForm(10 << 20)
 			if err != nil {
 				response.Custom(http.StatusRequestEntityTooLarge, "上传文件太大,err:"+err.Error(), c)
 				c.Abort()

+ 1 - 1
models/request/user/user.go

@@ -13,7 +13,7 @@ type ApplyReq struct {
 	CompanyName     string `description:"公司名称" json:"company_name"`
 	RealName        string `description:"用户真实姓名" json:"real_name"`
 	Permission      string `description:"用户关注品种,多个品种之间用英文,隔开" json:"permission"`
-	Source			int	   `description:"申请来源:1-我的 2-活动 3-图库"`
+	Source			int	   `description:"申请来源:1-我的 2-活动 3-图库 4-报告详情 5-问答社区 6-价格驱动 7-沙盘推演 8-语音播报"`
 	SourceAgent     int    `description:"申请入口来源,1:小程序,2:pc" json:"source_agent"`
 	FromPage        string `description:"申请来源页面" json:"from_page"`
 }

+ 28 - 0
models/request/voice_broadcast.go

@@ -1,7 +1,35 @@
 package request
 
+import "mime/multipart"
+
 type BroadcastListReq struct {
 	PageIndex   int `json:"page_index" form:"page_index"`
 	PageSize    int `json:"page_size" form:"page_size"`
 	BroadcastId int `json:"broadcast_id" form:"broadcast_id"`
+	SectionId   int `json:"section_id" form:"section_id"`
+}
+
+type AddBroadcastReq struct {
+	BroadcastName string                `json:"broadcast_name" `
+	SectionId     int                   `json:"section_id" `
+	SectionName   string                `json:"section_name"`
+	VarietyId     int                   `json:"variety_id"`
+	VarietyName   string                `json:"variety_name"`
+	AuthorId      int                   `json:"author_id"`
+	Author        string                `json:"author"`
+	File          *multipart.FileHeader `json:"file"`
 }
+
+//type AddBroadcastReq struct {
+//	BroadcastName    string `json:"page_index" `
+//	SectionId        int    `json:"section_id" `
+//	SectionName      string `json:"section_name"`
+//	VarietyId        int    `json:"variety_id"`
+//	VarietyName      string `json:"variety_name"`
+//	AuthorId         int    `json:"author_id"`
+//	Author           string `json:"author"`
+//	VoiceUrl         string `json:"voice_url"`
+//	VoicePlaySeconds string `json:"voice_play_seconds"`
+//	VoiceSize        string `json:"voice_size"`
+//	CreateTime       string `json:"create_time" `
+//}

+ 15 - 12
models/response/voice_broadcast.go

@@ -2,19 +2,22 @@ package response
 
 // BroadcastListResp 语音播报列表resp
 type BroadcastListResp struct {
-	List         []BroadCast
+	List         []Broadcast
 	IsVoiceAdmin bool `description:"是否为语音管理员"`
 }
 
-type BroadCast struct {
-	BroadcastId   int    `description:"语音ID"`
-	BroadcastName string `description:"语音名称"`
-	SectionId     int    `description:"语音分类ID"`
-	SectionName   string `description:"语音分类名称"`
-	VarietyId     int    `description:"品种id"`
-	VarietyName   string `description:"品种名称"`
-	AuthorId      int    `description:"作者id"`
-	Author        string `description:"作者"`
-	CreateTime    string `description:"创建时间"`
-	IsAuthor      bool   `description:"是否为作者"`
+type Broadcast struct {
+	BroadcastId      int    `description:"语音ID"`
+	BroadcastName    string `description:"语音名称"`
+	SectionId        int    `description:"语音分类ID"`
+	SectionName      string `description:"语音分类名称"`
+	VarietyId        int    `description:"品种id"`
+	VarietyName      string `description:"品种名称"`
+	AuthorId         int    `description:"作者id"`
+	Author           string `description:"作者"`
+	VoiceUrl         string `description:"音频url"`
+	VoicePlaySeconds string `description:"音频时长"`
+	VoiceSize        string `description:"音频大小"`
+	CreateTime       string `description:"创建时间"`
+	IsAuthor         bool   `description:"是否为作者"`
 }

+ 8 - 0
models/tables/voice_broadcast/create.go

@@ -1 +1,9 @@
 package voice_broadcast
+
+import "hongze/hongze_yb/global"
+
+// AddVoiceBroadcast 新增记录
+func (voiceBroadcast *VoiceBroadcast) AddVoiceBroadcast() (err error) {
+	err = global.DEFAULT_MYSQL.Create(voiceBroadcast).Error
+	return
+}

+ 2 - 2
models/tables/voice_broadcast/query.go

@@ -2,9 +2,9 @@ package voice_broadcast
 
 import "hongze/hongze_yb/global"
 
-func GetBroadcastByCondition(pageIndex, pageSize int) (list []*VoiceBroadcast, err error) {
+func GetBroadcastByCondition(pageIndex, pageSize, sectionId int) (list []*VoiceBroadcast, err error) {
 	offset := (pageIndex - 1) * pageSize
-	err = global.DEFAULT_MYSQL.Model(VoiceBroadcast{}).Offset(offset).Limit(pageSize).Order("create_time DESC").Scan(&list).Error
+	err = global.DEFAULT_MYSQL.Model(VoiceBroadcast{}).Where("section_id=?", sectionId).Offset(offset).Limit(pageSize).Order("create_time DESC").Scan(&list).Error
 	return
 }
 

+ 13 - 10
models/tables/voice_broadcast/voice_broadcast.go

@@ -1,18 +1,21 @@
 package voice_broadcast
 
 type VoiceBroadcast struct {
-	BroadcastId   int    `description:"语音ID"`
-	BroadcastName string `description:"语音名称"`
-	SectionId     int    `description:"语音分类ID"`
-	SectionName   string `description:"语音分类名称"`
-	VarietyId     int    `description:"品种id"`
-	VarietyName   string `description:"品种名称"`
-	AuthorId      int    `description:"作者id"`
-	Author        string `description:"作者"`
-	CreateTime    string `description:"创建时间"`
+	BroadcastId      int    `description:"语音ID"`
+	BroadcastName    string `description:"语音名称"`
+	SectionId        int    `description:"语音分类ID"`
+	SectionName      string `description:"语音分类名称"`
+	VarietyId        int    `description:"品种id"`
+	VarietyName      string `description:"品种名称"`
+	AuthorId         int    `description:"作者id"`
+	Author           string `description:"作者"`
+	VoiceUrl         string `description:"音频url"`
+	VoicePlaySeconds string `description:"音频时长"`
+	VoiceSize        string `description:"音频大小"`
+	CreateTime       string `description:"创建时间"`
 }
 
 // TableName get sql table name.获取数据库表名
 func (m *VoiceBroadcast) TableName() string {
 	return "yb_voice_broadcast"
-}
+}

+ 2 - 1
routers/voice_broadcast.go

@@ -9,6 +9,7 @@ import (
 func InitVoiceBroadcast(r *gin.Engine)  {
 	rGroup := r.Group("api/voice/broadcast").Use(middleware.Token())
 	rGroup.POST("/list", voice_broadcast.BroadcastList)
-	//rGroup.POST("/add", voice_broadcast.AddBroadcast)
+	rGroup.POST("/add", voice_broadcast.AddBroadcast)
+	rGroup.POST("/section/list", voice_broadcast.SectionList)
 }
 

+ 19 - 15
services/voice_broadcast.go

@@ -10,24 +10,28 @@ import (
 	"hongze/hongze_yb/utils"
 )
 
-func GetVoiceBroadcastList(pageindex, pagesize, broadcastId int, userInfo user.UserInfo)  (list []response.BroadCast, err error){
+func GetVoiceBroadcastList(pageindex, pagesize, sectionId, broadcastId int, userInfo user.UserInfo)  (list []response.Broadcast, err error){
 	if broadcastId == 0 {
-		broadList, e := voice_broadcast.GetBroadcastByCondition(pageindex, pagesize)
+		broadList, e := voice_broadcast.GetBroadcastByCondition(pageindex, pagesize, sectionId)
 		if e != nil {
 			e = errors.New("获取语音播报列表失败 Err:" + e.Error())
 		}
 		for _, item := range broadList {
-			var respItem response.BroadCast
-			respItem = response.BroadCast{
-				BroadcastId:   item.BroadcastId,
-				BroadcastName: item.BroadcastName,
-				SectionId:     item.SectionId,
-				SectionName:   item.SectionName,
-				VarietyId:     item.VarietyId,
-				VarietyName:   item.VarietyName,
-				AuthorId:      item.AuthorId,
-				Author:        item.Author,
-				CreateTime:    item.CreateTime,
+			var respItem response.Broadcast
+			respItem = response.Broadcast{
+				BroadcastId:      item.BroadcastId,
+				BroadcastName:    item.BroadcastName,
+				SectionId:        item.SectionId,
+				SectionName:      item.SectionName,
+				VarietyId:        item.VarietyId,
+				VarietyName:      item.VarietyName,
+				AuthorId:         item.AuthorId,
+				Author:           item.Author,
+				VoiceUrl:         item.VoiceUrl,
+				VoicePlaySeconds: item.VoicePlaySeconds,
+				VoiceSize:        item.VoiceSize,
+				CreateTime:       item.CreateTime,
+				IsAuthor:         false,
 			}
 			if int(userInfo.UserID) == item.AuthorId{
 				respItem.IsAuthor = true
@@ -43,8 +47,8 @@ func GetVoiceBroadcastList(pageindex, pagesize, broadcastId int, userInfo user.U
 			e = errors.New("获取语音播报列表失败 Err:" + e.Error())
 		}
 		for _, item := range broadList {
-			var respItem response.BroadCast
-			respItem = response.BroadCast{
+			var respItem response.Broadcast
+			respItem = response.Broadcast{
 				BroadcastId:   item.BroadcastId,
 				BroadcastName: item.BroadcastName,
 				SectionId:     item.SectionId,