Browse Source

Merge branch 'mfyx_3.6' of http://8.136.199.33:3000/cxzhang/hongze_mfyx

xingzai 6 tháng trước cách đây
mục cha
commit
07d2cc9877

+ 119 - 34
controllers/activity.go

@@ -446,7 +446,8 @@ func (this *ActivityCoAntroller) Detail() {
 		}
 	}
 	activityInfo.Listndustrial = industrialList
-
+	var mapActivityId []int
+	mapActivityId = append(mapActivityId, activityId)
 	if havePower {
 		//是否展示限免标签
 		if services.GetShowSustainable() && strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
@@ -484,33 +485,7 @@ func (this *ActivityCoAntroller) Detail() {
 			//activityInfo.YidongActivityUrl = yidongLongLink + "?source=11&fromHz=true&tgc=" + ydTgc
 			activityInfo.YidongActivityUrl = yidongLongLink + "%26source=11%26fromHz=true%26tgc=" + 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.FileType = 1
-			activityInfo.AudioLink = true
-			activityInfo.VoiceList = mapActivityVoice[activityId]
-		}
 
-		//处理视频回放
-		mapActivityVideo, err := services.GetActivityVideoResp(mapActivityId)
-		if err != nil {
-			br.Msg = "获取信息失败"
-			br.ErrMsg = "GetActivityVideoResp,Err:" + err.Error()
-			return
-		}
-		if mapActivityVideo[activityId] != nil {
-			activityInfo.FileType = 2
-			activityInfo.AudioLink = true
-			activityInfo.VideoDetail = mapActivityVideo[activityId]
-		}
 		//8.5 小程序活动详情页 除专家电话外 其余属于新产业的活动 ,不显示 new 标签
 		if activityInfo.ActivityTypeName != "专家电话会" {
 			for _, rep := range activityInfo.Listndustrial {
@@ -601,14 +576,46 @@ func (this *ActivityCoAntroller) Detail() {
 		}
 	}
 
-	if (!activityInfo.IsResearchPoints && activityInfo.IsLimitPeople == 0) || activityInfo.YidongActivityId != "" { //易董的活动 或者(不扣点且不限制人数)走月卡日卡逻辑
-		resp.GoodsList = services.GetUserGoodsCardList() //日卡月卡商品信息
-	} else {
-		resp.GoodsList = services.GetGoodsInfoByActivity(activityInfo)                                             //单场活动信息
-		resp.OrderCode, resp.PayTimeCountdown = services.GetHaverEquallyOrderByUser10MinByActivty(uid, 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.FileType = 1
+		activityInfo.AudioLink = true
+		activityInfo.VoiceList = mapActivityVoice[activityId]
+	}
+	//处理视频回放
+	mapActivityVideo, err := services.GetActivityVideoResp(mapActivityId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "GetActivityVideoResp,Err:" + err.Error()
+		return
 	}
-	if resp.PayTimeCountdown > 0 {
-		resp.IsShowWxPay = utils.IS_SHOW_WX_PAY //存在待支付的订单强制为true兼容前端
+	if mapActivityVideo[activityId] != nil {
+		activityInfo.FileType = 2
+		activityInfo.AudioLink = true
+		activityInfo.VideoDetail = mapActivityVideo[activityId]
+	}
+
+	//已结束的活动,音视频作为商品的价格处理
+	if activityInfo.ActiveState == "3" {
+		resp.GoodsList = services.GetGoodsInfoByActivityVivo(activityInfo)              //音视频回放商品信息
+		resp.VivoPoints = services.GetActivityVivoPoints(activityInfo, user, havePower) //单场活动信息
+		if resp.VivoPoints.PointPermission == 2 || resp.VivoPoints.PointPermission == 3 {
+			resp.IsShowWxPay = utils.IS_SHOW_WX_PAY //是否展示微信支付按钮
+		}
+		resp.OrderCode, resp.PayTimeCountdown = services.GetHaverEquallyOrderByUser10MinByActivtyVivo(uid, activityId) //截止支付时间倒计时
+	} else {
+		if (!activityInfo.IsResearchPoints && activityInfo.IsLimitPeople == 0) || activityInfo.YidongActivityId != "" { //易董的活动 或者(不扣点且不限制人数)走月卡日卡逻辑
+			resp.GoodsList = services.GetUserGoodsCardList() //日卡月卡商品信息
+		} else {
+			resp.GoodsList = services.GetGoodsInfoByActivity(activityInfo)                                             //单场活动信息
+			resp.OrderCode, resp.PayTimeCountdown = services.GetHaverEquallyOrderByUser10MinByActivty(uid, activityId) //截止支付时间倒计时
+		}
 	}
 
 	if len(resp.GoodsList) == 0 {
@@ -1950,3 +1957,81 @@ func (this *ActivityCoAntroller) Check() {
 	br.Success = true
 	br.Data = resp
 }
+
+// @Title 查看音视频扣点接口
+// @Description 查看音视频扣点接口
+// @Param	request	body models.ActivityIdRep true "type json string"
+// @Success Ret=200 {object}
+// @router /vivo_point_record [post]
+func (this *ActivityCoAntroller) VivoPointRecord() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+
+	var req models.ActivityIdRep
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	activityId := req.ActivityId
+	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
+	if activityInfo == nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "活动ID错误,不存在activityId:" + strconv.Itoa(activityId)
+		return
+	}
+	if errInfo != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
+		return
+	}
+
+	total, err := models.GetCygxActivityVivoPointRecordCount(activityId, user.UserId)
+	if err != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败,获取历史记录信息失败Err:" + errInfo.Error()
+		return
+	}
+	if total == 0 {
+		vivoPointsSetDetail, err := models.GetCygxActivityVivoPointsSetByActivityId(activityId)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取信息失败,Err:" + err.Error()
+			return
+		}
+		item := new(models.CygxActivityVivoPointRecord)
+		item.Source = vivoPointsSetDetail.Source
+		item.SourceId = activityId
+		item.UserId = user.UserId
+		item.Mobile = user.Mobile
+		item.Email = user.Email
+		item.CompanyId = user.CompanyId
+		item.CompanyName = user.CompanyName
+		item.RealName = user.RealName
+		item.SellerName, _ = services.GetSellerName(user) // 销售姓名
+		item.CreateTime = time.Now()
+		item.ModifyTime = time.Now()
+		item.RegisterPlatform = utils.REGISTER_PLATFORM
+		err = models.AddCygxActivityVivoPointRecord(item)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取信息失败,Err:" + err.Error()
+			return
+		}
+		go services.YanXuanActivityVivoPointsBillSignupAdd(activityId, user.UserId) // 用户观看音视频研选扣点
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}

+ 2 - 90
controllers/article.go

@@ -138,7 +138,7 @@ func (this *ArticleController) Detail() {
 		}
 	}
 
-	havePower, err := services.GetArticleDetailUserPower(user, detail)
+	havePower, err := services.GetArticleDetailUserPower(user)
 	if err != nil {
 		br.Msg = "获取信息失败"
 		br.ErrMsg = "校验用户权限失败,Err:" + err.Error()
@@ -506,19 +506,10 @@ func (this *ArticleController) AddStopTime() {
 		source = "MOBILE"
 	}
 
-	detail := new(models.ArticleDetail)
 	hasPermission := 0
 	hasFree := 0
 
-	//resp := new(models.ArticleDetailResp)
-	detail, err = models.GetArticleDetailById(articleId)
-	if err != nil {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取信息失败,Err:" + err.Error()
-		return
-	}
-
-	havePower, err := services.GetArticleDetailUserPower(user, detail)
+	havePower, err := services.GetArticleDetailUserPower(user)
 	if err != nil {
 		br.Msg = "获取信息失败"
 		br.ErrMsg = "校验用户权限失败,Err:" + err.Error()
@@ -537,85 +528,6 @@ func (this *ArticleController) AddStopTime() {
 		}
 	}
 
-	//	//判断是否已经申请过
-	//	applyCount, err := models.GetApplyRecordCount(uid)
-	//	if err != nil && err.Error() != utils.ErrNoRow() {
-	//		br.Msg = "获取信息失败"
-	//		br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
-	//		return
-	//	}
-	//	//`description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,4:潜在客户,未提交过申请,5:潜在客户,已提交过申请"`
-	//	if user.CompanyId > 1 {
-	//		companyPermission, err := models.GetCompanyPermission(user.CompanyId)
-	//		if err != nil {
-	//			br.Msg = "获取信息失败"
-	//			br.ErrMsg = "判断是否已申请访谈失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
-	//			return
-	//		}
-	//		detail, err = models.GetArticleDetailById(articleId)
-	//		if err != nil {
-	//			br.Msg = "获取信息失败"
-	//			br.ErrMsg = "获取文章信息失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
-	//			return
-	//		}
-	//		if companyPermission == "" {
-	//			if applyCount > 0 {
-	//				hasPermission = 5
-	//			} else {
-	//				hasPermission = 2
-	//			}
-	//			hasFree = 2
-	//			goto Loop
-	//		} else {
-	//			hasFree = 1
-	//			var articlePermissionPermissionName string
-	//			if detail.CategoryId > 0 {
-	//				articlePermission, err := models.GetArticlePermission(detail.CategoryId)
-	//				if err != nil {
-	//					br.Msg = "获取信息失败"
-	//					br.ErrMsg = "获取报告权限失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
-	//					return
-	//				}
-	//				if articlePermission == nil {
-	//					br.Msg = "获取信息失败"
-	//					br.ErrMsg = "报告权限不存在,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
-	//					return
-	//				}
-	//				articlePermissionPermissionName = articlePermission.PermissionName
-	//			} else {
-	//				articlePermissionPermissionName = detail.CategoryName
-	//			}
-	//			var hasPersion bool
-	//			slice := strings.Split(articlePermissionPermissionName, ",")
-	//			//判断用户是否开通了个人研选权限,如果有权限后缀拼接权限名称
-	//			mfyxUserPermissionTotal := services.GetMfyxUserPermissionTotal(uid)
-	//			if mfyxUserPermissionTotal == 1 {
-	//				companyPermission += "," + utils.CHART_PERMISSION_NAME_MF_YANXUAN
-	//				companyPermission += "," + utils.MAI_FANG_YAN_XUAN_NAME
-	//			}
-	//			//如果有研选订阅的权限,那么就拼接一个 买方研选的权限做校验
-	//			if strings.Contains(companyPermission, utils.CHART_PERMISSION_NAME_MF_YANXUAN) {
-	//				companyPermission += "," + utils.MAI_FANG_YAN_XUAN_NAME
-	//			}
-	//			for _, v := range slice {
-	//				if strings.Contains(companyPermission, v) {
-	//					hasPersion = true
-	//				}
-	//			}
-	//			if hasPersion {
-	//				go services.ArticleHistoryStopTime(articleId, stopTime, outType, user)
-	//			} else { //无该行业权限
-	//				hasPermission = 3
-	//			}
-	//		}
-	//	} else { //潜在客户
-	//		if applyCount > 0 {
-	//			hasPermission = 5
-	//		} else {
-	//			hasPermission = 4
-	//		}
-	//	}
-	//Loop:
 	resp := new(models.ArticleDetailAddStopTimeRep)
 	resp.HasPermission = hasPermission
 	resp.HasFree = hasFree

+ 9 - 3
controllers/home.go

@@ -58,6 +58,7 @@ func (this *HomeController) NewList() {
 	var pars []interface{}
 	var yanxuanActivityIds []int
 	var yanxuanArticleIds []int
+	var conditionresp string
 	//var yanxuanspecialIds []int
 
 	if hashtagKeyword != "" {
@@ -70,23 +71,26 @@ func (this *HomeController) NewList() {
 	resp := new(models.HomeResourceDataListResp)
 
 	if keyWord == "" {
-		condition += " AND source IN ('article','activity','yanxuanspecial')   " // 只有研选的文章、研选的活动、研选的专栏这三种
+		condition += " AND source IN ('article','activity','yanxuanspecial','activityvoice','activityvideo')  AND IF   ( source IN('activityvoice','activityvideo') , chart_permission_id = 31 ,1=1 ) " // 只有研选的文章、研选的活动、研选的专栏这三种
 		if labelKeyword == "" {
 			//查询近一个月的数据
-			condition += " AND search_order_time  >   '" + time.Now().AddDate(0, 0, -60).Format(utils.FormatDateTime) + "'"
+			condition += " AND search_order_time  >   '" + time.Now().AddDate(0, 0, -180).Format(utils.FormatDateTime) + "'"
 			yanxuanActivityIds = services.GetYanxuanActivityIds(user, "1,2") // 获取所有的研选活动ID
 			yanxuanArticleIds = services.GetYanxuanArticleIds()              //获取所有研选文章ID
 		} else {
-			yanxuanActivityIds, yanxuanArticleIds, err = services.GetConditionInitByTagIds(user, labelKeyword)
+			yanxuanActivityIds, yanxuanArticleIds, conditionresp, err = services.GetConditionInitByTagIds(user, labelKeyword)
 			if err != nil {
 				br.Msg = "获取失败"
 				br.ErrMsg = "获取活动权限数据失败,GetConditionInitByTagIds Err:" + err.Error()
 				return
 			}
+			condition += conditionresp
 			//如果不是 "全部报告" 、 "专栏" 的关键词查询,就不做研选专栏的查询
 			if labelKeyword != utils.LABEL_L2_1 && labelKeyword != utils.LABEL_L2_2 {
 				condition += `  AND IF ( source = 'yanxuanspecial' , source_id   IN (0) ,1=1 ) `
 			}
+			//任何筛选,都不展示对应的音视频
+			condition += `   AND source  NOT IN ('activityvoice','activityvideo') `
 		}
 
 		yanxuanArticleIds = append(yanxuanArticleIds, 0)
@@ -104,6 +108,7 @@ func (this *HomeController) NewList() {
 			br.ErrMsg = "获取数据失败,Err:" + err.Error()
 			return
 		}
+
 		list, err = services.GetResourceDataList(condition, pars, startSize, pageSize, user)
 		if err != nil {
 			br.Msg = "获取失败"
@@ -118,6 +123,7 @@ func (this *HomeController) NewList() {
 			br.ErrMsg = "检索失败,Err:" + err.Error()
 			return
 		}
+
 		total = tmpTotalResult
 		list, err = services.GetResourceDataEsList(tmpResult, user)
 		if err != nil {

+ 59 - 1
controllers/micro_roadshow.go

@@ -1,6 +1,10 @@
 package controllers
 
-import "hongze/hongze_mfyx/models"
+import (
+	"encoding/json"
+	"hongze/hongze_mfyx/models"
+	"hongze/hongze_mfyx/services"
+)
 
 // 微路演 (查看留言详情,之前老的项目写到这个模块下了)
 type MicroRoadShowController struct {
@@ -64,3 +68,57 @@ func (this *MicroRoadShowController) CommentDetail() {
 	br.Msg = "操作成功"
 	return
 }
+
+// @Title 记录用户浏览音频回放接口
+// @Description 记录用户浏览音频回放接口
+// @Param	request	body models.ActivityIdRep true "type json string"
+// @Success Ret=200 {object} models.AddVideoHistoryReq
+// @router /videoHistory/add [post]
+func (this *MicroRoadShowController) VideoHistoryAdd() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	var req models.AddVideoHistoryReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	sourceId := req.SourceId
+	playSeconds := req.PlaySeconds
+	sourceType := req.SourceType
+	inviteShareCode := req.InviteShareCode
+
+	if sourceType == 0 {
+		sourceType = 1
+	}
+	if sourceType == 1 {
+		//添加活动音频的播放记录
+		go services.AddActivityVoiceHistory(user, sourceId, playSeconds, inviteShareCode)
+	} else if sourceType == 2 {
+		//添加活动视频的播放记录
+		go services.AddActivityVideoHistory(user, sourceId, playSeconds, inviteShareCode)
+	} else if sourceType == 3 {
+		//添加产业视频播放记录
+		go services.AddMicroRoadshowVideoRecord(user, sourceId, playSeconds)
+	} else if sourceType == 4 {
+		//问答系列音频播放记录
+		//go services.AddAskserieVideoHistoryRecord(user, sourceId, playSeconds)
+	}
+	go services.AddAllCygxVoiceAndVideoHistory(user, sourceId, sourceType, playSeconds)
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+	return
+}

+ 66 - 7
controllers/order.go

@@ -142,6 +142,7 @@ func (this *OrderController) AddByActivity() {
 	uid := user.UserId
 	goodsId := req.GoodsId
 	sourceId := req.SourceId
+	source := req.Source
 	if goodsId == 0 {
 		br.Msg = "支付失败"
 		br.ErrMsg = "支付失败,goodsId 信息错误Err:" + err.Error()
@@ -162,16 +163,21 @@ func (this *OrderController) AddByActivity() {
 	}
 	var title string
 	var oldOrderCode string
+	var payTimeCountdown int
 	//var _ int
 	item := new(order.CygxOrder)
-	if (!activityDetail.IsResearchPoints && activityDetail.IsLimitPeople == 0) || activityDetail.YidongActivityId != "" { //易董的活动 或者(不扣点且不限制人数)走月卡日卡逻辑
-		oldOrderCode = services.GetHaverEquallyOrderByUser10Min(uid, goodsId) //获取用户十分钟之内是否有相同的订单信息
-		item.OrderType = 1
+	if source == "ActivityVivo" {
+		oldOrderCode, payTimeCountdown = services.GetHaverEquallyOrderByUser10MinByActivtyVivo(uid, sourceId)
+		item.OrderType = 3
 	} else {
-		oldOrderCode, _ = services.GetHaverEquallyOrderByUser10MinByActivty(uid, sourceId)
-		item.OrderType = 2
+		if (!activityDetail.IsResearchPoints && activityDetail.IsLimitPeople == 0) || activityDetail.YidongActivityId != "" { //易董的活动 或者(不扣点且不限制人数)走月卡日卡逻辑
+			oldOrderCode = services.GetHaverEquallyOrderByUser10Min(uid, goodsId) //获取用户十分钟之内是否有相同的订单信息
+			item.OrderType = 1
+		} else {
+			oldOrderCode, payTimeCountdown = services.GetHaverEquallyOrderByUser10MinByActivty(uid, sourceId)
+			item.OrderType = 2
+		}
 	}
-
 	title = activityDetail.ActivityName
 	item.OrderCode = utils.GetOrdernum()
 	item.OutTradeNo = "TRADE" + item.OrderCode
@@ -189,6 +195,8 @@ func (this *OrderController) AddByActivity() {
 		item.GoodsName = "日卡"
 	case 2:
 		item.GoodsName = "月卡"
+	case 9:
+		item.GoodsName = "活动回放"
 	}
 	//如果活动有自定义的价格就优先按照自定义的价格来
 	if activityDetail.ActivityPrice > 0 {
@@ -214,6 +222,41 @@ func (this *OrderController) AddByActivity() {
 	item.ModifyTime = time.Now()
 	item.RegisterPlatform = utils.REGISTER_PLATFORM
 
+	//如果是音视频的订单,数据做二次处理
+	if source == "ActivityVivo" {
+		vivoPointsSetDetail, err := models.GetCygxActivityVivoPointsSetByActivityId(sourceId)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取信息失败,Err:" + err.Error()
+			return
+		}
+		item.GoodsMoney = vivoPointsSetDetail.GoodsMoney
+		item.OrderMoney = vivoPointsSetDetail.GoodsMoney
+		item.Source = vivoPointsSetDetail.Source
+		if vivoPointsSetDetail.Source == utils.CYGX_OBJ_ACTIVITYVIDEO {
+			activityVideoInfo, err := models.GetCygxActivityVideoByActivityId(sourceId)
+			if err != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取信息失败,Err:" + err.Error()
+				return
+			}
+			title = activityVideoInfo.VideoName
+		} else if vivoPointsSetDetail.Source == utils.CYGX_OBJ_ACTIVITYVOICE {
+			activityVoiceInfo, err := models.GetCygxActivityVoiceByActivityId(sourceId)
+			if err != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取信息失败,Err:" + err.Error()
+				return
+			}
+			title = activityVoiceInfo.VoiceName
+		} else {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取信息失败,音视频数据类型错误"
+			return
+		}
+		item.SourceTitle = title
+	}
+
 	//如果十分钟之内有相同的订单就修改,没有就新增
 	if oldOrderCode == "" {
 		err = order.AddCygxOrder(item)
@@ -230,6 +273,7 @@ func (this *OrderController) AddByActivity() {
 	resp := new(order.WxJsapiApiResp)
 	resp.Detail = JsapiApiResp
 	resp.OrderCode = item.OrderCode
+	resp.PayTimeCountdown = payTimeCountdown //截止支付时间倒计时
 	if err != nil {
 		br.Msg = "创建订单信息失败"
 		br.ErrMsg = "创建订单信息失败,Err:" + err.Error()
@@ -399,6 +443,15 @@ func (this *OrderController) UserOrderList() {
 		br.ErrMsg = "获取失败, Err:" + err.Error()
 		return
 	}
+
+	//音视频时长
+	var activityVivoIds []int
+	for _, v := range list {
+		if v.OrderType == 3 {
+			activityVivoIds = append(activityVivoIds, v.SourceId)
+		}
+	}
+	mapActivityVivo := services.GetActivityVivoByActivityIds(activityVivoIds)
 	for _, v := range list {
 		item := new(order.OrderListResp)
 		item.OrderCode = v.OrderCode
@@ -433,8 +486,14 @@ func (this *OrderController) UserOrderList() {
 				item.StartDate = v.StartDate.Format(utils.FormatDate)
 				item.EndDate = v.EndDate.Format(utils.FormatDate)
 			}
-		} else {
+		} else if orderType == 2 {
 			item.LabelKeywordImgLink = utils.LABEL_ICO_3
+		} else if orderType == 3 {
+			item.LabelKeywordImgLink = utils.LABEL_ICO_10
+		}
+
+		if v.OrderType == 3 {
+			item.PlaySeconds = mapActivityVivo[v.SourceId]
 		}
 		item.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
 		resp.List = append(resp.List, item)

+ 12 - 0
models/activity.go

@@ -269,6 +269,18 @@ type CygxActivityResp struct {
 	PayTimeCountdown   int                    `description:"支付时间倒计时"`
 	OrderCode          string                 `comment:"订单编号"`
 	GoodsList          []*order.CygxGoodsResp `description:"商品信息"`
+	VivoPoints         VivoPointsResp         `description:"音视频设置"`
+}
+
+type VivoPointsResp struct {
+	HavePoint       bool   `description:"是否被扣过点"`
+	PointPermission int    `description:"1:点数充足、2点数不足需付费、3:只能付费"`
+	CompanyPoints   string `description:"公司剩余点数"`
+	ActivityPoints  string `description:"本场活动要扣除的点数"`
+	//Title           string `description:"标题"`
+	//ResourceUrl     string `description:"链接"`
+	//Type            int    `description:"类型: 1-活动音频; 2-活动视频;"`
+	//PlaySeconds     string `description:"音视频时长"`
 }
 
 // 通过纪要ID获取活动详情

+ 8 - 0
models/activity_video.go

@@ -95,6 +95,14 @@ func GetCygxActivityVideoById(videoId int) (item *CygxActivityVideo, err error)
 	return
 }
 
+// 获取数量
+func GetCygxActivityVideoCount(activityId int) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity_video   WHERE activity_id = ? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, activityId).QueryRow(&count)
+	return
+}
+
 // 列表
 func GetActivityVideoList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityVideoResp, err error) {
 	o := orm.NewOrm()

+ 39 - 0
models/activity_vivo_point_record.go

@@ -0,0 +1,39 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+//活动音视频,首次播放扣点记录
+
+type CygxActivityVivoPointRecord struct {
+	RecordId         int       `orm:"column(record_id);pk";comment:"主键ID"`
+	SourceId         int       `comment:"来源ID"`
+	Source           string    `comment:"来源 activityvoice:活动音频、activityvideo:活动视频"`
+	UserId           int       `comment:"用户ID"`
+	Mobile           string    `comment:"手机号"`
+	Email            string    `comment:"邮箱"`
+	CompanyId        int       `comment:"公司ID"`
+	CompanyName      string    `comment:"公司名称"`
+	RealName         string    `comment:"用户实际名称"`
+	SellerName       string    `comment:"所属销售"`
+	CreateTime       time.Time `comment:"创建时间"`
+	ModifyTime       time.Time `comment:"修改时间"`
+	RegisterPlatform int       `comment:"来源 1小程序,2:网页"`
+}
+
+// GetCygxActivityVivoPointRecordCount  查询用户是否扣过点
+func GetCygxActivityVivoPointRecordCount(sourceId, userId int) (count int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT COUNT(1) count	FROM cygx_activity_vivo_point_record WHERE source_id = ? AND user_id = ?  `
+	err = o.Raw(sql, sourceId, userId).QueryRow(&count)
+	return
+}
+
+// 添加
+func AddCygxActivityVivoPointRecord(item *CygxActivityVivoPointRecord) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}

+ 32 - 0
models/activity_vivo_points_set.go

@@ -0,0 +1,32 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxActivityVivoPointsSet struct {
+	PointSetId   int       `orm:"column(point_set_id);pk";comment:"主键id"`
+	ActivityId   int       `comment:"活动ID"`
+	PointsObject string    `comment:"扣点设置方式 1:同报名参会时的扣点数、2:输入其余点数"`
+	PointsNum    float64   `comment:"扣点数量"`
+	GoodsMoney   float64   `comment:"商品总价"`
+	Source       string    `comment:"来源 activityvideo 活动视频、activityvoice 活动音频"`
+	CreateTime   time.Time `comment:"创建时间"`
+	ModifyTime   time.Time `comment:"更新时间"`
+}
+
+// 根据活动ID判断音视频是否设置了扣点
+func GetCygxActivityVivoPointsSetCountByActivityId(activityId int) (count int, err error) {
+	o := orm.NewOrm()
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity_vivo_points_set  WHERE activity_id =?  `
+	err = o.Raw(sqlCount, activityId).QueryRow(&count)
+	return
+}
+
+func GetCygxActivityVivoPointsSetByActivityId(activityId int) (item *CygxActivityVivoPointsSet, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_vivo_points_set WHERE activity_id = ?  `
+	err = o.Raw(sql, activityId).QueryRow(&item)
+	return
+}

+ 8 - 0
models/activity_voice.go

@@ -84,6 +84,14 @@ func GetCygxActivityVoiceById(videoId int) (item *CygxActivityVoice, err error)
 	return
 }
 
+// 获取数量
+func GetCygxActivityVoiceCount(activityId int) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity_voice   WHERE activity_id = ? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, activityId).QueryRow(&count)
+	return
+}
+
 // 列表
 func GetActivityVoiceListAll(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityVideoListResp, err error) {
 	o := orm.NewOrm()

+ 1 - 0
models/db.go

@@ -180,6 +180,7 @@ func init() {
 		new(CygxUserAdminShareHistory),
 		new(CygxUserAdminShareCode),
 		new(AliyunOcrLog),
+		new(CygxActivityVivoPointRecord),
 	)
 
 	initOrder() // 订单模块

+ 59 - 1
models/micro_roadshow.go

@@ -61,6 +61,7 @@ type MicroRoadShowPageList struct {
 	PlaySeconds         string `description:"音视频时长"`
 	ActivityId          int    `description:"活动ID"`
 	IsCollect           bool   `description:"是否收藏"`
+	LabelKeywordImgLink string `description:"标签关键词ico"`
 	AuthInfo            *UserPermissionAuthInfo
 }
 
@@ -436,7 +437,8 @@ type AddVideoHistoryReq struct {
 	//VideoId     int `description:"视频ID"`
 	PlaySeconds int `description:"播放时长"`
 	//SourceType  int `description:"视频来源: 1-微路演; 2-活动 (不传默认为1)"`
-	SourceType int `description:"音视频来源: 1-活动音频; 2-活动视频; 3-产业视频; 4-系列问答"`
+	SourceType      int    `description:"音视频来源: 1-活动音频; 2-活动视频; 3-产业视频; 4-系列问答"`
+	InviteShareCode string `description:"销售账号邀请码"`
 }
 
 func GetLastCygxMicroRoadshowVideoHistory(videoId, userId int) (item *CygxMicroRoadshowVideoHistory, err error) {
@@ -643,3 +645,59 @@ func GetMicroRoadshowVideoByIndustryIdCount(industryId int) (count int, err erro
 	err = o.Raw(sql, industryId).QueryRow(&count)
 	return
 }
+
+func GetMicroRoadShowVideoPageListByActivityIds(activityIds []int) (list []*MicroRoadShowPageList, err error) {
+	lenArr := len(activityIds)
+	if lenArr == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	var sql string
+	//活动音频1
+	sql += `
+			SELECT
+			a.activity_voice_id AS id,
+			a.activity_id AS source_id,
+			a.voice_name AS title,
+			a.voice_url AS resource_url,
+			1 AS type,
+			b.activity_time AS publish_time,
+			b.chart_permission_id,
+			b.chart_permission_name,
+			a.voice_play_seconds AS play_seconds,
+			a.background_img,
+			"" AS industry_name,
+			0 AS  industry_id,
+			a.share_img,
+			a.file_type as activity_file_type,
+			a.activity_id 
+		FROM
+			cygx_activity_voice AS a
+			JOIN cygx_activity AS b ON a.activity_id = b.activity_id  WHERE 1= 1   AND a.activity_id IN (` + utils.GetOrmInReplace(lenArr) + `) `
+
+	//活动视频2
+	sql += `  UNION ALL `
+	sql += `
+		SELECT
+			a.video_id AS id,
+			a.activity_id AS source_id,
+			a.video_name AS title,
+			a.video_url AS resource_url,
+			2 AS type,
+	    	b.activity_time as publish_time,
+			b.chart_permission_id,
+			b.chart_permission_name,
+			a.video_duration AS play_seconds,
+			a.background_img,
+			"" AS industry_name,
+			0 AS  industry_id,
+			a.share_img,
+			a.file_type as activity_file_type,
+			a.activity_id
+		FROM
+			cygx_activity_video as a
+			INNER JOIN cygx_activity as b on a.activity_id = b.activity_id WHERE 1= 1   AND a.activity_id IN (` + utils.GetOrmInReplace(lenArr) + `) `
+	sql += ` ORDER BY publish_time DESC`
+	_, err = o.Raw(sql, activityIds, activityIds).QueryRows(&list)
+	return
+}

+ 8 - 4
models/order/order.go

@@ -8,8 +8,9 @@ import (
 )
 
 type WxJsapiApiResp struct {
-	Detail    PrepayWithRequestPaymentResponse
-	OrderCode string `comment:"订单编号"`
+	Detail           PrepayWithRequestPaymentResponse
+	OrderCode        string `comment:"订单编号"`
+	PayTimeCountdown int    `description:"支付时间倒计时"`
 }
 
 // PrepayWithRequestPaymentResponse 预下单ID,并包含了调起支付的请求参数
@@ -24,8 +25,8 @@ type PrepayWithRequestPaymentResponse struct {
 }
 
 type CygxOrderAddReq struct {
-	GoodsId int `description:"商品ID"`
-	//Source   string `description:"资源(文章、活动)"`
+	GoodsId         int    `description:"商品ID"`
+	Source          string `description:"资源(文章、活动)"`
 	SourceId        int    `description:"资源ID"`
 	InviteShareCode string `description:"销售账号邀请码"`
 }
@@ -103,6 +104,8 @@ type CygxOrderResp struct {
 	CreateTime       time.Time `comment:"创建时间"`
 	ModifyTime       time.Time `comment:"修改时间"`
 	RegisterPlatform int       `comment:"来源 1小程序,2:网页"`
+	PlaySeconds      string    `description:"音视频时长"`
+	OrderType        int       `comment:"订单类型,1:畅读卡订单,2:单场付费订单"`
 	StartDate        time.Time `comment:"开始时间"`
 	EndDate          time.Time `comment:"结束时间"`
 }
@@ -137,6 +140,7 @@ type OrderListResp struct {
 	OrderStatus         int     `comment:"订单状态码"`
 	OrderStatusText     string  `comment:"订单状态描述"`
 	LabelKeywordImgLink string  `comment:"标签关键词ico"`
+	PlaySeconds         string  `description:"音视频时长"`
 	StartDate           string  `comment:"开始日期"`
 	EndDate             string  `comment:"结束日期"`
 }

+ 8 - 0
models/order/order_virtual_asset.go

@@ -102,6 +102,14 @@ func AddCygxOrderVirtualAsset(item *CygxOrderVirtualAsset, itemOrder *CygxOrder)
 	return
 }
 
+// 获取数量
+func GetCygxOrderVirtualAssetdCountByVivo(sourceId, userId int) (count int, err error) {
+	o := orm.NewOrm()
+	sqlCount := ` SELECT COUNT(1) AS  count  FROM cygx_order_virtual_asset WHERE source IN ('activityvideo','activityvoice')   AND  source_id = ?  AND  user_id = ?  `
+	err = o.Raw(sqlCount, sourceId, userId).QueryRow(&count)
+	return
+}
+
 // 获取数量
 func GetCygxOrderVirtualAssetdCount(condition string, pars []interface{}) (count int, err error) {
 	o := orm.NewOrm()

+ 18 - 0
routers/commentsRouter.go

@@ -115,6 +115,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_mfyx/controllers:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_mfyx/controllers:ActivityCoAntroller"],
+        beego.ControllerComments{
+            Method: "VivoPointRecord",
+            Router: `/vivo_point_record`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_mfyx/controllers:ActivitySignCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_mfyx/controllers:ActivitySignCoAntroller"],
         beego.ControllerComments{
             Method: "ByHand",
@@ -313,6 +322,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_mfyx/controllers:MicroRoadShowController"] = append(beego.GlobalControllerRouter["hongze/hongze_mfyx/controllers:MicroRoadShowController"],
+        beego.ControllerComments{
+            Method: "VideoHistoryAdd",
+            Router: `/videoHistory/add`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_mfyx/controllers:OrderController"] = append(beego.GlobalControllerRouter["hongze/hongze_mfyx/controllers:OrderController"],
         beego.ControllerComments{
             Method: "AddByActivity",

+ 86 - 0
services/activity.go

@@ -1337,3 +1337,89 @@ func GetYanxuanActivityIds(user *models.WxUserItem, activeState string) (activit
 	}
 	return
 }
+
+func ActivityVideoUserRmind(user *models.WxUserItem, activityId, fileType int) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("用户音视频回放操作操作行为,模板消息推送失败"+err.Error(), 2)
+		}
+	}()
+	countUser, err := models.GetUserRemind(user.UserId)
+	if err != nil {
+		return err
+	}
+	if countUser == 0 {
+		return err
+	}
+	var first string
+	var keyword1 string
+	var keyword2 string
+	var keyword3 string
+	var keyword4 string
+	var remark string
+	//获取销售手机号
+	sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return err
+	}
+	if sellerItemQy != nil {
+		openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
+		if e != nil {
+			err = errors.New("GetSellerByAdminId, Err: " + e.Error())
+			return
+		}
+		//TripStatus            int    `description:"行程进行状态 1:预报名,2:确定行程"`
+		if fileType == 1 {
+			activityInfo, e := models.GetCygxActivityVideoByActivityId(activityId)
+			if e != nil {
+				err = errors.New("GetCygxActivitySpecialDetailById, Err: " + e.Error())
+				return
+			}
+			if activityInfo == nil {
+				return
+			}
+			keyword1 = activityInfo.VideoName
+			keyword2 = fmt.Sprint("互动:播放视频,", user.RealName, "--", user.CompanyName)
+			first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:播放视频")
+
+		} else {
+			activityInfo, e := models.GetCygxActivityVoiceByActivityId(activityId)
+			if e != nil {
+				err = errors.New("GetCygxActivitySpecialDetailById, Err: " + e.Error())
+				return
+			}
+			if activityInfo == nil {
+				return
+			}
+			keyword1 = activityInfo.VoiceName
+			keyword2 = fmt.Sprint("互动:播放音频,", user.RealName, "--", user.CompanyName)
+			first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:播放音频")
+		}
+
+		//keyword2 = "__"
+		//remark = "点击查看活动详情"
+		openIdArr := make([]string, 0)
+		for _, v := range openIdList {
+			openIdArr = append(openIdArr, v.OpenId)
+		}
+		redirectUrl := utils.WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(activityId)
+		sendInfo := new(SendWxTemplate)
+		sendInfo.First = first
+		sendInfo.Keyword1 = keyword1
+		sendInfo.Keyword2 = keyword2
+		sendInfo.Keyword3 = keyword3
+		sendInfo.Keyword4 = keyword4
+		sendInfo.Remark = remark
+		sendInfo.TemplateId = utils.WxMsgTemplateIdArticleUserRemind
+		sendInfo.RedirectUrl = redirectUrl
+		sendInfo.RedirectTarget = 3
+		sendInfo.Resource = strconv.Itoa(activityId)
+		sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
+		sendInfo.OpenIdArr = openIdArr
+		err = PublicSendTemplateMsg(sendInfo)
+		if err != nil {
+			return
+		}
+	}
+	return
+}

+ 9 - 904
services/activity_points.go

@@ -1,11 +1,9 @@
 package services
 
 import (
-	"encoding/json"
 	"errors"
 	"fmt"
 	"hongze/hongze_mfyx/models"
-	"hongze/hongze_mfyx/models/company"
 	"hongze/hongze_mfyx/utils"
 	"strconv"
 	"time"
@@ -132,915 +130,22 @@ func YanXuanActivityPointsBillSubmitMeeting(activityId, adminId int) (err error)
 	return
 }
 
-// YanXuanActivityPointsBillReduce 处理研选活动扣点
-func YanXuanActivityPointsBillReduce() (err error) {
-	for {
-		//SourceType int       `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
-		utils.Rc.Brpop(utils.CYGX_YANXUAN_POINTS_KEY, func(b []byte) {
-			var log models.YanXuanActivityPointsRedis
-			if err := json.Unmarshal(b, &log); err != nil {
-				fmt.Println("json unmarshal wrong!")
-				go utils.SendAlarmMsg("处理研选活动扣点处理Redis队列消息失败:"+err.Error()+string(b), 2)
-			}
-			switch log.SourceType {
-			case 1:
-				go YanXuanActivityPointsBillSignupAddReduce(log)
-				fmt.Println("1:报名")
-				break
-			case 2:
-				go YanXuanActivityPointsBillSignupCancelReduce(log)
-				fmt.Println(" 2:取消报名")
-				break
-			case 3:
-				go YanXuanActivityPointsBillActivityEditReduce(log)
-				fmt.Println("3:活动编辑")
-				break
-			case 4:
-				go YanXuanActivityPointsBillActivityPublishAndCancelReduce(log)
-				fmt.Println("4:活动发布、取消发布")
-				break
-			case 5:
-				go YanXuanActivityPointsBillSubmitMeetingReduce(log)
-				fmt.Println("5:活动到会研选扣点处理。")
-			case 6:
-				go YanXuanCompanyApprovalReduce(log)
-				fmt.Println("6:研选审批通过的时候研选扣点更新。")
-				break
-			case 7:
-				go YanXuanCompanyCompanyTryOutReduce(log)
-				fmt.Println("7:正式专试用定时任务更新研选扣点。")
-				break
-			default:
-				fmt.Println(string(b))
-				go utils.SendAlarmMsg("处理研选活动扣点处理Redis队列消息失败:"+string(b), 2)
-			}
-		})
-	}
-}
-
-// 1:用户报名
-func YanXuanActivityPointsBillSignupAddReduce(log models.YanXuanActivityPointsRedis) (err error) {
-	defer func() {
-		if err != nil {
-			fmt.Println(err)
-			go utils.SendAlarmMsg("用户报名活动扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "userId", log.UserId), 2)
-		}
-	}()
-	//加2000毫秒的延迟
-	time.Sleep(2 * time.Second)
-	activityId := log.ActivityId
-	userId := log.UserId
-
-	//获取活动是否扣点以及扣点规则明细
-	activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
-		return
-	}
-	if activityPointsSetDetail == nil {
-		return
-	}
-	if activityPointsSetDetail.UserPointsNum == 0 || activityPointsSetDetail.PointsType != 1 {
-		return // 如果不是报名即扣点的这种形式,那么就不做任何处理
-	}
-
-	activityInfo, e := models.GetAddActivityInfoById(activityId)
-	if e != nil {
-		err = errors.New("GetAddActivityInfoById" + e.Error())
-		return
-	}
-	user, e := models.GetWxUserItemByUserId(userId)
-	if e != nil {
-		err = errors.New("GetWxUserItemByUserId" + e.Error())
-		return
-	}
-
-	// 获取用户所在公司剩余的点
-	companyPointsNum, e := models.GetCompanyPoints(user.CompanyId)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCompanyPoints, Err: " + e.Error())
-		return
-	}
-	//获取需要添加的流水信息
-	var items []*models.CygxActivityPointsBill
-	item := new(models.CygxActivityPointsBill)
-	item.UserId = user.UserId
-	item.ActivityId = activityId
-	item.CreateTime = time.Now()
-	item.Mobile = user.Mobile
-	item.Email = user.Email
-	item.CompanyId = user.CompanyId
-	item.CompanyName = user.CompanyName
-	item.RealName = user.RealName
-	item.BillDetailed = -activityPointsSetDetail.UserPointsNum
-	item.RegisterPlatform = log.RegisterPlatform
-	item.AdminId = log.AdminId
-	item.Source = log.Source
-	item.ChartPermissionId = activityInfo.ChartPermissionId
-	item.DoType = 1
-	item.Content = activityInfo.ActivityName + "--报名"
-	item.Points = companyPointsNum - activityPointsSetDetail.UserPointsNum
-	items = append(items, item)
-
-	//更新对应机构的剩余点数
-	var itemCompanys []*models.CygxActivityPointsCompany
-	itemCompany := new(models.CygxActivityPointsCompany)
-	itemCompany.CompanyId = user.CompanyId
-	itemCompany.Points = item.Points
-	itemCompany.ModifyTime = time.Now()
-	itemCompanys = append(itemCompanys, itemCompany)
-
-	err = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
-	return
-}
-
-// 2:用户取消报名
-func YanXuanActivityPointsBillSignupCancelReduce(log models.YanXuanActivityPointsRedis) (err error) {
-	defer func() {
-		if err != nil {
-			fmt.Println(err)
-			go utils.SendAlarmMsg("用户取消报名扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "userId", log.UserId), 2)
-		}
-	}()
-
-	activityId := log.ActivityId
-	userId := log.UserId
-
-	//获取活动是否扣点以及扣点规则明细
-	activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
-		return
-	}
-	if activityPointsSetDetail == nil {
-		return
-	}
-	if activityPointsSetDetail.UserPointsNum == 0 || activityPointsSetDetail.PointsType != 1 {
-		return // 如果不是报名即扣点的这种形式,那么就不做任何处理
-	}
-
-	activityInfo, e := models.GetAddActivityInfoById(activityId)
-	if e != nil {
-		err = errors.New("GetAddActivityInfoById" + e.Error())
-		return
-	}
-	user, e := models.GetWxUserItemByUserId(userId)
-	if e != nil {
-		err = errors.New("GetWxUserItemByUserId" + e.Error())
-		return
-	}
-
-	// 获取用户所在公司剩余的点
-	companyPointsNum, e := models.GetCompanyPoints(user.CompanyId)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCompanyPoints, Err: " + e.Error())
-		return
-	}
-
-	//查询最新的一条针对这个用户的扣点记录
-	var condition string
-	var pars []interface{}
-	condition += ` AND activity_id = ? AND user_id = ?  AND bill_detailed < 0   ORDER BY id DESC LIMIT 1  `
-	pars = append(pars, activityId, userId)
-	activityPointsBillDetail, e := models.GetCygxActivityPointsBillDetailByCondition(condition, pars)
-	if e != nil {
-		err = errors.New("activityPointsBillDetail" + e.Error())
-		return
-	}
-
-	//获取需要添加的流水信息
-	var items []*models.CygxActivityPointsBill
-	item := new(models.CygxActivityPointsBill)
-	item.UserId = user.UserId
-	item.ActivityId = activityId
-	item.CreateTime = time.Now()
-	item.Mobile = user.Mobile
-	item.Email = user.Email
-	item.CompanyId = user.CompanyId
-	item.CompanyName = user.CompanyName
-	item.RealName = user.RealName
-	item.BillDetailed = -activityPointsBillDetail.BillDetailed
-	item.RegisterPlatform = log.RegisterPlatform
-	item.AdminId = log.AdminId
-	item.Source = log.Source
-	item.ChartPermissionId = activityInfo.ChartPermissionId
-	item.DoType = 2
-	item.Content = activityInfo.ActivityName + "--取消报名"
-	item.Points = companyPointsNum - activityPointsBillDetail.BillDetailed
-	items = append(items, item)
-
-	//更新对应机构的剩余点数
-	var itemCompanys []*models.CygxActivityPointsCompany
-	itemCompany := new(models.CygxActivityPointsCompany)
-	itemCompany.CompanyId = user.CompanyId
-	itemCompany.Points = item.Points
-	itemCompany.ModifyTime = time.Now()
-	itemCompanys = append(itemCompanys, itemCompany)
-
-	err = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
-	return
-}
-
-// 3:活动编辑
-func YanXuanActivityPointsBillActivityEditReduce(log models.YanXuanActivityPointsRedis) (err error) {
-	defer func() {
-		if err != nil {
-			fmt.Println(err)
-			go utils.SendAlarmMsg("用户报名活动扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "userId", log.UserId), 2)
-		}
-	}()
-
-	activityId := log.ActivityId
-
-	//获取活动是否扣点以及扣点规则明细
-	activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
-		return
-	}
-	if activityPointsSetDetail == nil {
-		return
-	}
-	if activityPointsSetDetail.CompanyPointsNum == 0 {
-		return // 如果不是办会人,即扣点的这种形式,那么就不做任何处理
-	}
-	comapnyId := activityPointsSetDetail.CompanyId
-	activityInfo, e := models.GetAddActivityInfoByActivityId(activityId)
-	if e != nil {
-		err = errors.New("GetAddActivityInfoByActivityId" + e.Error())
-		return
-	}
-	if activityInfo.PublishStatus == 0 {
-		return // 未发布的活动不做处理
-	}
-	comapny, e := models.GetCompanyById(comapnyId)
-	if e != nil {
-		err = errors.New("GetCompanyById" + e.Error())
-		return
-	}
-
-	// 获取用户所在公司剩余的点
-	companyPointsNum, e := models.GetCompanyPoints(comapny.CompanyId)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCompanyPoints, Err: " + e.Error())
-		return
-	}
-
-	//查询最新的一条针对这个公司的扣点记录
-	var condition string
-	var pars []interface{}
-	condition += ` AND activity_id = ? AND company_id = ? AND mobile = '' AND bill_detailed < 0   ORDER BY id DESC LIMIT 1  `
-	pars = append(pars, activityId, comapnyId)
-	activityPointsBillDetail, e := models.GetCygxActivityPointsBillDetailByCondition(condition, pars)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCompanyPoints, Err: " + e.Error())
-		return
-	}
-	var items []*models.CygxActivityPointsBill
-	item := new(models.CygxActivityPointsBill)
-	var itemCompanys []*models.CygxActivityPointsCompany
-	itemCompany := new(models.CygxActivityPointsCompany)
-
-	if activityPointsBillDetail == nil { //如果是空的就添加
-		//获取需要添加的流水信息
-		//item.UserId = user.UserId
-		item.ActivityId = activityId
-		item.CreateTime = time.Now()
-		//item.Mobile = user.Mobile
-		//item.Email = user.Email
-		item.CompanyId = comapny.CompanyId
-		item.CompanyName = comapny.CompanyName
-		//item.RealName = user.RealName
-		item.BillDetailed = -activityPointsSetDetail.CompanyPointsNum
-		item.RegisterPlatform = log.RegisterPlatform
-		item.AdminId = log.AdminId
-		item.Source = log.Source
-		item.ChartPermissionId = activityInfo.ChartPermissionId
-		item.DoType = 1
-		item.Content = activityInfo.ActivityName + "--办会"
-		item.Points = companyPointsNum - activityPointsSetDetail.CompanyPointsNum
-		items = append(items, item)
-
-		//更新对应机构的剩余点数
-		itemCompany.CompanyId = comapny.CompanyId
-		itemCompany.Points = item.Points
-		itemCompany.ModifyTime = time.Now()
-		itemCompanys = append(itemCompanys, itemCompany)
-		e = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
-		if e != nil && e.Error() != utils.ErrNoRow() {
-			err = errors.New("AddCygxActivityPointsBillMulti, Err: " + e.Error())
-			return
-		}
-	} else {
-		//如果存在就进行对比修改
-		if activityPointsSetDetail.CompanyPointsNum != -activityPointsBillDetail.BillDetailed {
-			item.Id = activityPointsBillDetail.Id
-			item.BillDetailed = -activityPointsSetDetail.CompanyPointsNum
-			item.Points = companyPointsNum - activityPointsBillDetail.BillDetailed - activityPointsSetDetail.CompanyPointsNum
-			items = append(items, item)
-
-			//更新对应机构的剩余点数
-			itemCompany.CompanyId = comapny.CompanyId
-			itemCompany.Points = item.Points
-			itemCompany.ModifyTime = time.Now()
-			itemCompanys = append(itemCompanys, itemCompany)
-			e = models.UpdateCygxActivityPointsBillMulti(items, itemCompanys)
-			if e != nil && e.Error() != utils.ErrNoRow() {
-				err = errors.New("UpdateCygxActivityPointsBillMulti, Err: " + e.Error())
-				return
-			}
-		}
-	}
-	return
-}
-
-// 4:活动发布取消发布
-func YanXuanActivityPointsBillActivityPublishAndCancelReduce(log models.YanXuanActivityPointsRedis) (err error) {
-	defer func() {
-		if err != nil {
-			fmt.Println(err)
-			go utils.SendAlarmMsg("活动发布扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "userId", log.UserId), 2)
-		}
-	}()
-
-	activityId := log.ActivityId
-	publishStatus := log.PublishStatus
-	//comapnyId := log.ComapnyId
-
-	//获取活动是否扣点以及扣点规则明细
-	activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
-		return
-	}
-	if activityPointsSetDetail == nil {
-		return
-	}
-	if activityPointsSetDetail.CompanyPointsNum == 0 && activityPointsSetDetail.PointsType == 2 {
-		//if activityPointsSetDetail.CompanyPointsNum == 0 {
-		return // 如果不是办会人扣点,且对用户是到会扣点的这种形式,那么就不做任何处理
-	}
-
-	activityInfo, e := models.GetAddActivityInfoByActivityId(activityId)
-	if e != nil {
-		err = errors.New("GetAddActivityInfoByActivityId" + e.Error())
-		return
-	}
-
-	comapnyId := activityPointsSetDetail.CompanyId
-	var items []*models.CygxActivityPointsBill
-
-	var itemCompanys []*models.CygxActivityPointsCompany
-	mapCompanyPoints := make(map[int]float64) //一组公司的剩余点数
-	if publishStatus == 1 {
-		fmt.Println("//活动发布")
-		if comapnyId > 0 {
-			comapny, e := models.GetCompanyById(comapnyId)
-			if e != nil {
-				err = errors.New("GetCompanyById" + e.Error())
-				return
-			}
-			// 获取用户所在公司剩余的点
-			companyPointsNum, e := models.GetCompanyPoints(comapny.CompanyId)
-			if e != nil && e.Error() != utils.ErrNoRow() {
-				err = errors.New("GetCompanyPoints, Err: " + e.Error())
-				return
-			}
-			item := new(models.CygxActivityPointsBill)
-			item.ActivityId = activityId
-			item.CreateTime = time.Now()
-			//item.Mobile = user.Mobile
-			//item.Email = user.Email
-			item.CompanyId = comapny.CompanyId
-			item.CompanyName = comapny.CompanyName
-			//item.RealName = user.RealName
-			item.BillDetailed = -activityPointsSetDetail.CompanyPointsNum
-			item.RegisterPlatform = log.RegisterPlatform
-			item.AdminId = log.AdminId
-			item.Source = log.Source
-			item.ChartPermissionId = activityInfo.ChartPermissionId
-			item.DoType = 1
-			item.Content = activityInfo.ActivityName + "--办会"
-			item.Points = companyPointsNum - activityPointsSetDetail.CompanyPointsNum
-			items = append(items, item)
-
-			//更新对应机构的剩余点数
-			itemCompany := new(models.CygxActivityPointsCompany)
-			itemCompany.CompanyId = comapny.CompanyId
-			itemCompany.Points = item.Points
-			itemCompany.ModifyTime = time.Now()
-			itemCompanys = append(itemCompanys, itemCompany)
-			mapCompanyPoints[comapnyId] = item.Points
-		}
-
-		if activityPointsSetDetail.UserPointsNum > 0 && activityPointsSetDetail.PointsType == 1 {
-			//如果扣点形式选的是报名即扣点,那么就对已经报名的用户所在机构进行扣点
-			var condition string
-			var pars []interface{}
-			condition = ` AND do_fail_type = 0 AND activity_id  = ?`
-			pars = append(pars, activityId)
-
-			listSignup, e := models.GetActivitySignupList(condition, pars)
-			if e != nil && e.Error() != utils.ErrNoRow() {
-				err = errors.New("GetActivitySignupList, Err: " + e.Error())
-				return
-			}
-			var companyIds []int
-			if len(listSignup) > 0 {
-				for _, v := range listSignup {
-					companyIds = append(companyIds, v.CompanyId)
-				}
-				pars = make([]interface{}, 0)
-				condition = ` AND company_id IN (` + utils.GetOrmInReplace(len(companyIds)) + `)`
-				pars = append(pars, companyIds)
-
-				//获取这些公司剩余的点数
-				conpanyList, e := models.GetCygxActivityPointsCompanyList(condition, pars)
-				if e != nil && e.Error() != utils.ErrNoRow() {
-					err = errors.New("GetCygxActivityPointsCompanyList, Err: " + e.Error())
-					return
-				}
-
-				for _, v := range conpanyList {
-					if mapCompanyPoints[v.CompanyId] == 0 {
-						mapCompanyPoints[v.CompanyId] = v.Points
-					}
-				}
-
-				for _, user := range listSignup {
-					item := new(models.CygxActivityPointsBill)
-					item.ActivityId = activityId
-					item.CreateTime = time.Now()
-					item.Mobile = user.Mobile
-					item.UserId = user.UserId
-					item.Email = user.Email
-					item.CompanyId = user.CompanyId
-					item.CompanyName = user.CompanyName
-					item.RealName = user.RealName
-					item.BillDetailed = -activityPointsSetDetail.UserPointsNum
-					item.RegisterPlatform = log.RegisterPlatform
-					item.AdminId = log.AdminId
-					item.Source = log.Source
-					item.ChartPermissionId = activityInfo.ChartPermissionId
-					item.DoType = 1
-					item.Content = activityInfo.ActivityName + "--发布活动"
-					mapCompanyPoints[user.CompanyId] -= activityPointsSetDetail.UserPointsNum //通过map处理机构剩余点数
-					item.Points = mapCompanyPoints[user.CompanyId]
-					items = append(items, item)
-
-					//更新对应机构的剩余点数
-					itemCompany := new(models.CygxActivityPointsCompany)
-					itemCompany.CompanyId = user.CompanyId
-					itemCompany.Points = item.Points
-					itemCompany.ModifyTime = time.Now()
-					itemCompanys = append(itemCompanys, itemCompany)
-					mapCompanyPoints[user.CompanyId] = item.Points
-				}
-			}
-		}
-
-	} else {
-		fmt.Println("//活动取消发布")
-		//活动取消发布
-
-		if comapnyId > 0 {
-			comapny, e := models.GetCompanyById(comapnyId)
-			if e != nil {
-				err = errors.New("GetCompanyById" + e.Error())
-				return
-			}
-			// 获取用户所在公司剩余的点
-			companyPointsNum, e := models.GetCompanyPoints(comapny.CompanyId)
-			if e != nil && e.Error() != utils.ErrNoRow() {
-				err = errors.New("GetCompanyPoints, Err: " + e.Error())
-				return
-			}
-			item := new(models.CygxActivityPointsBill)
-			item.ActivityId = activityId
-			item.CreateTime = time.Now()
-			//item.Mobile = user.Mobile
-			//item.Email = user.Email
-			item.CompanyId = comapny.CompanyId
-			item.CompanyName = comapny.CompanyName
-			//item.RealName = user.RealName
-			item.BillDetailed = activityPointsSetDetail.CompanyPointsNum
-			item.RegisterPlatform = log.RegisterPlatform
-			item.AdminId = log.AdminId
-			item.Source = log.Source
-			item.ChartPermissionId = activityInfo.ChartPermissionId
-			item.DoType = 2
-			item.Content = activityInfo.ActivityName + "--取消办会"
-			item.Points = companyPointsNum + activityPointsSetDetail.CompanyPointsNum
-			items = append(items, item)
-			//更新对应机构的剩余点数
-			itemCompany := new(models.CygxActivityPointsCompany)
-			itemCompany.CompanyId = comapny.CompanyId
-			itemCompany.Points = item.Points
-			itemCompany.ModifyTime = time.Now()
-			itemCompanys = append(itemCompanys, itemCompany)
-			mapCompanyPoints[comapnyId] = item.Points
-		}
-
-		if activityPointsSetDetail.UserPointsNum > 0 && activityPointsSetDetail.PointsType == 1 {
-			//如果扣点形式选的是报名即扣点,那么就对已经报名的用户所在机构进行返点
-			var condition string
-			var pars []interface{}
-			condition = ` AND do_fail_type = 0 AND activity_id  = ?`
-			pars = append(pars, activityId)
-
-			listSignup, e := models.GetActivitySignupList(condition, pars)
-			if e != nil && e.Error() != utils.ErrNoRow() {
-				err = errors.New("GetActivitySignupList, Err: " + e.Error())
-				return
-			}
-			var companyIds []int
-			if len(listSignup) > 0 {
-				for _, v := range listSignup {
-					companyIds = append(companyIds, v.CompanyId)
-				}
-				pars = make([]interface{}, 0)
-				condition = ` AND company_id IN (` + utils.GetOrmInReplace(len(companyIds)) + `)`
-				pars = append(pars, companyIds)
-
-				//获取这些公司剩余的点数
-				conpanyList, e := models.GetCygxActivityPointsCompanyList(condition, pars)
-				if e != nil && e.Error() != utils.ErrNoRow() {
-					err = errors.New("GetCygxActivityPointsCompanyList, Err: " + e.Error())
-					return
-				}
-
-				for _, v := range conpanyList {
-					if mapCompanyPoints[v.CompanyId] == 0 {
-						mapCompanyPoints[v.CompanyId] = v.Points
-					}
-				}
-
-				pars = make([]interface{}, 0)
-				condition = ` AND activity_id = ?   `
-				pars = append(pars, activityId)
-				//获取扣点的流水记录
-				activityPointsBillList, e := models.GetCygxActivityPointsBillList(condition, pars)
-				if e != nil && e.Error() != utils.ErrNoRow() {
-					err = errors.New("GetCygxActivityPointsBillList" + e.Error())
-					return
-				}
-				mapUserBill := make(map[int]bool)
-				for _, v := range activityPointsBillList {
-					mapUserBill[v.UserId] = true
-				}
-
-				for _, user := range listSignup {
-					if !mapUserBill[user.UserId] {
-						continue // 如果用户的扣点记录不存在,那么就不进行返点处理
-					}
-					item := new(models.CygxActivityPointsBill)
-					item.ActivityId = activityId
-					item.CreateTime = time.Now()
-					item.Mobile = user.Mobile
-					item.UserId = user.UserId
-					item.Email = user.Email
-					item.CompanyId = user.CompanyId
-					item.CompanyName = user.CompanyName
-					item.RealName = user.RealName
-					item.BillDetailed = activityPointsSetDetail.UserPointsNum
-					item.RegisterPlatform = log.RegisterPlatform
-					item.AdminId = log.AdminId
-					item.Source = log.Source
-					item.ChartPermissionId = activityInfo.ChartPermissionId
-					item.DoType = 2
-					item.Content = activityInfo.ActivityName + "--取消活动"
-					mapCompanyPoints[user.CompanyId] += activityPointsSetDetail.UserPointsNum //通过map处理机构剩余点数
-					item.Points = mapCompanyPoints[user.CompanyId]
-					items = append(items, item)
-
-					//更新对应机构的剩余点数
-					itemCompany := new(models.CygxActivityPointsCompany)
-					itemCompany.CompanyId = user.CompanyId
-					itemCompany.Points = item.Points
-					itemCompany.ModifyTime = time.Now()
-					itemCompanys = append(itemCompanys, itemCompany)
-					mapCompanyPoints[user.CompanyId] = item.Points
-				}
-			}
-		}
-	}
-	e = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("AddCygxActivityPointsBillMulti, Err: " + e.Error())
-		return
-	}
-	return
-}
-
-//func init() {
-//	log := models.YanXuanActivityPointsRedis{ActivityId: 2385, SourceType: 5, RegisterPlatform: utils.REGISTER_PLATFORM, Source: 4, CreateTime: time.Now()}
-//	YanXuanActivityPointsBillSubmitMeetingReduce(log)
-//}
-
-// 5:活动到会研选扣点处理
-func YanXuanActivityPointsBillSubmitMeetingReduce(log models.YanXuanActivityPointsRedis) (err error) {
-	//func YanXuanActivityPointsBillSubmitMeetingReduce(activityId int) (err error) {
+// 8 用户观看音视频研选扣点
+func YanXuanActivityVivoPointsBillSignupAdd(activityId, uid int) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println(err)
-			go utils.SendAlarmMsg("活动到会研选扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "adminId", log.AdminId), 2)
-		}
-	}()
-
-	activityId := log.ActivityId
-	//获取活动是否扣点以及扣点规则明细
-	activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
-		return
-	}
-	if activityPointsSetDetail == nil {
-		return
-	}
-	if activityPointsSetDetail.PointsType != 2 {
-		return // 如果不是到会即扣点,的这种形式,那么就不做任何处理
-	}
-
-	activityInfo, e := models.GetAddActivityInfoByActivityId(activityId)
-	if e != nil {
-		err = errors.New("GetAddActivityInfoByActivityId" + e.Error())
-		return
-	}
-	var companyIds []int
-	mapCompanyPoints := make(map[int]float64) //一组公司的剩余点数
-	var condition string
-	var pars []interface{}
-	condition += ` AND activity_id = ? AND  is_meeting = 1 `
-	pars = append(pars, activityId)
-
-	//获取提交到会的人员信息
-	signUpDetailList, e := models.GetSignupDetailList(condition, pars)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetSignupDetailList" + e.Error())
-		return
-	}
-	if len(signUpDetailList) == 0 {
-		return
-	}
-	for _, v := range signUpDetailList {
-		companyIds = append(companyIds, v.CompanyId)
-	}
-
-	//return
-	pars = make([]interface{}, 0)
-	condition = ` AND company_id IN (` + utils.GetOrmInReplace(len(companyIds)) + `)`
-	pars = append(pars, companyIds)
-	//获取这些公司剩余的点数
-	conpanyList, e := models.GetCygxActivityPointsCompanyList(condition, pars)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCygxActivityPointsCompanyList, Err: " + e.Error())
-		return
-	}
-
-	pars = make([]interface{}, 0)
-	condition = ` AND activity_id = ? AND  mobile  != ''  `
-	pars = append(pars, activityId)
-	//获取扣点的流水记录
-	activityPointsBillList, e := models.GetCygxActivityPointsBillList(condition, pars)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCygxActivityPointsBillList" + e.Error())
-		return
-	}
-	mapActivityPointsBill := make(map[string]*models.CygxActivityPointsBill)
-	for _, v := range activityPointsBillList {
-		mapActivityPointsBill[v.Mobile] = v
-	}
-	//return
-	for _, v := range conpanyList {
-		if v.CompanyId != 0 {
-			mapCompanyPoints[v.CompanyId] = v.Points
-		}
-	}
-
-	//return
-	var items []*models.CygxActivityPointsBill
-	var itemCompanys []*models.CygxActivityPointsCompany
-	for _, user := range signUpDetailList {
-		item := new(models.CygxActivityPointsBill)
-		item.ActivityId = activityId
-		item.CreateTime = time.Now()
-		item.UserId = user.UserId
-		item.Mobile = user.Mobile
-		item.Email = user.Email
-		item.CompanyId = user.CompanyId
-		item.CompanyName = user.CompanyName
-		item.RealName = user.RealName
-		item.RegisterPlatform = log.RegisterPlatform
-		item.AdminId = log.AdminId
-		item.Source = log.Source
-		item.ChartPermissionId = activityInfo.ChartPermissionId
-		//如果没有扣点记录就对他们进行扣点处理
-		if mapActivityPointsBill[user.Mobile] == nil {
-			item.BillDetailed = -activityPointsSetDetail.UserPointsNum
-			item.DoType = 1
-			item.Content = activityInfo.ActivityName + "--活动到会"
-			item.Points = mapCompanyPoints[user.CompanyId] - activityPointsSetDetail.UserPointsNum
-			items = append(items, item)
-			//更新对应机构的剩余点数
-			itemCompany := new(models.CygxActivityPointsCompany)
-			itemCompany.CompanyId = user.CompanyId
-			itemCompany.Points = item.Points
-			itemCompany.ModifyTime = time.Now()
-			itemCompanys = append(itemCompanys, itemCompany)
-			mapCompanyPoints[user.CompanyId] = item.Points
-		} else {
-			//第二次提交改成未到会的,对其进行返点处理
-			if mapActivityPointsBill[user.Mobile].BillDetailed < 0 {
-				item.BillDetailed = activityPointsSetDetail.UserPointsNum
-				item.DoType = 2
-				item.Content = activityInfo.ActivityName + "--活动取消到会"
-				item.Points = mapCompanyPoints[user.CompanyId] + activityPointsSetDetail.UserPointsNum
-				items = append(items, item)
-
-				//更新对应机构的剩余点数
-				itemCompany := new(models.CygxActivityPointsCompany)
-				itemCompany.CompanyId = user.CompanyId
-				itemCompany.Points = item.Points
-				itemCompany.ModifyTime = time.Now()
-				itemCompanys = append(itemCompanys, itemCompany)
-				mapCompanyPoints[user.CompanyId] = item.Points
-			}
-		}
-	}
-	e = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("AddCygxActivityPointsBillMulti, Err: " + e.Error())
-		return
-	}
-	return
-}
-
-// 6:研选审批通过的时候研选扣点更新
-func YanXuanCompanyApprovalReduce(log models.YanXuanActivityPointsRedis) (err error) {
-	time.Sleep(5 * time.Second) // 延迟5秒处理
-	defer func() {
-		if err != nil {
-			fmt.Println(err)
-			go utils.SendAlarmMsg("研选审批通过的时候研选扣点更新,处理Redis队列消息失败:"+err.Error()+fmt.Sprint(log), 2)
+			msg := fmt.Sprint("activityId:", activityId, "userId:", uid)
+			go utils.SendAlarmMsg("用户观看音视频研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
 		}
 	}()
-	comapnyId := log.ComapnyId
-
-	comapnyDetail, e := models.GetCompanyById(comapnyId)
-	if e != nil {
-		err = errors.New("GetCompanyById" + e.Error())
-		return
-	}
-	total, e := models.GetCygxActivityPointsCompanyCountByCompanyId(comapnyId)
-	if e != nil {
-		err = errors.New("GetCygxActivityPointsCompanyCountByCompanyId, Err: " + e.Error())
-		return
-	}
-
-	//查询研选的权限状态
-	var condition string
-	var pars []interface{}
-	condition += " AND company_id = ? AND status = ? AND chart_permission_id = ?   ORDER BY company_report_permission_id DESC LIMIT 1  "
-	pars = append(pars, comapnyId, "正式", utils.CHART_PERMISSION_ID_YANXUAN)
-	companyReportPermissionDetail, e := models.GetCompanyReportPermissionDetailByCondition(condition, pars)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCompanyPoints, Err: " + e.Error())
-		return
-	}
-	if companyReportPermissionDetail == nil {
-		return // 如果不存在就不做研选扣点处理
-	}
-
-	//获取最近的一条审批合同信息
-	newCompanyApprovalDetail, e := company.GetCompanyApprovalById(comapnyId)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCompanyApprovalById, Err: " + e.Error())
-		return
-	}
-	if newCompanyApprovalDetail == nil {
-		return
-	}
-	companyContractId := newCompanyApprovalDetail.CompanyContractId
-
-	totalYxPerminssion, e := company.GetCompanyContractPermissionCheck(companyContractId, utils.CHART_PERMISSION_ID_YANXUAN)
-	if e != nil {
-		err = errors.New("GetCompanyContractPermissionCheck, Err: " + e.Error())
-		return
-	}
-	// 如果最新的审批合同里没有研选的权限,那么就不做处理
-	if totalYxPerminssion == 0 {
-		return
-	}
-
-	var billDetailed float64
-	var content string
-	//ExpensiveYx               int       `description:"权益研选: 0->3w; 1->5w;2->10W"` 3W3次、5W 15次,20w:40次 ,
-	if companyReportPermissionDetail.ExpensiveYx == 1 {
-		billDetailed = 15
-		content = "买方研选(5W)转正"
-	} else if companyReportPermissionDetail.ExpensiveYx == 2 {
-		billDetailed = 40
-		content = "买方研选(10w)转正"
-	} else {
-		billDetailed = 3
-		content = "买方研选(3W)转正"
-	}
-
-	//获取需要添加的流水信息
-	var items []*models.CygxActivityPointsBill
-	item := new(models.CygxActivityPointsBill)
-	//item.UserId = user.UserId
-	//item.ActivityId = activityId
-	item.CreateTime = time.Now()
-	//item.Mobile = user.Mobile
-	//item.Email = user.Email
-	item.CompanyId = comapnyDetail.CompanyId
-	item.CompanyName = comapnyDetail.CompanyName
-	//item.RealName = user.RealName
-	item.BillDetailed = billDetailed
-	item.RegisterPlatform = log.RegisterPlatform
-	item.AdminId = log.AdminId
-	item.Source = log.Source
-	//item.ChartPermissionId = activityInfo.ChartPermissionId
-	item.DoType = 2
-	item.Content = content
-	item.Points = billDetailed
-	items = append(items, item)
-
-	//更新对应机构的剩余点数
-	var itemCompanys []*models.CygxActivityPointsCompany
-	itemCompany := new(models.CygxActivityPointsCompany)
-	itemCompany.CompanyId = comapnyDetail.CompanyId
-	itemCompany.CompanyName = comapnyDetail.CompanyName
-	itemCompany.Points = item.Points
-	itemCompany.CreateTime = time.Now()
-	itemCompany.ModifyTime = time.Now()
-	itemCompanys = append(itemCompanys, itemCompany)
-	//判断是否存在记录,如果有就一个新增一个修改,如果没有就同时新增
-	if total == 0 {
-		err = models.AddCygxActivityPointsBillAndCompanyMulti(items, itemCompanys)
-	} else {
-		err = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
-	}
-
-	return
-}
-
-// 7:正式专试用定时任务更新研选扣点
-func YanXuanCompanyCompanyTryOutReduce(log models.YanXuanActivityPointsRedis) (err error) {
-	defer func() {
+	//SourceType int       `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。 8:用户观看音视频研选扣点"`
+	log := &models.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 8, RegisterPlatform: utils.REGISTER_PLATFORM, Source: 1, CreateTime: time.Now()}
+	if utils.Re == nil {
+		err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
 		if err != nil {
-			fmt.Println(err)
-			go utils.SendAlarmMsg("正式专试用定时任务更新研选扣点更新,处理Redis队列消息失败:"+err.Error()+fmt.Sprint(log), 2)
+			fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
 		}
-	}()
-	comapnyId := log.ComapnyId
-
-	comapny, e := models.GetCompanyById(comapnyId)
-	if e != nil {
-		err = errors.New("GetCompanyById" + e.Error())
-		return
 	}
-	// 获取用户所在公司剩余的点
-	companyPointsNum, e := models.GetCompanyPoints(comapnyId)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCompanyPoints, Err: " + e.Error())
-		return
-	}
-	if companyPointsNum <= 0 {
-		return
-	}
-	//获取需要添加的流水信息
-	var items []*models.CygxActivityPointsBill
-	item := new(models.CygxActivityPointsBill)
-	//item.UserId = user.UserId
-	//item.ActivityId = activityId
-	item.CreateTime = time.Now()
-	//item.Mobile = user.Mobile
-	//item.Email = user.Email
-	item.CompanyId = comapny.CompanyId
-	item.CompanyName = comapny.CompanyName
-	//item.RealName = user.RealName
-	item.BillDetailed = -companyPointsNum
-	item.RegisterPlatform = log.RegisterPlatform
-	item.AdminId = log.AdminId
-	item.Source = log.Source
-	//item.ChartPermissionId = activityInfo.ChartPermissionId
-	item.DoType = 2
-	item.Content = "到期清零"
-	item.Points = 0
-	items = append(items, item)
-
-	//更新对应机构的剩余点数
-	var itemCompanys []*models.CygxActivityPointsCompany
-	itemCompany := new(models.CygxActivityPointsCompany)
-	itemCompany.CompanyId = comapny.CompanyId
-	itemCompany.Points = 0
-	itemCompany.CreateTime = time.Now()
-	itemCompany.ModifyTime = time.Now()
-	itemCompanys = append(itemCompanys, itemCompany)
-
-	err = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
-
 	return
 }

+ 1 - 1
services/article.go

@@ -572,7 +572,7 @@ func GetYanxuanArticleIds() (articleIds []int) {
 }
 
 // GetArticleDetailUserPower 处理用户查看报告详情的权限
-func GetArticleDetailUserPower(user *models.WxUserItem, articleInfo *models.ArticleDetail) (havePower bool, err error) {
+func GetArticleDetailUserPower(user *models.WxUserItem) (havePower bool, err error) {
 	userId := user.UserId
 	companyId := user.CompanyId
 	//判断用户是否开通了个人研选权限

+ 140 - 0
services/cygx_activity_video_history.go

@@ -1 +1,141 @@
 package services
+
+import (
+	"errors"
+	"fmt"
+	"hongze/hongze_mfyx/models"
+	"hongze/hongze_mfyx/utils"
+	"strconv"
+	"time"
+)
+
+// 记录用户活动音频播放记录
+func AddActivityVideoHistory(user *models.WxUserItem, activityId, playSeconds int, inviteShareCode string) {
+	// 十分钟之内的合并
+	key := utils.CYGX_VIDEO_HISTORY_KEY + utils.CYGX_OBJ_ACTIVITYVIDEO + strconv.Itoa(activityId) + "_" + strconv.Itoa(user.UserId)
+	if utils.Rc.IsExist(key) {
+		return
+	}
+	utils.Rc.Put(key, 1, 10*time.Minute)
+	var err error
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg(fmt.Sprint("添加活动视频的播放记录失败 AddActivityVideoHistory Err:", err.Error(), "活动ID:", activityId, "UserId:", user.UserId), 2)
+		}
+	}()
+	activityVideoInfo, e := models.GetCygxActivityVideoByActivityId(activityId)
+	if e != nil {
+		err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
+		return
+	}
+	item := new(models.CygxActivityVideoHistory)
+	item.UserId = user.UserId
+	item.RealName = user.RealName
+	item.ActivityId = activityId
+	item.VideoId = activityVideoInfo.VideoId
+	item.PlaySeconds = strconv.Itoa(playSeconds)
+	item.Mobile = user.Mobile
+	item.Email = user.Email
+	item.CompanyId = user.CompanyId
+	item.CompanyName = user.CompanyName
+	item.CreateTime = time.Now()
+	item.ModifyTime = time.Now()
+	item.RegisterPlatform = utils.REGISTER_PLATFORM
+	sellerItem, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
+		return
+	}
+	if sellerItem != nil {
+		item.SellerName = sellerItem.RealName
+	}
+	//添加记录
+	e = models.AddCygxActivityVideoHistory(item)
+	if e != nil {
+		err = errors.New("AddCygxActivityVideoHistory, Err: " + e.Error())
+		return
+	}
+	//播放记录加1
+	e = models.UpdateActivityVideoCounts(activityId)
+	if e != nil {
+		err = errors.New("UpdateActivityVideoCounts, Err: " + e.Error())
+		return
+	}
+	//设置消息提醒
+	go ActivityVideoUserRmind(user, activityId, 1)
+
+	go AddCygxUserAdminShareHistory(user, utils.CYGX_OBJ_ACTIVITYVIDEO, activityVideoInfo.VideoName, inviteShareCode, activityId)
+
+	return
+}
+
+// 记录用户活动音频播放记录
+func AddActivityVoiceHistory(user *models.WxUserItem, activityId, playSeconds int, inviteShareCode string) {
+	if playSeconds == 0 {
+		return
+	}
+	key := utils.CYGX_VIDEO_HISTORY_KEY + utils.CYGX_OBJ_ACTIVITYVOICE + strconv.Itoa(activityId) + "_" + strconv.Itoa(user.UserId)
+
+	var err error
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg(fmt.Sprint("记录用户活动音频播放记录失败 AddActivityVoiceHistory Err:", err.Error(), "活动ID:", activityId, "UserId:", user.UserId), 2)
+		}
+	}()
+	item := new(models.CygxActivityVoiceHistory)
+	item.UserId = user.UserId
+	item.RealName = user.RealName
+	item.ActivityId = activityId
+	item.PlaySeconds = strconv.Itoa(playSeconds)
+	item.Mobile = user.Mobile
+	item.Email = user.Email
+	item.CompanyId = user.CompanyId
+	item.CompanyName = user.CompanyName
+	item.CreateTime = time.Now()
+	item.ModifyTime = time.Now()
+	item.RegisterPlatform = utils.REGISTER_PLATFORM
+	sellerItem, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
+		return
+	}
+	if sellerItem != nil {
+		item.SellerName = sellerItem.RealName
+	}
+	activityVoiceInfo, e := models.GetCygxActivityVoiceByActivityId(activityId)
+	if e != nil {
+		err = errors.New("GetCygxActivityVoiceByActivityId, Err: " + e.Error())
+		return
+	}
+	if !utils.Rc.IsExist(key) {
+		//添加记录
+		e = models.AddCygxActivityVoiceHistory(item)
+		if e != nil {
+			err = errors.New("AddCygxActivityVoiceHistory, Err: " + e.Error())
+			return
+		}
+		//播放记录加1
+		e = models.UpdateCygxActivityVoiceCounts(activityId)
+		if e != nil {
+			err = errors.New("UpdateCygxActivityVoiceCounts, Err: " + e.Error())
+			return
+		}
+		utils.Rc.Put(key, 1, 10*time.Minute)
+		//设置消息提醒
+		go ActivityVideoUserRmind(user, activityId, 2)
+		go AddCygxUserAdminShareHistory(user, utils.CYGX_OBJ_ACTIVITYVOICE, activityVoiceInfo.VoiceName, inviteShareCode, activityId)
+	} else {
+		lastItem, e := models.GetLastCygxActivityVoiceHistory(activityId, user.UserId)
+		if e != nil {
+			err = errors.New("GetLastCygxActivityVoiceHistory, Err: " + e.Error())
+			return
+		}
+		e = models.UpdateLastCygxActivityVoiceHistory(strconv.Itoa(playSeconds), lastItem.Id)
+		if e != nil {
+			err = errors.New("UpdateLastCygxActivityVoiceHistory, Err: " + e.Error())
+			return
+		}
+	}
+
+	return
+}

+ 102 - 11
services/es_comprehensive.go

@@ -452,12 +452,20 @@ func GetResourceDataEsList(list []*SearchComprehensiveItem, user *models.WxUserI
 	var activityIds []int             //活动
 	var yanxuanSpecialIds []int       // 研选专栏
 	var yanxuanspecialauthorIds []int //研选作者ID
+	var activityvideoIds []string     // 活动视频
+	var activityvoiceIds []string     //活动音频
+	var roadshowIds []string          //微路演
+	var askserieVideoIds []string     //问答系列视频
 	//Source      string    `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial 、 本周研究汇总: researchsummary 、 上周纪要汇总 :minutessummary 、晨会精华 :meetingreviewchapt "`
 	for _, v := range list {
 		if v.Source == "article" {
 			articleIds = append(articleIds, v.SourceId)
 		} else if v.Source == "activity" {
 			activityIds = append(activityIds, v.SourceId)
+		} else if v.Source == "activityvideo" {
+			activityvideoIds = append(activityvideoIds, strconv.Itoa(v.SourceId))
+		} else if v.Source == "activityvoice" {
+			activityvoiceIds = append(activityvoiceIds, strconv.Itoa(v.SourceId))
 		} else if v.Source == utils.CYGX_OBJ_YANXUANSPECIAL {
 			yanxuanSpecialIds = append(yanxuanSpecialIds, v.SourceId)
 		} else if v.Source == utils.CYGX_OBJ_YANXUANSPECIAL_AUTHOR {
@@ -614,24 +622,107 @@ func GetResourceDataEsList(list []*SearchComprehensiveItem, user *models.WxUserI
 		}
 	}
 
+	if len(roadshowIds)+len(activityvideoIds)+len(activityvoiceIds)+len(askserieVideoIds) > 0 {
+
+		audioIdstr := strings.Join(activityvoiceIds, ",")
+		activityVideoIdsStr := strings.Join(activityvideoIds, ",")
+		roadshowIdsStr := strings.Join(roadshowIds, ",")
+		askserieVideoIdsStr := strings.Join(askserieVideoIds, ",")
+
+		list, _, e := GetMicroRoadShowMycollectV12(len(roadshowIds)+len(activityvideoIds)+len(activityvoiceIds)+len(askserieVideoIds), 0, audioIdstr, activityVideoIdsStr, roadshowIdsStr, askserieVideoIdsStr, user)
+		if e != nil {
+			err = errors.New("GetMicroRoadShowMycollect, Err: " + e.Error())
+			return
+		}
+
+		// 用户权限
+		authInfo, permissionArr, e := GetUserRaiPermissionInfo(user.UserId, user.CompanyId)
+		if e != nil {
+			err = errors.New("GetUserRaiPermissionInfo, Err: " + e.Error())
+			return
+		}
+
+		// 获取默认图配置
+		audioMap, videoMap, audioShareMap, videoShareMap, e := GetMicroRoadShowDefaultImgConfig()
+		if e != nil {
+			err = errors.New("GetMicroRoadShowDefaultImgConfig, Err: " + e.Error())
+			return
+		}
+		//Source      string    `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`
+		for i := range list {
+			// 权限
+			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 list[i].ChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, list[i].ChartPermissionName) {
+					au.HasPermission = 2
+				}
+			}
+			// 无权限的弹框提示
+			if au.HasPermission != 1 {
+				if au.OperationMode == UserPermissionOperationModeCall {
+					if list[i].Type == 1 {
+						au.PopupMsg = UserPermissionPopupMsgCallActivity
+					} else {
+						au.PopupMsg = UserPermissionPopupMsgCallMicroVideo
+					}
+				} else {
+					if list[i].Type == 1 {
+						au.PopupMsg = UserPermissionPopupMsgApplyActivity
+					} else {
+						au.PopupMsg = UserPermissionPopupMsgApplyMicroVideo
+					}
+				}
+			}
+			list[i].AuthInfo = au
+			list[i].PublishTime = utils.StrTimeToTime(list[i].PublishTime).Format(utils.FormatDate)
+			// 默认图
+			if list[i].BackgroundImg == "" {
+				if list[i].Type == 1 {
+					list[i].BackgroundImg = audioMap[list[i].ChartPermissionId]
+				} else {
+					list[i].BackgroundImg = videoMap[list[i].ChartPermissionId]
+				}
+			}
+			// 分享图
+			if list[i].ShareImg == "" {
+				if list[i].Type == 1 {
+					list[i].ShareImg = audioShareMap[list[i].ChartPermissionId]
+				} else {
+					list[i].ShareImg = videoShareMap[list[i].ChartPermissionId]
+				}
+			}
+			list[i].LabelKeywordImgLink = utils.LABEL_ICO_10
+		}
+		//Type                int    `description:"类型: 1-音频; 2-活动视频; 3-产业视频"`
+		for _, item := range list {
+			if item.Type == 1 {
+				mapItems[fmt.Sprint("activityvoice", item.Id)].Activityvoice = item
+			} else if item.Type == 2 {
+				mapItems[fmt.Sprint("activityvideo", item.Id)].Activityvideo = item
+			} else if item.Type == 3 {
+				mapItems[fmt.Sprint("roadshow", item.Id)].Roadshow = item
+			} else if item.Type == 4 {
+				mapItems[fmt.Sprint(utils.CYGX_OBJ_ASKSERIEVIDEO, item.Id)].AskserieVideo = item
+			}
+		}
+	}
+
 	for _, vList := range list {
 		for _, v := range mapItems {
 			//如果这些类型都为空,那么就不合并
-			//如果这些类型都为空,那么就不合并
-			if v.Article == nil && v.Activity == nil && v.YanxuanSpecial == nil && v.YanxuanSpecialAuthor == nil {
+			if v.Article == nil && v.Activity == nil && v.Activityvideo == nil && v.Activityvoice == nil && v.YanxuanSpecial == nil {
 				continue
 			}
-
 			if v.SourceId == vList.SourceId && v.Source == vList.Source {
 				items = append(items, v)
 			}
 		}
 	}
-	for _, v := range items {
-		if v.IndustrialResource != nil {
-			v.Source = "industrialsource"
-		}
-	}
 	return
 }
 
@@ -653,7 +744,7 @@ func SqlComprehensiveSearch(user *models.WxUserItem, keyWord string, startSize,
 	}
 
 	//yanxuanspecialIds = append(yanxuanspecialIds, 0)
-	condition := " AND source IN ('article','activity','yanxuanspecial')   " // 只有研选的文章、研选的活动、研选的专栏这三种
+	condition := " AND source IN ('article','activity','yanxuanspecial','activityvoice','activityvideo')  AND IF   ( source IN('activityvoice','activityvideo') , chart_permission_id = 31 ,1=1 ) " // 只有研选的文章、研选的活动、研选的专栏这三种
 	condition += `  AND IF ( source = 'article' , source_id   IN (` + strings.Join(yanxuanArticleIdsStr, ",") + `) ,1=1 ) `
 	//pars = append(pars, yanxuanArticleIds)
 
@@ -671,6 +762,7 @@ func SqlComprehensiveSearch(user *models.WxUserItem, keyWord string, startSize,
 
 	conditionContentYxAuthor = " AND  (special_name LIKE  ?  OR  nick_name LIKE  ? )  "
 	parsContentYxAuthor = append(parsContentYxAuthor, keyWord, keyWord)
+
 	totalTitle, e := models.GetResourceDataAndYanxuanSpecialAuthorCount(conditionTitle, parsTitle, conditionContentYxAuthor, parsContentYxAuthor)
 
 	//totalTitle, e := models.GetResourceDataCount(conditionTitle, parsTitle)
@@ -698,10 +790,9 @@ func SqlComprehensiveSearch(user *models.WxUserItem, keyWord string, startSize,
 	if totalTitle >= searchTotal {
 		fmt.Println("1")
 		//全部都是标题搜索
-		//list, e = models.GetResourceDataListCondition(conditionTitle, parsTitle, startSize, pageSize)
 		list, e = models.GetResourceDataAndYanxuanSpecialAuthorListCondition(conditionTitle, parsTitle, conditionContentYxAuthor, parsContentYxAuthor, startSize, pageSize)
 		if e != nil && e.Error() != utils.ErrNoRow() {
-			err = errors.New("GetResourceDataAndYanxuanSpecialAuthorListCondition, Err: " + e.Error())
+			err = errors.New("GetResourceDataListCondition, Err: " + e.Error())
 			return
 		}
 	} else if totalTitle <= searchTotal-pageSize {

+ 26 - 0
services/micro_roadshow.go

@@ -1149,3 +1149,29 @@ func GetActivityLYHFMapByActivityIds(activityIds []int) (mapResp map[int]bool) {
 	}
 	return
 }
+
+// 根据活动ID获取对应音视频时长
+func GetActivityVivoByActivityIds(activityIds []int) (mapResp map[int]string) {
+	var err error
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("根据活动ID获取对应音视频时长  GetActivityVivoByActivityIds,失败,活动ID:"+fmt.Sprint(activityIds)+err.Error(), 2)
+		}
+	}()
+
+	lenArr := len(activityIds)
+	if lenArr == 0 {
+		return
+	}
+
+	list, e := models.GetMicroRoadShowVideoPageListByActivityIds(activityIds)
+	if e != nil {
+		err = errors.New("GetIndustrialManagementNewList, Err: " + e.Error())
+		return
+	}
+	mapResp = make(map[int]string, 0)
+	for _, v := range list {
+		mapResp[v.ActivityId] = v.PlaySeconds
+	}
+	return
+}

+ 167 - 2
services/order.go

@@ -86,6 +86,139 @@ func GetGoodsInfoByActivity(item *models.ActivityDetail) (goodsListResp []*order
 	return
 }
 
+// 获取单场活动音视频关联的商品配置信息
+func GetGoodsInfoByActivityVivo(item *models.ActivityDetail) (goodsListResp []*order.CygxGoodsResp) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg(fmt.Sprint("获取单场活动关联的商品配置信息失败 GetGoodsInfoByActivity, err:", err.Error()), 2)
+		}
+	}()
+	activityId := item.ActivityId
+
+	total, e := models.GetCygxActivityVivoPointsSetCountByActivityId(activityId)
+	if e != nil {
+		err = errors.New("GetCygxActivityPointsSetUserNum, Err: " + e.Error())
+		return
+	}
+	if total == 0 {
+		goodsListResp = make([]*order.CygxGoodsResp, 0)
+		return
+	}
+
+	vivoPointsSetDetail, e := models.GetCygxActivityVivoPointsSetByActivityId(activityId)
+	if e != nil {
+		err = errors.New("GetCygxActivityVivoPointsSetCountByActivityId, Err: " + e.Error())
+		return
+	}
+
+	var condition string
+	var pars []interface{}
+	condition = ` AND  goods_id IN  (9) `
+
+	goodsList, e := order.GetCygxGoodsList(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxGoodsList, Err: " + e.Error())
+		return
+	}
+
+	for k, _ := range goodsList {
+		goodsList[k].CurrentPrice = fmt.Sprint(vivoPointsSetDetail.GoodsMoney)
+		goodsList[k].Price = fmt.Sprint(vivoPointsSetDetail.GoodsMoney)
+		goodsList[k].PopupPriceMsg = fmt.Sprint("¥", vivoPointsSetDetail.GoodsMoney)
+	}
+
+	goodsListResp = goodsList
+	return
+}
+
+func GetActivityVivoPoints(item *models.ActivityDetail, wxUser *models.WxUserItem, havePower bool) (vivoPointsResp models.VivoPointsResp) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg(fmt.Sprint("获取单场活动关联的商品配置信息失败 GetGoodsInfoByActivity, err:", err.Error()), 2)
+		}
+	}()
+	activityId := item.ActivityId
+
+	total, e := models.GetCygxActivityVivoPointsSetCountByActivityId(activityId)
+	if e != nil {
+		err = errors.New("GetCygxActivityPointsSetUserNum, Err: " + e.Error())
+		return
+	}
+	if total == 0 {
+		//如果没有设置就直接播放
+		vivoPointsResp.HavePoint = true
+		return
+	}
+
+	totalMySuccess, e := models.GetActivitySignupCount(wxUser.UserId, activityId)
+	if e != nil {
+		err = errors.New("GetCygxActivityPointsSetUserNum, Err: " + e.Error())
+		return
+	}
+
+	totalPayVivo, e := order.GetCygxOrderVirtualAssetdCountByVivo(activityId, wxUser.UserId)
+	if e != nil {
+		err = errors.New("GetCygxActivityPointsSetUserNum, Err: " + e.Error())
+		return
+	}
+
+	totalPointRecord, e := models.GetCygxActivityVivoPointRecordCount(activityId, wxUser.UserId)
+	if e != nil {
+		err = errors.New("GetCygxActivityVivoPointRecordCount, Err: " + e.Error())
+		return
+	}
+	//如果报了名,或者付费了,或者单独扣点了;就直接观看
+	if totalMySuccess > 0 || totalPayVivo > 0 || totalPointRecord > 0 {
+		vivoPointsResp.HavePoint = true
+	}
+
+	vivoPointsSetDetail, e := models.GetCygxActivityVivoPointsSetByActivityId(activityId)
+	if e != nil {
+		err = errors.New("GetCygxActivityVivoPointsSetCountByActivityId, Err: " + e.Error())
+		return
+	}
+
+	vivoPointsResp.ActivityPoints = fmt.Sprint(vivoPointsSetDetail.PointsNum)
+	// 获取用户所在公司剩余的点
+	companyPointsNum, e := models.GetCompanyPoints(wxUser.CompanyId)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCompanyPoints, Err: " + e.Error())
+		return
+	}
+	vivoPointsResp.CompanyPoints = fmt.Sprint(companyPointsNum)
+
+	havePowerYx, e := GetArticleDetailUserPower(wxUser)
+	if e != nil {
+		err = errors.New("GetArticleDetailUserPower, Err: " + e.Error())
+		return
+	}
+	if havePower || havePowerYx {
+		if vivoPointsSetDetail.PointsNum == 0 { //有权限情况下,点数为零的时候直接播放
+			vivoPointsResp.HavePoint = true
+		}
+		if companyPointsNum > 0 {
+			if companyPointsNum >= vivoPointsSetDetail.PointsNum {
+				vivoPointsResp.PointPermission = 1
+			} else {
+				vivoPointsResp.PointPermission = 2
+			}
+		} else {
+			//客户剩余点数为0的情况下,直接支付
+			vivoPointsResp.PointPermission = 3
+		}
+	} else {
+		if vivoPointsSetDetail.GoodsMoney > 0 {
+			vivoPointsResp.PointPermission = 3
+		}
+	}
+
+	return
+}
+
 // 获取用户十分钟之内是否有相同的订单信息
 func GetHaverEquallyOrderByUser10Min(userId, goodsId int) (orderCode string) {
 	var err error
@@ -220,7 +353,7 @@ func HandleOrderByWechatPay(itemCallback *WechatPayCallback) {
 			err = errors.New("AddCygxOrderUserCard, Err: " + e.Error())
 			return
 		}
-	} else if orderDetail.OrderType == 2 {
+	} else if orderDetail.OrderType == 2 || orderDetail.OrderType == 3 {
 		//如果是活动,把单场付费信息的活动写入 用户虚拟资产表
 		itemOrderVirtualAsset := new(order.CygxOrderVirtualAsset)
 		itemOrderVirtualAsset.OrderCode = orderDetail.OrderCode
@@ -277,6 +410,38 @@ func AddCygxOrderPayment(itemCallback *WechatPayCallback) {
 	return
 }
 
+// 获取用户十分钟之内是否有相同的订单信息
+func GetHaverEquallyOrderByUser10MinByActivtyVivo(userId, sourceId int) (orderCode string, seconds int) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg(fmt.Sprint("获取用户十分钟之内是否有相同的订单信息失败 GetHaverEquallyOrderByUser10MinByActivty, err:", err.Error()), 2)
+		}
+	}()
+	var condition string
+	var pars []interface{}
+	endTime := time.Now().Add(-10 * time.Minute)
+	condition = `  AND order_status = 1  AND source IN ( 'activityvideo', 'activityvoice') AND  user_id = ? AND  source_id = ? AND create_time > ?  AND register_platform = ? ORDER BY order_id DESC  `
+	pars = append(pars, userId, sourceId, endTime, utils.REGISTER_PLATFORM)
+	orderList, e := order.GetCygxOrderList(condition, pars, 0, 1)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCygxOrderList, Err: " + e.Error())
+		return
+	}
+	if len(orderList) == 0 {
+		return
+	} else {
+		for _, v := range orderList {
+			orderCode = v.OrderCode
+			duration := time.Now().Sub(v.CreateTime)
+			// 将时间差转换为秒数
+			seconds = 600 - int(duration.Seconds())
+		}
+	}
+	return
+}
+
 // 处理退款订单回调
 func HandleOrderRefundByWechatPay(itemCallback *WechatPayCallback) {
 
@@ -332,7 +497,7 @@ func HandleOrderRefundByWechatPay(itemCallback *WechatPayCallback) {
 			err = errors.New("RemoveCygxOrderUserCard, Err: " + e.Error())
 			return
 		}
-	} else if orderDetail.OrderType == 2 {
+	} else if orderDetail.OrderType == 2 || orderDetail.OrderType == 3 {
 		//如果是活动,把单场付费信息的活动写入 用户虚拟资产表
 		itemOrderVirtualAsset := new(order.CygxOrderVirtualAsset)
 		itemOrderVirtualAsset.OrderCode = orderDetail.OrderCode

+ 1 - 0
services/resource_data.go

@@ -253,6 +253,7 @@ func GetResourceDataList(condition string, pars []interface{}, startSize, pageSi
 					list[i].ShareImg = videoShareMap[list[i].ChartPermissionId]
 				}
 			}
+			list[i].LabelKeywordImgLink = utils.LABEL_ICO_10
 		}
 		//Type                int    `description:"类型: 1-音频; 2-活动视频; 3-产业视频"`
 		for _, item := range list {

+ 4 - 3
services/tag.go

@@ -59,7 +59,7 @@ func AddCygxTagHistory(user *models.WxUserItem, tagId int) (err error) {
 //	LABEL_L3_3 string = "主题c"     // 主题c
 //)
 
-func GetConditionInitByTagIds(user *models.WxUserItem, labelKeyword string) (yanxuanActivityIdsResp, yanxuanArticleIdsResp []int, err error) {
+func GetConditionInitByTagIds(user *models.WxUserItem, labelKeyword string) (yanxuanActivityIdsResp, yanxuanArticleIdsResp []int, conditionresp string, err error) {
 	var yanxuanActivityIds []int
 	var yanxuanArticleIds []int
 	var condition string
@@ -103,10 +103,11 @@ func GetConditionInitByTagIds(user *models.WxUserItem, labelKeyword string) (yan
 		}
 	case "全部报告": // 全部报告
 		yanxuanArticleIds = GetYanxuanArticleIds() //获取所有研选文章ID
-
+		conditionresp = `  AND source IN ('article','yanxuanspecial')  `
 	case "专栏": //专栏
-
+		conditionresp = `  AND source IN ('yanxuanspecial')  `
 	case "纪要": //纪要
+		conditionresp = `  AND source IN ('article')  `
 
 		condition = ` AND  article_type_id > 0   `
 		list, e := models.GetCygxCygxArticleIdList(condition, pars)

+ 26 - 1
services/user_admin_share.go

@@ -61,13 +61,34 @@ func AddCygxUserAdminShareHistory(user *models.WxUserItem, source, sourceTitle,
 	if user.UserId == 0 {
 		return
 	}
+	var err error
+	//如果是已经上传了音视的活动不记录
+	if source == utils.CYGX_OBJ_ACTIVITY {
+		totalvi, e := models.GetCygxActivityVideoCount(sourceId)
+		if e != nil {
+			err = errors.New("GetCygxActivityVideoCount, Err: " + e.Error())
+			return
+		}
+		if totalvi > 0 {
+			return
+		}
+		totalvo, e := models.GetCygxActivityVoiceCount(sourceId)
+		if e != nil {
+			err = errors.New("GetCygxActivityVoiceCount, Err: " + e.Error())
+			return
+		}
+		if totalvo > 0 {
+			return
+		}
+	}
+
 	//3秒之内多次请求,不重复记录
 	key := "CYGX_" + source + "_" + strconv.Itoa(sourceId) + "_" + strconv.Itoa(user.UserId)
 	if utils.Rc.IsExist(key) {
 		return
 	}
 	utils.Rc.Put(key, 1, 3*time.Second)
-	var err error
+
 	defer func() {
 		if err != nil {
 			fmt.Println(err)
@@ -88,6 +109,10 @@ func AddCygxUserAdminShareHistory(user *models.WxUserItem, source, sourceTitle,
 		item.Action = "查看活动"
 	case utils.CYGX_OBJ_ARTICLE:
 		item.Action = "查看报告"
+	case utils.CYGX_OBJ_ACTIVITYVIDEO:
+		item.Action = "查看活动回放"
+	case utils.CYGX_OBJ_ACTIVITYVOICE:
+		item.Action = "查看活动回放"
 	case utils.CYGX_OBJ_YANXUANSPECIAL:
 		item.Action = "查看专栏"
 	case "login":

+ 4 - 0
services/wx_category_template_msg.go

@@ -983,6 +983,10 @@ func SendWxCategoryMsgWxPay(orderDetail *order.CygxOrder) (err error) {
 		redirectUrl = utils.WX_MSG_PATH_YX_ARTICLE_DETAIL + strconv.Itoa(orderDetail.SourceId)
 	case utils.CYGX_OBJ_ACTIVITY:
 		redirectUrl = utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(orderDetail.SourceId)
+	case utils.CYGX_OBJ_ACTIVITYVIDEO:
+		redirectUrl = utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(orderDetail.SourceId)
+	case utils.CYGX_OBJ_ACTIVITYVOICE:
+		redirectUrl = utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(orderDetail.SourceId)
 	case utils.CYGX_OBJ_YANXUANSPECIAL:
 		redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_DETAIL + strconv.Itoa(orderDetail.SourceId)
 	}

+ 10 - 9
utils/constants.go

@@ -329,13 +329,14 @@ const (
 	//LABEL_ICO_5 string = "https://hzstatic.hzinsights.com/mfyx/config/Frame468.png" // 纪要
 	//LABEL_ICO_6 string = "https://hzstatic.hzinsights.com/mfyx/config/Frame469.png" // 买方沙龙
 
-	LABEL_ICO_1 string = "https://hzstatic.hzinsights.com/mfyx/config/maifangjiaoliu.png"           // 买方交流
-	LABEL_ICO_2 string = "https://hzstatic.hzinsights.com/mfyx/config/zhuanjiadiaoyan.png"          // 专家访谈
-	LABEL_ICO_3 string = "https://hzstatic.hzinsights.com/mfyx/config/shangshigongsixiaofanwei.png" // 上市公司小范围
-	LABEL_ICO_4 string = "https://hzstatic.hzinsights.com/mfyx/config/zhuanlan.png"                 // 专栏
-	LABEL_ICO_5 string = "https://hzstatic.hzinsights.com/mfyx/config/jiyao.png"                    // 纪要
-	LABEL_ICO_6 string = "https://hzstatic.hzinsights.com/mfyx/config/maifangshalong.png"           // 买方沙龙
-	LABEL_ICO_7 string = "https://hzstatic.hzinsights.com/mfyx/config/rika.png"                     // 日卡图标
-	LABEL_ICO_8 string = "https://hzstatic.hzinsights.com/mfyx/config/yueka.png"                    // 月卡图标
-	LABEL_ICO_9 string = "https://hzstatic.hzinsights.com/mfyx/config/zhuanlan_author.png"          // 专栏作者
+	LABEL_ICO_1  string = "https://hzstatic.hzinsights.com/mfyx/config/maifangjiaoliu.png"           // 买方交流
+	LABEL_ICO_2  string = "https://hzstatic.hzinsights.com/mfyx/config/zhuanjiadiaoyan.png"          // 专家访谈
+	LABEL_ICO_3  string = "https://hzstatic.hzinsights.com/mfyx/config/shangshigongsixiaofanwei.png" // 上市公司小范围
+	LABEL_ICO_4  string = "https://hzstatic.hzinsights.com/mfyx/config/zhuanlan.png"                 // 专栏
+	LABEL_ICO_5  string = "https://hzstatic.hzinsights.com/mfyx/config/jiyao.png"                    // 纪要
+	LABEL_ICO_6  string = "https://hzstatic.hzinsights.com/mfyx/config/maifangshalong.png"           // 买方沙龙
+	LABEL_ICO_7  string = "https://hzstatic.hzinsights.com/mfyx/config/rika.png"                     // 日卡图标
+	LABEL_ICO_8  string = "https://hzstatic.hzinsights.com/mfyx/config/yueka.png"                    // 月卡图标
+	LABEL_ICO_9  string = "https://hzstatic.hzinsights.com/mfyx/config/zhuanlan_author.png"          // 专栏作者
+	LABEL_ICO_10 string = "https://hzstatic.hzinsights.com/mfyx/config/activity_vivo.png"            // 活动音视频
 )