Răsfoiți Sursa

音频文件展示

xingzai 2 ani în urmă
părinte
comite
f11b2cdcd7
4 a modificat fișierele cu 158 adăugiri și 22 ștergeri
  1. 76 12
      controllers/activity.go
  2. 14 5
      models/activity.go
  3. 41 0
      models/activity_voice.go
  4. 27 5
      services/activity.go

+ 76 - 12
controllers/activity.go

@@ -65,6 +65,8 @@ func (this *ActivityCoAntroller) List() {
 // @Param   WhichDay   query   string  false       "哪一天 今天:1、明天:2,多个用 , 隔开"
 // @Param   IsShowJurisdiction   query   int  false       "是否仅展示有权限的,1是,2否 默认为零"
 // @Param   Label   query   string  false       "搜索主题 多个用 , 隔开"
+// @Param   PlayBack   query   int  false       "是否仅展示回放 1:是、0:否 默认0"
+// @Param   KeyWord   query   string  false       "搜索关键词 多个用 , 隔开"
 // @Success 200 {object} models.GetCygxActivityListRep
 // @router /list [get]
 func (this *ActivityCoAntroller) ActivityList() {
@@ -90,6 +92,7 @@ func (this *ActivityCoAntroller) ActivityList() {
 	keyWordSearch := this.GetString("KeyWord")
 	activeState := this.GetString("ActiveState")
 	label := this.GetString("Label")
+	playBack, _ := this.GetInt("PlayBack")
 	//入参为 undefined 时的处理
 	if chartPermissionIds == "undefined" {
 		chartPermissionIds = ""
@@ -273,7 +276,7 @@ func (this *ActivityCoAntroller) ActivityList() {
 	}
 
 	condition += ` AND art.is_limit_people = 1 ` + permissionSqlStr + sqlExport + conditionOr
-	total, err := models.GetActivityCount(condition, pars)
+	total, err := models.GetActivityCount(condition, playBack, pars)
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + err.Error()
@@ -284,7 +287,7 @@ func (this *ActivityCoAntroller) ActivityList() {
 	} else {
 		condition += ` ORDER BY art.active_state ASC, art.activity_time ASC  `
 	}
-	list, errList := models.GetActivityListAll(condition, pars, uid, startSize, pageSize)
+	list, errList := models.GetActivityListAll(condition, pars, uid, startSize, pageSize, playBack)
 	if errList != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + errList.Error()
@@ -313,6 +316,7 @@ func (this *ActivityCoAntroller) ActivityList() {
 	var chartName string
 	var imgUrl string
 	var imgUrlChart string
+	var mapActivityId []int
 	for _, v := range addressList {
 		vslice := strings.Split(v, "_")
 		cityName = vslice[0]
@@ -352,6 +356,7 @@ func (this *ActivityCoAntroller) ActivityList() {
 		}
 		expertTxt, _ := services.GetReportContentTextSub(v.Expert)
 		list[k].Expert = expertTxt
+		mapActivityId = append(mapActivityId, v.ActivityId)
 	}
 	if keyWordSearch != "" {
 		keyWordItem := new(models.CygxUserSearchKeyWord)
@@ -372,8 +377,21 @@ func (this *ActivityCoAntroller) ActivityList() {
 		}
 	}
 	resp := new(models.GetCygxActivityListRep)
+
+	//处理音频回放
+	mapActivityVoice, err := services.GetActivityVoiceResp(mapActivityId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "GetActivityVoiceResp,Err:" + err.Error()
+	}
+	fmt.Println(mapActivityId)
+	fmt.Println(mapActivityVoice)
 	//处理列表的标签是否展示逻辑
-	for _, v := range list {
+	for k, v := range list {
+		if mapActivityVoice[v.ActivityId] != nil {
+			list[k].AudioLink = true
+			list[k].VoiceList = mapActivityVoice[v.ActivityId]
+		}
 		resp.List = append(resp.List, services.ActivityButtonShow(v))
 	}
 	page := paging.GetPaging(currentIndex, pageSize, total)
@@ -514,6 +532,7 @@ func (this *ActivityCoAntroller) ScheduleList() {
 	var chartName string
 	var imgUrl string
 	var imgUrlChart string
+	var mapActivityId []int
 	for _, v := range addressList {
 		vslice := strings.Split(v, "_")
 		cityName = vslice[0]
@@ -560,7 +579,9 @@ func (this *ActivityCoAntroller) ScheduleList() {
 		if v.ActivityTypeId == utils.C_CLASS_ACTIVITY_TYPE_ID {
 			list[k].IsCClassMeeting = true
 		}
+		mapActivityId = append(mapActivityId, v.ActivityId)
 	}
+
 	//添加我的日程访问记录
 	item := new(models.CygxPageHistoryRecord)
 	item.UserId = user.UserId
@@ -572,10 +593,23 @@ func (this *ActivityCoAntroller) ScheduleList() {
 	item.PageType = "MySchedule"
 	go models.AddCygxPageHistoryRecord(item)
 	resp := new(models.GetCygxActivityListRep)
-	//处理列表的标签是否展示逻辑
-	for _, v := range list {
+
+	//处理音频回放
+	mapActivityVoice, err := services.GetActivityVoiceResp(mapActivityId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "GetActivityVoiceResp,Err:" + err.Error()
+		return
+	}
+	for k, v := range list {
+		if mapActivityVoice[v.ActivityId] != nil {
+			list[k].AudioLink = true
+			list[k].VoiceList = mapActivityVoice[v.ActivityId]
+		}
+		//处理列表的标签是否展示逻辑
 		resp.List = append(resp.List, services.ActivityButtonShow(v))
 	}
+
 	resp.Paging = page
 	br.Ret = 200
 	br.Success = true
@@ -922,6 +956,20 @@ func (this *ActivityCoAntroller) Detail() {
 			ydTgc, _ := services.GetYiDongCreateUserInfo(user)
 			activityInfo.YidongActivityUrl += "?source=11&fromHz=true&tgc=" + ydTgc
 		}
+		//处理音频回放
+		var mapActivityId []int
+		mapActivityId = append(mapActivityId, activityId)
+		mapActivityVoice, err := services.GetActivityVoiceResp(mapActivityId)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "GetActivityVoiceResp,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+			return
+		}
+		if mapActivityVoice[activityId] != nil {
+			activityInfo.AudioLink = true
+			activityInfo.VoiceList = mapActivityVoice[activityId]
+		}
+
 		//处理按钮是否展示问题
 		resp.Detail = services.ActivityButtonShow(activityInfo)
 	}
@@ -2674,6 +2722,8 @@ func (this *ActivityCoAntroller) LabelMoreList() {
 // @Param   ActiveState   query   string  false       "活动进行状态 未开始:1、进行中2、已结束3"
 // @Param   ActivityTypeId   query   string  false     "活动类型id 多个用 , 隔开"
 // @Param   Source   query   int  false     "来源 0手机 ,1Pc 默认0"
+// @Param   PlayBack   query   int  false       "是否仅展示回放 1:是、0:否 默认0"
+// @Param   KeyWord   query   string  false       "搜索关键词 多个用 , 隔开"
 // @Success 200 {object} models.GetCygxActivityListRep
 // @router /listNew [get]
 func (this *ActivityCoAntroller) ActivityListNew() {
@@ -2697,6 +2747,8 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 	whichDay := this.GetString("WhichDay")
 	activeState := this.GetString("ActiveState")
 	activityTypeId := this.GetString("ActivityTypeId")
+	keyWord := this.GetString("KeyWord")
+	playBack, _ := this.GetInt("PlayBack")
 	if label == "undefined" {
 		label = ""
 	}
@@ -2724,7 +2776,7 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 	var condition string
 	var pars []interface{}
 	//活动可见限制
-	conditionActivity, err := services.GetActivityonditionList(user, activityTypeId, chartPermissionIds, whichDay, activeState, label, 0, source)
+	conditionActivity, err := services.GetActivityonditionList(user, activityTypeId, chartPermissionIds, whichDay, activeState, label, 0, source, keyWord)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
@@ -2734,7 +2786,7 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 		condition += ` AND art.yidong_activity_id = '' `
 	}
 	condition += ` AND art.is_limit_people = 1 AND art.publish_status = 1 ` + conditionActivity
-	total, err := models.GetActivityCount(condition, pars)
+	total, err := models.GetActivityCount(condition, playBack, pars)
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + err.Error()
@@ -2747,7 +2799,7 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 	} else {
 		condition += ` ORDER BY art.activity_time ASC ,  art.active_state ASC   `
 	}
-	list, errList := models.GetActivityListAll(condition, pars, uid, startSize, pageSize)
+	list, errList := models.GetActivityListAll(condition, pars, uid, startSize, pageSize, playBack)
 	if errList != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + errList.Error()
@@ -2776,6 +2828,7 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 	var chartName string
 	var imgUrl string
 	var imgUrlChart string
+	var mapActivityId []int
 	for _, v := range addressList {
 		vslice := strings.Split(v, "_")
 		cityName = vslice[0]
@@ -2822,6 +2875,7 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 		if v.ActivityTypeId == utils.C_CLASS_ACTIVITY_TYPE_ID {
 			list[k].IsCClassMeeting = true
 		}
+		mapActivityId = append(mapActivityId, v.ActivityId)
 	}
 	page := paging.GetPaging(currentIndex, pageSize, total)
 	resp := new(models.GetCygxActivityListRep)
@@ -2839,8 +2893,18 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 			resp.Label = detail.ActivityTypeName
 		}
 	}
-	//处理列表的标签是否展示逻辑
-	for _, v := range list {
+	//处理音频回放
+	mapActivityVoice, err := services.GetActivityVoiceResp(mapActivityId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "GetActivityVoiceResp,Err:" + err.Error()
+		return
+	}
+	for k, v := range list {
+		if mapActivityVoice[v.ActivityId] != nil {
+			list[k].AudioLink = true
+			list[k].VoiceList = mapActivityVoice[v.ActivityId]
+		}
 		resp.List = append(resp.List, services.ActivityButtonShow(v))
 	}
 	resp.Paging = page
@@ -3321,7 +3385,7 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 			continue
 		}
 		var condition string
-		conditionActivity, err := services.GetActivityonditionList(user, strconv.Itoa(v.ActivityTypeId), chartPermissionIds, whichDay, activeState, "", isPower, 0)
+		conditionActivity, err := services.GetActivityonditionList(user, strconv.Itoa(v.ActivityTypeId), chartPermissionIds, whichDay, activeState, "", isPower, 0, "")
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
@@ -4304,7 +4368,7 @@ func (this *ActivityCoAntroller) LabelTypeListV6Pc() {
 		}
 		var condition string
 
-		conditionActivity, err := services.GetActivityonditionList(user, strconv.Itoa(v.ActivityTypeId), chartPermissionIds, whichDay, activeState, "", isPower, 1)
+		conditionActivity, err := services.GetActivityonditionList(user, strconv.Itoa(v.ActivityTypeId), chartPermissionIds, whichDay, activeState, "", isPower, 1, "")
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()

+ 14 - 5
models/activity.go

@@ -182,6 +182,8 @@ type ActivityDetail struct {
 	IsCanAppointmentMinutes int                        `description:"是否可预约纪要 1是 ,0 否 默认0 "`
 	YidongActivityId        string                     `description:"易董活动ID"`
 	YidongActivityUrl       string                     `description:"易董活动跳转地址"`
+	AudioLink               bool                       `description:"是否展示回放按钮"`
+	VoiceList               *CygxActivityVoiceReq      `description:"音频数据"`
 }
 
 type CygxActivityResp struct {
@@ -266,7 +268,11 @@ type GetCygxActivityListRep struct {
 }
 
 //列表
-func GetActivityListAll(condition string, pars []interface{}, uid, startSize, pageSize int) (items []*ActivityDetail, err error) {
+func GetActivityListAll(condition string, pars []interface{}, uid, startSize, pageSize, playBack int) (items []*ActivityDetail, err error) {
+	var sqlJiontable string
+	if playBack == 1 {
+		sqlJiontable = ` INNER JOIN cygx_activity_voice AS ac ON ac.activity_id = art.activity_id `
+	}
 	o := orm.NewOrm()
 	sql := `SELECT art.* ,t.activity_type,t.img_url_text,c.image_url as  img_url,
 		( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s WHERE s.activity_id = art.activity_id AND s.user_id = ?   AND s.is_cancel = 0  AND s.do_fail_type = 0) AS is_signup,
@@ -275,8 +281,7 @@ func GetActivityListAll(condition string, pars []interface{}, uid, startSize, pa
 		( SELECT COUNT( 1 ) FROM cygx_activity_appointment AS ap WHERE ap.activity_id = art.activity_id AND ap.user_id = ? ) AS is_appointment
 		FROM cygx_activity as art
 		INNER JOIN cygx_activity_type  as t ON t.activity_type_id = art.activity_type_id
-		INNER JOIN  chart_permission  AS c ON c.chart_permission_id = art.chart_permission_id 
-		WHERE 1= 1 `
+		INNER JOIN  chart_permission  AS c ON c.chart_permission_id = art.chart_permission_id ` + sqlJiontable + ` WHERE 1= 1 `
 	if condition != "" {
 		sql += condition
 	}
@@ -299,8 +304,12 @@ func GetActivityListByDateTime(startDate, endDate, activityIds, activityIdsLongT
 }
 
 //获取数量
-func GetActivityCount(condition string, pars []interface{}) (count int, err error) {
-	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity as art WHERE 1= 1  `
+func GetActivityCount(condition string, playBack int, pars []interface{}) (count int, err error) {
+	var sqlJiontable string
+	if playBack == 1 {
+		sqlJiontable = ` INNER JOIN cygx_activity_voice AS ac ON ac.activity_id = art.activity_id `
+	}
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity as art ` + sqlJiontable + ` WHERE 1= 1  `
 	if condition != "" {
 		sqlCount += condition
 	}

+ 41 - 0
models/activity_voice.go

@@ -0,0 +1,41 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_cygx/utils"
+	"time"
+)
+
+// ActivityVoice 活动语音表结构体
+type CygxActivityVoice struct {
+	ActivityVoiceId  int       `orm:"column(activity_voice_id);pk" description:"活动音频ID"`
+	ActivityId       int       ` description:"活动ID"`
+	VoiceUrl         string    `description:"音频地址"`
+	VoiceName        string    `description:"音频名称"`
+	VoicePlaySeconds string    `description:"音频时长"`
+	CreateTime       time.Time `description:"创建时间"`
+}
+
+// ActivityVoiceReq 音频数据
+type CygxActivityVoiceReq struct {
+	ActivityId  int    ` description:"活动ID"`
+	Url         string `description:"音频资源url地址"`
+	Name        string `description:"音频名称"`
+	PlaySeconds string `description:"音频时长"`
+}
+
+// GetCygxActivityVoiceReqList 获取活动ID的音频
+func GetCygxActivityVoiceReqList(activityIds []int) (items []*CygxActivityVoiceReq, err error) {
+	lenactivityIds := len(activityIds)
+	if lenactivityIds == 0 {
+		return
+	}
+	sql := `SELECT 
+			activity_id ,
+			voice_url AS url,
+			voice_name AS name,
+			voice_play_seconds AS play_seconds  FROM cygx_activity_voice  WHERE activity_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `)  `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, activityIds).QueryRows(&items)
+	return
+}

+ 27 - 5
services/activity.go

@@ -427,7 +427,9 @@ func GetHavePower(activityInfo *models.ActivityDetail, permissionStr, companyDet
 // @Param   WhichDay   query   string  false       "哪一天 今天:1、明天:2,多个用 , 隔开"
 // @Param   IsPower   query   int  false       "是否选择有权限行业 ,1是 0 否 默认0"
 // @Param   Label   query   string  false       "搜索主题 多个用 , 隔开"
-func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermissionIds, whichDay, activeState, label string, isPower, source int) (conditionActivity string, err error) {
+// @Param   PlayBack   query   int  false       "是否仅展示回放 1:是、0:否 默认0"
+// @Param   KeyWord   query   string  false       "搜索关键词 多个用 , 隔开"
+func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermissionIds, whichDay, activeState, label string, isPower, source int, KeyWord string) (conditionActivity string, err error) {
 	adminIds, err := models.GetSelleridWhichGroup(user.CompanyId, 2)
 	if err != nil {
 		return
@@ -471,10 +473,12 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 	}
 	sqlExport += `) `
 	// 如果是C类电话会就不展示内容,且合并到分析师电话会
-	if activityTypeId == strconv.Itoa(utils.ANALYST_TELL_ACTIVITY_TYPE_ID) {
-		condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id IN (` + activityTypeId + "," + strconv.Itoa(utils.C_CLASS_ACTIVITY_TYPE_ID) + `)`
-	} else {
-		condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id = ` + activityTypeId
+	if activityTypeId != "" {
+		if activityTypeId == strconv.Itoa(utils.ANALYST_TELL_ACTIVITY_TYPE_ID) {
+			condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id IN (` + activityTypeId + "," + strconv.Itoa(utils.C_CLASS_ACTIVITY_TYPE_ID) + `)`
+		} else {
+			condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id = ` + activityTypeId
+		}
 	}
 	//活动仅决策人可见
 	if isMaker == 0 {
@@ -1377,3 +1381,21 @@ func ActivityButtonShow(item *models.ActivityDetail) (articleDetail *models.Acti
 
 	return
 }
+
+//GetActivityVoiceResp 处理活动音频回放
+func GetActivityVoiceResp(mapActivityId []int) (mapItem map[int]*models.CygxActivityVoiceReq, err error) {
+	activityVoiceList, err := models.GetCygxActivityVoiceReqList(mapActivityId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+
+	mapActivityVoice := make(map[int]*models.CygxActivityVoiceReq)
+	if len(activityVoiceList) > 0 {
+		for _, v := range activityVoiceList {
+			v.PlaySeconds = utils.Mp3Time(v.PlaySeconds)
+			mapActivityVoice[v.ActivityId] = v
+		}
+	}
+	mapItem = mapActivityVoice
+	return
+}