|
@@ -2,26 +2,36 @@ package services
|
|
|
|
|
|
import (
|
|
|
"errors"
|
|
|
+ "hongze/hongze_cygx/models"
|
|
|
+ "hongze/hongze_cygx/utils"
|
|
|
+ "math"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
"sync"
|
|
|
)
|
|
|
|
|
|
-type MicroRoadShowPageList struct {
|
|
|
- Title string `description:"标题"`
|
|
|
- ResourceUrl string `description:"链接"`
|
|
|
- Type int `description:"类型: 1-音频; 2-视频"`
|
|
|
- PublishTime string `description:"发布时间"`
|
|
|
- BackgroundImg string `description:"背景图"`
|
|
|
- PermissionName string `description:"行业名称"`
|
|
|
- PlaySeconds string `description:"音视频时长"`
|
|
|
-}
|
|
|
-
|
|
|
// GetMicroRoadShowPageList 获取微路演列表
|
|
|
-func GetMicroRoadShowPageList(keywords string) (err error) {
|
|
|
- // 根据
|
|
|
-
|
|
|
+func GetMicroRoadShowPageList(pageSize, currentIndex, audioId, videoId int, keywords string) (respList []*models.MicroRoadShowPageList, total int, err error) {
|
|
|
var e error
|
|
|
- //audioList := make([]*MicroRoadShowPageList, 0)
|
|
|
- //videoList := make([]*MicroRoadShowPageList, 0)
|
|
|
+ // 根据每页数据量获取音视频配比
|
|
|
+ audioRatio, videoRatio, audioPageNum, videoPageNum, sliceNum, e := getMicroRoadShowDataRatio(pageSize)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("获取微路演列表数据音视频配比失败, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ audioTotal := 0
|
|
|
+ videoTotal := 0
|
|
|
+ audioList := make([]*models.MicroRoadShowPageList, 0)
|
|
|
+ videoList := make([]*models.MicroRoadShowPageList, 0)
|
|
|
+ if keywords != "" {
|
|
|
+ keywords = "%" + keywords + "%"
|
|
|
+ }
|
|
|
+ // 查询指定音频/视频时, 调整比例为1方便后面组合数据
|
|
|
+ if audioId > 0 || videoId > 0 {
|
|
|
+ audioRatio = 1
|
|
|
+ videoRatio = 1
|
|
|
+ }
|
|
|
|
|
|
wg := sync.WaitGroup{}
|
|
|
|
|
@@ -30,15 +40,49 @@ func GetMicroRoadShowPageList(keywords string) (err error) {
|
|
|
// 分页查询音频
|
|
|
go func() {
|
|
|
defer wg.Done()
|
|
|
- // TODO: 查询音频
|
|
|
-
|
|
|
+ // 如果筛选条件为指定视频ID则不做音频查询
|
|
|
+ if videoId > 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var audioCond string
|
|
|
+ var audioPars []interface{}
|
|
|
+ if keywords != "" {
|
|
|
+ audioCond += ` AND a.voice_name LIKE ? OR b.label LIKE ?`
|
|
|
+ audioPars = append(audioPars, keywords, keywords)
|
|
|
+ }
|
|
|
+ if audioId > 0 {
|
|
|
+ audioCond += ` AND a.activity_voice_id = ?`
|
|
|
+ audioPars = append(audioPars, audioId)
|
|
|
+ }
|
|
|
+ audioStartSize := 0
|
|
|
+ if currentIndex > 1 {
|
|
|
+ audioStartSize = (currentIndex - 1) * audioPageNum
|
|
|
+ }
|
|
|
+ audioTotal, audioList, e = models.GetMicroRoadShowAudioPageList(audioStartSize, audioPageNum, audioCond, audioPars)
|
|
|
}()
|
|
|
|
|
|
// 分页查询视频
|
|
|
go func() {
|
|
|
defer wg.Done()
|
|
|
- // TODO: 查询视频
|
|
|
-
|
|
|
+ // 如果筛选条件为指定音频ID则不做视频查询
|
|
|
+ if audioId > 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var videoCond string
|
|
|
+ var videoPars []interface{}
|
|
|
+ if keywords != "" {
|
|
|
+ videoCond += ` AND video_name LIKE ?`
|
|
|
+ videoPars = append(videoPars, keywords)
|
|
|
+ }
|
|
|
+ if videoId > 0 {
|
|
|
+ videoCond += ` AND video_id = ?`
|
|
|
+ videoPars = append(videoPars, videoId)
|
|
|
+ }
|
|
|
+ videoStartSize := 0
|
|
|
+ if currentIndex > 1 {
|
|
|
+ videoStartSize = (currentIndex - 1) * videoPageNum
|
|
|
+ }
|
|
|
+ videoTotal, videoList, e = models.GetMicroRoadShowVideoPageList(videoStartSize, audioPageNum, videoCond, videoPars)
|
|
|
}()
|
|
|
|
|
|
wg.Wait()
|
|
@@ -49,14 +93,72 @@ func GetMicroRoadShowPageList(keywords string) (err error) {
|
|
|
}
|
|
|
|
|
|
// 按比例组合列表
|
|
|
-
|
|
|
+ audioLen := len(audioList)
|
|
|
+ videoLen := len(videoList)
|
|
|
+ for i := 0; i < sliceNum; i++ {
|
|
|
+ // 音频
|
|
|
+ a := i * audioRatio // 0 4 8 12
|
|
|
+ oa := a + audioRatio // 4 8 12 16
|
|
|
+ if oa <= audioLen {
|
|
|
+ for k1 := a; k1 < oa; k1++ {
|
|
|
+ respList = append(respList, audioList[k1])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 视频
|
|
|
+ b := i * videoRatio // 0 1 2 3
|
|
|
+ ob := b + videoRatio // 1 2 3 4
|
|
|
+ if ob <= videoLen {
|
|
|
+ for k2 := b; k2 < ob; k2++ {
|
|
|
+ respList = append(respList, videoList[k2])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ total = audioTotal + videoTotal
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-func GetMicroRoadShowAudioPageList() {
|
|
|
+// getMicroRoadShowDataRatio 获取微路演列表数据音视频配比
|
|
|
+func getMicroRoadShowDataRatio(pageSize int) (audioRatio, videoRatio, audioPageNum, videoPageNum, sliceNum int, err error) {
|
|
|
+ if pageSize <= 0 {
|
|
|
+ pageSize = utils.PageSize20
|
|
|
+ }
|
|
|
+ key := models.MicroRoadShowListDataRatioConfigKey
|
|
|
+ config, e := models.GetConfigByCode(key)
|
|
|
+ if e != nil && e.Error() != utils.ErrNoRow() {
|
|
|
+ err = errors.New("获取微路演列表数据量配置失败, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
-}
|
|
|
+ // 默认音频视频展示比例为4:1
|
|
|
+ ratio := "4:1"
|
|
|
+ if config != nil {
|
|
|
+ ratio = config.ConfigValue
|
|
|
+ }
|
|
|
+ ratioArr := strings.Split(ratio, ":")
|
|
|
+ if len(ratioArr) != 2 {
|
|
|
+ err = errors.New("微路演列表数据量配比有误")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ audioRatio, e = strconv.Atoi(ratioArr[0])
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("微路演列表数据量配比有误")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ videoRatio, e = strconv.Atoi(ratioArr[1])
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("微路演列表数据量配比有误")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ totalRatio := audioRatio + videoRatio
|
|
|
+ if totalRatio == 0 {
|
|
|
+ err = errors.New("微路演列表数据量配比有误")
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
-func GetMicroRoadShowVideoPageList() {
|
|
|
+ // 每比率对应数量(向上取整)
|
|
|
+ sliceNum = int(math.Ceil(float64(pageSize) / float64(totalRatio)))
|
|
|
+ audioPageNum = audioRatio * sliceNum
|
|
|
+ videoPageNum = videoRatio * sliceNum
|
|
|
|
|
|
+ return
|
|
|
}
|