|
@@ -15,10 +15,6 @@ import (
|
|
|
"hongze/hongze_yb/services/user"
|
|
|
"hongze/hongze_yb/services/wechat"
|
|
|
"hongze/hongze_yb/utils"
|
|
|
- "io/ioutil"
|
|
|
- "mime/multipart"
|
|
|
- "os"
|
|
|
- "path"
|
|
|
"strings"
|
|
|
"time"
|
|
|
)
|
|
@@ -29,15 +25,10 @@ func GetVoiceBroadcastList(pageIndex, pageSize, sectionId, broadcastId, authorId
|
|
|
var pars []interface{}
|
|
|
// 分享进来的指定语音播报
|
|
|
if broadcastId > 0 {
|
|
|
- condition += ` AND broadcast_id = ?`
|
|
|
+ condition += ` AND broadcast_id = ? AND publish_state = 1`
|
|
|
pars = append(pars, broadcastId)
|
|
|
} else {
|
|
|
- // 板块
|
|
|
- if sectionId > 0 {
|
|
|
- condition += ` AND section_id = ?`
|
|
|
- pars = append(pars, sectionId)
|
|
|
- }
|
|
|
- // 我的
|
|
|
+ // 我的-非我的只能看到已发布
|
|
|
if authorId > 0 {
|
|
|
condition += ` AND author_id = ?`
|
|
|
pars = append(pars, authorId)
|
|
@@ -46,6 +37,13 @@ func GetVoiceBroadcastList(pageIndex, pageSize, sectionId, broadcastId, authorId
|
|
|
condition += ` AND publish_state = ?`
|
|
|
pars = append(pars, mineStatus)
|
|
|
}
|
|
|
+ } else {
|
|
|
+ condition += ` AND publish_state = 1`
|
|
|
+ }
|
|
|
+ // 板块
|
|
|
+ if sectionId > 0 {
|
|
|
+ condition += ` AND section_id = ?`
|
|
|
+ pars = append(pars, sectionId)
|
|
|
}
|
|
|
}
|
|
|
voiceList, e := voice_broadcast.GetPageListByCondition(condition, pars, pageIndex, pageSize)
|
|
@@ -183,6 +181,11 @@ func SendBroadcastMsg(broadcastId, userId int) (errMsg string, err error) {
|
|
|
err = errors.New("获取语音播报信息失败, Err: " + e.Error())
|
|
|
return
|
|
|
}
|
|
|
+ if broadcast.PublishState != 1 {
|
|
|
+ errMsg = "报告未发布, 不可推送"
|
|
|
+ err = errors.New("报告未发布, 不可推送")
|
|
|
+ return
|
|
|
+ }
|
|
|
if broadcast.AuthorId != userId {
|
|
|
errMsg = "仅语音播报创建人可推送"
|
|
|
err = errors.New("仅语音播报创建人可推送")
|
|
@@ -213,74 +216,54 @@ func SendBroadcastMsg(broadcastId, userId int) (errMsg string, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// PublishVoiceBroadcast 发布语音播报
|
|
|
-func PublishVoiceBroadcast(broadcastId, sectionId, varietyId, authorId, publishType int, broadcastName, sectionName, varietyName, author,
|
|
|
- imgUrl, prePublishTime, imgs string, voiceFile *multipart.FileHeader) (errMsg string, err error) {
|
|
|
- // broadcastId>0时为编辑
|
|
|
- var e error
|
|
|
- item := new(voice_broadcast.VoiceBroadcast)
|
|
|
- if broadcastId > 0 {
|
|
|
- // 语音播报
|
|
|
- exists, e := voice_broadcast.GetBroadcastById(broadcastId)
|
|
|
- if e != nil || exists.BroadcastId == 0 {
|
|
|
- errMsg = "语音播报信息有误"
|
|
|
- err = errors.New("语音播报信息有误\n")
|
|
|
- return
|
|
|
- }
|
|
|
- if exists.PublishState == 1 {
|
|
|
- errMsg = "请勿重复发布"
|
|
|
- err = errors.New("该语音播报已发布\n")
|
|
|
- return
|
|
|
- }
|
|
|
- item = exists
|
|
|
+// CreateVoiceBroadcast 新增语音播报
|
|
|
+func CreateVoiceBroadcast(sectionId, varietyId, authorId int, broadcastName, sectionName, varietyName, author, voiceSeconds, voiceSize, voiceUrl, imgs string) (err error) {
|
|
|
+ nowTime := time.Now().Local()
|
|
|
+ item := &voice_broadcast.VoiceBroadcast{
|
|
|
+ BroadcastName: broadcastName,
|
|
|
+ SectionId: sectionId,
|
|
|
+ SectionName: sectionName,
|
|
|
+ VarietyId: varietyId,
|
|
|
+ VarietyName: varietyName,
|
|
|
+ AuthorId: authorId,
|
|
|
+ Author: author,
|
|
|
+ VoiceUrl: voiceUrl,
|
|
|
+ VoicePlaySeconds: voiceSeconds,
|
|
|
+ VoiceSize: voiceSize,
|
|
|
+ CreateTime: nowTime.Format(utils.FormatDateTime),
|
|
|
+ ModifyTime: nowTime.Format(utils.FormatDateTime),
|
|
|
}
|
|
|
- item.CreateTime = time.Now().Local().Format(utils.FormatDateTime)
|
|
|
- item.PublishTime = ""
|
|
|
- item.PrePublishTime = ""
|
|
|
- updateCols := []string{"BroadcastName", "SectionId", "SectionName", "VarietyId", "VarietyName", "AuthorId", "Author", "ImgUrl", "VoiceUrl",
|
|
|
- "VoicePlaySeconds", "VoiceSize", "ModifyTime", "PublishState"}
|
|
|
-
|
|
|
- // publishType: 0-仅发布 1-发布并推送 2-定时发布; 发布类型为定时发送时, 分享图时间取预发布时间
|
|
|
- publishTime := time.Now().Local()
|
|
|
- if publishType == 2 {
|
|
|
- updateCols = append(updateCols, "PrePublishTime")
|
|
|
- item.PublishState = 0
|
|
|
- item.PrePublishTime = prePublishTime
|
|
|
- publishTime, e = time.ParseInLocation(utils.FormatDateTime, prePublishTime, time.Local)
|
|
|
- if e != nil {
|
|
|
- errMsg = "预发布时间有误"
|
|
|
- err = errors.New("预发布时间有误, Err:" + "\n" + e.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 非定时发布时重置预发布时间
|
|
|
- updateCols = append(updateCols, "PublishTime", "PrePublishTime")
|
|
|
- item.PublishState = 1
|
|
|
- item.PublishTime = publishTime.Format(utils.FormatDateTime)
|
|
|
- item.PrePublishTime = ""
|
|
|
- if publishType == 1 {
|
|
|
- updateCols = append(updateCols, "MsgState", "MsgTime")
|
|
|
- item.MsgState = 1
|
|
|
- item.MsgTime = time.Now().Format(utils.FormatDateTime)
|
|
|
- }
|
|
|
+ // 图片
|
|
|
+ imgList := make([]*voice_broadcast_img.YbVoiceBroadcastImg, 0)
|
|
|
+ imgArr := strings.Split(imgs, ",")
|
|
|
+ imgLen := len(imgArr)
|
|
|
+ for i := 0; i < imgLen; i++ {
|
|
|
+ imgList = append(imgList, &voice_broadcast_img.YbVoiceBroadcastImg{
|
|
|
+ BroadcastId: item.BroadcastId,
|
|
|
+ ImgUrl: imgArr[i],
|
|
|
+ CreateTime: nowTime,
|
|
|
+ })
|
|
|
}
|
|
|
- shareTime := publishTime.Format(utils.FormatDate)
|
|
|
- shareImg, e := createVoiceBroadcastShareImg(imgUrl, sectionName, shareTime)
|
|
|
- if e != nil {
|
|
|
- errMsg = "生成分享图失败"
|
|
|
- err = errors.New("生成分享图失败, Err: " + "\n" + e.Error())
|
|
|
+ if e := voice_broadcast.CreateVoiceBroadcastAndImgs(item, imgList); e != nil {
|
|
|
+ err = errors.New("新增语音播报及图片失败, Err: " + e.Error())
|
|
|
return
|
|
|
}
|
|
|
+ return
|
|
|
+}
|
|
|
|
|
|
- // 上传音频
|
|
|
- fileSeconds, fileSize, resourceUrl, e := handleVoiceBroadcastFile(voiceFile)
|
|
|
+// EditVoiceBroadcast 编辑语音播报
|
|
|
+func EditVoiceBroadcast(broadcastId, sectionId, varietyId, authorId int, broadcastName, sectionName, varietyName, author, voiceSeconds, voiceSize, voiceUrl, imgs string) (err error) {
|
|
|
+ if broadcastId <= 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ item, e := voice_broadcast.GetBroadcastById(broadcastId)
|
|
|
if e != nil {
|
|
|
- errMsg = "语音信息有误"
|
|
|
- err = errors.New("上传音频失败, Err: " + "\n" + e.Error())
|
|
|
+ err = errors.New("语音播报信息有误")
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
- // 语音播报及图片
|
|
|
+ nowTime := time.Now().Local()
|
|
|
+ updateCols := []string{"BroadcastName", "SectionId", "SectionName", "VarietyId", "VarietyName", "AuthorId", "Author", "VoiceUrl",
|
|
|
+ "VoicePlaySeconds", "VoiceSize", "ModifyTime"}
|
|
|
item.BroadcastName = broadcastName
|
|
|
item.SectionId = sectionId
|
|
|
item.SectionName = sectionName
|
|
@@ -288,16 +271,14 @@ func PublishVoiceBroadcast(broadcastId, sectionId, varietyId, authorId, publishT
|
|
|
item.VarietyName = varietyName
|
|
|
item.AuthorId = authorId
|
|
|
item.Author = author
|
|
|
- item.ImgUrl = shareImg
|
|
|
- item.VoiceUrl = resourceUrl
|
|
|
- item.VoicePlaySeconds = fmt.Sprint(fileSeconds)
|
|
|
- item.VoiceSize = fmt.Sprint(fileSize)
|
|
|
- item.ModifyTime = time.Now().Local().Format(utils.FormatDateTime)
|
|
|
-
|
|
|
+ item.VoiceUrl = voiceUrl
|
|
|
+ item.VoicePlaySeconds = voiceSeconds
|
|
|
+ item.VoiceSize = voiceSize
|
|
|
+ item.ModifyTime = nowTime.Format(utils.FormatDateTime)
|
|
|
+ // 图片
|
|
|
imgList := make([]*voice_broadcast_img.YbVoiceBroadcastImg, 0)
|
|
|
imgArr := strings.Split(imgs, ",")
|
|
|
imgLen := len(imgArr)
|
|
|
- nowTime := time.Now().Local()
|
|
|
for i := 0; i < imgLen; i++ {
|
|
|
imgList = append(imgList, &voice_broadcast_img.YbVoiceBroadcastImg{
|
|
|
BroadcastId: item.BroadcastId,
|
|
@@ -305,29 +286,53 @@ func PublishVoiceBroadcast(broadcastId, sectionId, varietyId, authorId, publishT
|
|
|
CreateTime: nowTime,
|
|
|
})
|
|
|
}
|
|
|
- // 新增/更新
|
|
|
- if broadcastId > 0 {
|
|
|
- if e := voice_broadcast.UpdateVoiceBroadcastAndImgs(item, updateCols, imgList); e != nil {
|
|
|
- errMsg = "发布失败"
|
|
|
- err = errors.New("更新语音播报及图片失败, Err: " + "\n" + e.Error())
|
|
|
+ if e := voice_broadcast.UpdateVoiceBroadcastAndImgs(item, updateCols, imgList); e != nil {
|
|
|
+ err = errors.New("更新语音播报及图片失败, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// PublishVoiceBroadcast 发布语音播报
|
|
|
+func PublishVoiceBroadcast(broadcastId, publishType int, imgUrl, prePublishTime string) (err error) {
|
|
|
+ item, e := voice_broadcast.GetBroadcastById(broadcastId)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("语音播报信息有误")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if item.PublishState == 1 {
|
|
|
+ err = errors.New("不可重复发布")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // publishType: 0-仅发布 1-发布并推送 2-定时发布; 发布类型为定时发送时, 分享图时间取预发布时间
|
|
|
+ updateCols := []string{"ImgUrl", "PublishState", "PublishTime", "PrePublishTime", "ModifyTime"}
|
|
|
+ publishTime := time.Now().Local()
|
|
|
+ if publishType == 2 {
|
|
|
+ item.PublishState = 0
|
|
|
+ item.PrePublishTime = prePublishTime
|
|
|
+ publishTime, e = time.ParseInLocation(utils.FormatDateTime, prePublishTime, time.Local)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("预发布时间有误, Err: " + e.Error())
|
|
|
return
|
|
|
}
|
|
|
} else {
|
|
|
- if e := voice_broadcast.CreateVoiceBroadcastAndImgs(item, imgList); e != nil {
|
|
|
- errMsg = "发布失败"
|
|
|
- err = errors.New("新增语音播报及图片失败, Err: " + "\n" + e.Error())
|
|
|
- return
|
|
|
- }
|
|
|
+ // 非定时发布时重置预发布时间
|
|
|
+ item.PublishState = 1
|
|
|
+ item.PublishTime = publishTime.Format(utils.FormatDateTime)
|
|
|
+ item.PrePublishTime = ""
|
|
|
}
|
|
|
-
|
|
|
- // 推送模板及客群消息
|
|
|
- if publishType == 1 {
|
|
|
- go func() {
|
|
|
- _ = wechat.SendVoiceBroadcastWxMsg(item.BroadcastId, item.SectionName, item.BroadcastName)
|
|
|
- }()
|
|
|
- go func() {
|
|
|
- _ = SendVoiceBroadcastToThs(item)
|
|
|
- }()
|
|
|
+ // 分享图
|
|
|
+ shareTime := publishTime.Format(utils.FormatDate)
|
|
|
+ shareImg, e := createVoiceBroadcastShareImg(imgUrl, item.SectionName, shareTime)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("生成分享图失败, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ item.ImgUrl = shareImg
|
|
|
+ // 发布
|
|
|
+ if e = item.Update(updateCols); e != nil {
|
|
|
+ err = errors.New("发布语音播报失败, Err: " + e.Error())
|
|
|
+ return
|
|
|
}
|
|
|
return
|
|
|
}
|
|
@@ -359,62 +364,6 @@ func createVoiceBroadcastShareImg(baseImg, sectionName, createTime string) (shar
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// handleVoiceBroadcastFile 语音播报音频
|
|
|
-func handleVoiceBroadcastFile(voiceFile *multipart.FileHeader) (fileSeconds int, fileSize float64, resourceUrl string, err error) {
|
|
|
- ext := path.Ext(voiceFile.Filename)
|
|
|
- if ext != ".mp3" {
|
|
|
- err = errors.New("暂仅支持mp3格式\n")
|
|
|
- return
|
|
|
- }
|
|
|
- dateDir := time.Now().Format("20060102")
|
|
|
- localDir := global.CONFIG.Serve.StaticDir + "hongze/" + dateDir
|
|
|
- if e := os.MkdirAll(localDir, 0766); e != nil {
|
|
|
- err = errors.New("创建目录失败, Err: " + "\n" + e.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- randStr := utils.GetRandStringNoSpecialChar(28)
|
|
|
- filtName := randStr + ext
|
|
|
- fpath := localDir + "/" + filtName
|
|
|
- defer func() {
|
|
|
- _ = os.Remove(fpath)
|
|
|
- }()
|
|
|
- // 生成文件至指定目录
|
|
|
- if e := SaveUploadedFile(voiceFile, fpath); e != nil {
|
|
|
- err = errors.New("本地文件生成失败, Err: " + "\n" + e.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- // 获取音频文件时长
|
|
|
- fByte, e := ioutil.ReadFile(fpath)
|
|
|
- if e != nil {
|
|
|
- err = errors.New("读取本地文件失败, Err: " + "\n" + e.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- if len(fByte) <= 0 {
|
|
|
- err = errors.New("文件大小有误\n")
|
|
|
- return
|
|
|
- }
|
|
|
- fileSeconds, e = GetMP3PlayDuration(fByte)
|
|
|
- if e != nil {
|
|
|
- err = errors.New("读取文件时长失败, Err:" + "\n" + e.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- // 音频大小MB
|
|
|
- fi, e := os.Stat(fpath)
|
|
|
- if e != nil {
|
|
|
- err = errors.New("读取文件大小失败, Err:" + "\n" + e.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- fileSize = utils.Bit2MB(fi.Size(), 2)
|
|
|
- // 上传文件至阿里云
|
|
|
- ossDir := "yb_wx/voice_broadcast/"
|
|
|
- resourceUrl, e = UploadAliyunToDir(filtName, fpath, ossDir)
|
|
|
- if e != nil {
|
|
|
- err = errors.New("文件上传失败, Err:" + "\n" + e.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- return
|
|
|
-}
|
|
|
-
|
|
|
// GetVoiceBroadcastDetail 获取语音播报详情
|
|
|
func GetVoiceBroadcastDetail(broadcastId, userId int) (detail response.Broadcast, err error) {
|
|
|
item, e := voice_broadcast.GetBroadcastById(broadcastId)
|
|
@@ -450,6 +399,7 @@ func handleBroadcastItem(userId int, item *voice_broadcast.VoiceBroadcast, imgs
|
|
|
resp.VoicePlaySeconds = item.VoicePlaySeconds
|
|
|
resp.VoiceSize = item.VoiceSize
|
|
|
resp.CreateTime = item.CreateTime
|
|
|
+ resp.ModifyTime = item.ModifyTime
|
|
|
resp.PublishState = item.PublishState
|
|
|
resp.PublishTime = item.PublishTime
|
|
|
resp.PrePublishTime = item.PrePublishTime
|