123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431 |
- package services
- import (
- "encoding/json"
- "errors"
- "hongze/hongze_cygx/models"
- "hongze/hongze_cygx/utils"
- "math"
- "strconv"
- "strings"
- "sync"
- "time"
- )
- // GetMicroRoadShowPageList 获取微路演列表
- func GetMicroRoadShowPageList(pageSize, currentIndex, audioId, videoId, activityVideoId int, keywords string) (respList []*models.MicroRoadShowPageList, total int, err error) {
- var e error
- // 根据每页数据量获取音视频配比
- 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 || activityVideoId > 0 {
- audioRatio = 1
- videoRatio = 1
- }
- wg := sync.WaitGroup{}
- wg.Add(2)
- // 分页查询音频
- go func() {
- defer wg.Done()
- // 如果筛选条件为指定视频ID则不做音频查询
- if videoId > 0 || activityVideoId > 0 {
- return
- }
- var audioCond string
- var audioPars []interface{}
- // 活动已发布且已结束
- audioCond += ` AND b.publish_status = 1 AND b.active_state = 3`
- //活动音频,设置有效时间为30天,失效后该活动就不再支持音频回放。有效期起始时间为活动的开始时间
- endTime := time.Now().AddDate(0, 0, -30).Format("2006-01-02 15:04:05")
- audioCond += ` AND b.activity_time > ? `
- audioPars = append(audioPars, endTime)
- 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()
- // 如果筛选条件为指定音频ID则不做视频查询
- if audioId > 0 {
- return
- }
- var videoCond string
- var videoCondAct string
- var videoPars []interface{}
- var videoParsAct []interface{}
- if keywords != "" {
- videoCond += ` AND video_name LIKE ?`
- videoPars = append(videoPars, keywords)
- videoCondAct += ` AND video_name LIKE ?`
- videoParsAct = append(videoParsAct, keywords)
- }
- if videoId > 0 {
- videoCond += ` AND video_id = ?`
- videoPars = append(videoPars, videoId)
- }
- if activityVideoId > 0 {
- videoCondAct += ` AND video_id = ?`
- videoParsAct = append(videoParsAct, activityVideoId)
- }
- //如果传了路演的或者活动的视频ID只查询一个
- if videoId > 0 {
- videoCondAct += ` AND video_id = 0 `
- }
- if activityVideoId > 0 {
- videoCond += ` AND video_id = 0 `
- }
- endTime := time.Now().AddDate(0, 0, -30).Format("2006-01-02 15:04:05")
- videoCondAct += ` AND art.activity_time > ? `
- videoParsAct = append(videoParsAct, endTime)
- videoCond += ` AND publish_status = 1`
- videoStartSize := 0
- if currentIndex > 1 {
- videoStartSize = (currentIndex - 1) * videoPageNum
- }
- videoTotal, videoList, e = models.GetMicroRoadShowVideoPageList(videoStartSize, videoPageNum, videoCond, videoPars, videoCondAct, videoParsAct)
- }()
- wg.Wait()
- if e != nil {
- err = errors.New("获取微路演音视频列表失败, Err: " + e.Error())
- return
- }
- // 按比例组合列表
- audioNum := 0
- videoNum := 0
- audioLen := len(audioList)
- videoLen := len(videoList)
- for i := 0; i < sliceNum; i++ {
- // 音频-每次取对应比例的数据直至取完
- for a := 0; a < audioRatio; a++ {
- if audioNum >= audioLen {
- break
- }
- respList = append(respList, audioList[audioNum])
- audioNum += 1
- }
- // 视频
- for b := 0; b < videoRatio; b++ {
- if videoNum >= videoLen {
- break
- }
- respList = append(respList, videoList[videoNum])
- videoNum += 1
- }
- }
- total = audioTotal + videoTotal
- return
- }
- // 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
- }
- // 每比率对应数量(向上取整)
- sliceNum = int(math.Ceil(float64(pageSize) / float64(totalRatio)))
- audioPageNum = audioRatio * sliceNum
- videoPageNum = videoRatio * sliceNum
- return
- }
- // GetMicroRoadShowDefaultImgConfig 获取微路演默认图/分享图配置
- func GetMicroRoadShowDefaultImgConfig() (audioMap, videoMap, audioShareMap, videoShareMap map[int]string, err error) {
- audioMap = make(map[int]string, 0)
- videoMap = make(map[int]string, 0)
- audioShareMap = make(map[int]string, 0)
- videoShareMap = make(map[int]string, 0)
- key := models.MicroRoadshowDefaultImgKey
- conf, e := models.GetConfigByCode(key)
- if e != nil {
- err = errors.New("获取微路演默认图配置失败, Err: " + e.Error())
- return
- }
- if conf.ConfigValue == "" {
- err = errors.New("获取微路演默认图配置有误")
- return
- }
- list := new(models.MicroRoadShowDefaultImgList)
- if e = json.Unmarshal([]byte(conf.ConfigValue), &list); e != nil {
- err = errors.New("微路演默认图配置配置值解析失败, Err: " + e.Error())
- return
- }
- audioList := list.Audio
- for i := range audioList {
- audioMap[audioList[i].ChartPermissionId] = audioList[i].ImgUrl
- audioShareMap[audioList[i].ChartPermissionId] = audioList[i].ShareImg
- }
- videoList := list.Video
- for i := range videoList {
- videoMap[videoList[i].ChartPermissionId] = videoList[i].ImgUrl
- videoShareMap[videoList[i].ChartPermissionId] = videoList[i].ShareImg
- }
- return
- }
- // GetHomeNewestList 获取首页最新列表
- func GetHomeNewestList(userId, companyId, startSize, pageSize int, condition string, pars []interface{}) (resp []*models.HomeArticle, total int, err error) {
- resp = make([]*models.HomeArticle, 0)
- unionList, e := models.GetHomeNewestListUnionList(condition, pars, startSize, pageSize)
- if e != nil {
- err = errors.New("获取首页最新列表失败")
- return
- }
- unionTotal, e := models.GetHomeNewestListUnionCount(condition, pars)
- if e != nil {
- err = errors.New("获取首页最新列表总数失败")
- return
- }
- total = unionTotal
- // 用户权限
- authInfo, permissionArr, e := GetUserRaiPermissionInfo(userId, companyId)
- if e != nil {
- err = errors.New("获取用户权限失败, Err: " + e.Error())
- return
- }
- // 获取默认图配置
- audioMap, videoMap, audioShareMap, videoShareMap, e := GetMicroRoadShowDefaultImgConfig()
- if e != nil {
- err = errors.New("获取微路演默认图配置失败, Err: " + e.Error())
- return
- }
- // 此处没有直接使用HomeArticle结构体而是多加了一层, 纯粹是为了方便前端区分纪要和微路演音频=_=!
- for _, v := range unionList {
- item := new(models.HomeArticle)
- item.HomeType = v.HomeType
- // 纪要
- if item.HomeType == 0 {
- item.ArticleId = v.ArticleId
- item.Title = v.Title
- item.TitleEn = v.TitleEn
- item.UpdateFrequency = v.UpdateFrequency
- item.CreateDate = v.CreateDate
- item.PublishDate = v.PublishDate
- item.Body = v.Body
- item.BodyHtml = v.BodyHtml
- item.Abstract = v.Abstract
- item.CategoryName = v.CategoryName
- item.SubCategoryName = v.SubCategoryName
- item.ExpertBackground = v.ExpertBackground
- item.IsResearch = v.IsResearch
- item.Pv = v.Pv
- item.ImgUrlPc = v.ImgUrlPc
- item.CategoryId = v.CategoryId
- item.HttpUrl = v.HttpUrl
- item.IsNeedJump = v.IsNeedJump
- item.Source = v.Source
- item.Annotation = v.Annotation
- }
- // 音频
- if v.HomeType == 1 {
- ad := new(models.MicroAudioUnionList)
- ad.Id = v.Id
- ad.AudioTitle = v.AudioTitle
- ad.AudioResourceUrl = v.AudioResourceUrl
- ad.AudioType = v.AudioType
- ad.AudioPublishTime = utils.StrTimeToTime(v.AudioPublishTime).Format(utils.FormatDate)
- ad.AudioImgUrl = v.AudioImgUrl
- ad.AudioChartPermissionId = v.AudioChartPermissionId
- ad.AudioChartPermissionName = v.AudioChartPermissionName
- ad.AudioPlaySeconds = v.AudioPlaySeconds
- ad.AudioPlaySeconds = v.AudioPlaySeconds
- ad.AudioActivityId = v.AudioActivityId
- item.MicroAudio = ad
- // 默认图
- if ad.AudioImgUrl == "" {
- if ad.AudioType == 1 {
- ad.AudioImgUrl = audioMap[ad.AudioChartPermissionId]
- } else {
- ad.AudioImgUrl = videoMap[ad.AudioChartPermissionId]
- }
- }
- // 分享图
- if ad.AudioType == 1 {
- ad.AudioShareImg = audioShareMap[ad.AudioChartPermissionId]
- } else {
- ad.AudioShareImg = videoShareMap[ad.AudioChartPermissionId]
- }
- // 权限
- au := new(models.UserPermissionAuthInfo)
- au.SellerName = authInfo.SellerName
- au.SellerMobile = authInfo.SellerMobile
- au.HasPermission = authInfo.HasPermission
- au.OperationMode = authInfo.OperationMode
- if au.HasPermission == 1 {
- // 非宏观权限进一步判断是否有权限
- if ad.AudioChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, ad.AudioChartPermissionName) {
- au.HasPermission = 2
- }
- }
- // 无权限的弹框提示
- if au.HasPermission != 1 {
- if au.OperationMode == UserPermissionOperationModeCall {
- if ad.AudioType == 1 {
- au.PopupMsg = UserPermissionPopupMsgCallActivity
- } else {
- au.PopupMsg = UserPermissionPopupMsgCallMicroVideo
- }
- } else {
- if ad.AudioType == 1 {
- au.PopupMsg = UserPermissionPopupMsgApplyActivity
- } else {
- au.PopupMsg = UserPermissionPopupMsgApplyMicroVideo
- }
- }
- }
- ad.AuthInfo = au
- }
- resp = append(resp, item)
- }
- return
- }
- // GetMicroRoadShowPageList 获取微路演列表添加活动视频 更新与8.1版本
- func GetMicroRoadShowPageListV8(pageSize, currentIndex, audioId, videoId, activityVideoId int, keywords string) (respList []*models.MicroRoadShowPageList, total int, err error) {
- var e error
- // 根据每页数据量获取音视频配比
- startSize := utils.StartIndex(currentIndex, pageSize)
- videoList := make([]*models.MicroRoadShowPageList, 0)
- if keywords != "" {
- keywords = "%" + keywords + "%"
- }
- //音频的查询
- var audioCond string
- var audioPars []interface{}
- // 如果筛选条件为指定视频ID则不做音频查询
- if videoId > 0 || activityVideoId > 0 {
- audioCond = ""
- } else {
- // 活动已发布且已结束
- audioCond += ` AND b.publish_status = 1 AND b.active_state = 3`
- //活动音频,设置有效时间为30天,失效后该活动就不再支持音频回放。有效期起始时间为活动的开始时间
- endTime := time.Now().AddDate(0, 0, -30).Format("2006-01-02 15:04:05")
- audioCond += ` AND b.activity_time > ? `
- audioPars = append(audioPars, endTime)
- 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)
- }
- }
- //视频的处理
- var videoCond string
- var videoCondAct string
- var videoPars []interface{}
- var videoParsAct []interface{}
- if audioId > 0 {
- videoCond = ""
- } else {
- if keywords != "" {
- videoCond += ` AND video_name LIKE ?`
- videoPars = append(videoPars, keywords)
- videoCondAct += ` AND video_name LIKE ?`
- videoParsAct = append(videoParsAct, keywords)
- }
- if videoId > 0 {
- videoCond += ` AND video_id = ?`
- videoPars = append(videoPars, videoId)
- }
- if activityVideoId > 0 {
- videoCondAct += ` AND video_id = ?`
- videoParsAct = append(videoParsAct, activityVideoId)
- }
- //如果传了路演的或者活动的视频ID只查询一个
- if videoId > 0 {
- videoCondAct += ` AND video_id = 0 `
- }
- if activityVideoId > 0 {
- videoCond += ` AND video_id = 0 `
- }
- if videoId == 0 {
- endTime := time.Now().AddDate(0, 0, -30).Format("2006-01-02 15:04:05")
- videoCondAct += ` AND art.activity_time > ? `
- videoParsAct = append(videoParsAct, endTime)
- }
- videoCond += ` AND publish_status = 1`
- }
- total, videoList, e = models.GetMicroRoadShowVideoPageListV8(startSize, pageSize, videoCond, videoPars, videoCondAct, videoParsAct, audioCond, audioPars, audioId, videoId, activityVideoId)
- if e != nil {
- err = errors.New("获取微路演音视频列表失败, Err: " + e.Error())
- return
- }
- respList = videoList
- return
- }
|