package services import ( "errors" "fmt" "hongze/hongze_clpt/models" "hongze/hongze_clpt/utils" "strconv" "strings" "time" ) //获取活动列表查询权限的SQL // @Param ChartPermissionIds query string false "行业id 多个用 , 隔开" // @Param ActivityTypeIds query string false "活动类型id 多个用 , 隔开" // @Param ActiveState query string false "活动进行状态 未开始:1、进行中2、已结束3" // @Param WhichDay query string false "哪一天 今天:1、明天:2,多个用 , 隔开" // @Param WhichTime query string false "已结束的时间筛选项 本周:1、上周:2 、本月:3、上月:4" // @Param Label query string false "搜索主题 多个用 , 隔开" // @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, playBack int) (conditionActivity string, err error) { adminIds, err := models.GetSelleridWhichGroup(user.CompanyId, 2) if err != nil { return } userType, permissionStr, err := GetUserType(user.CompanyId) if err != nil { return } //判断客户规模是否属于可见范围的活动 companyProduct, err := models.GetCompanyProductDetail(user.CompanyId, 2) if err != nil && err.Error() != utils.ErrNoRow() { return } isMaker := user.IsMaker slicePer := strings.Split(permissionStr, ",") var permissionSqlStr string var permissionNameStr string for _, v := range slicePer { if userType == 1 { //研选权限处理 if !strings.Contains(v, utils.CHART_PERMISSION_NAME_YANXUAN) { permissionNameStr += "'" + v + "'," } } else { permissionNameStr += "'" + v + "'," } } permissionNameStr = strings.Replace(permissionNameStr, "(主观)", "", -1) permissionNameStr = strings.Replace(permissionNameStr, "(客观)", "", -1) permissionNameStr = strings.TrimRight(permissionNameStr, ",") // 查研观向7.4-始终查询宏观的权限(无论是否有权限) if permissionNameStr == `` { permissionNameStr = `'宏观'` } else { permissionNameStr += `, '宏观'` } var condition string var conditionAdmin string var conditionHz string // 弘则权限处理 var sqlExport string // 专家权限处理 //permissionSqlStr = ` AND art.chart_permission_name IN (` + permissionNameStr + `)` sqlExport = ` AND (art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' ` if userType == 2 { sqlExport += ` OR art.customer_type_ids LIKE '%3%' ` } if (userType == 2 || userType == 3) && strings.Contains(permissionStr, "专家") { sqlExport += ` OR art.customer_type_ids LIKE '%4%' ` } sqlExport += `) ` // 如果是C类电话会就不展示内容,且合并到分析师电话会 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 label != "" { condition = ` AND art.label LIKE '%` + label + `%' ` } if isPower == 1 { condition += permissionSqlStr } //行业名称 if len(chartPermissionIds) > 0 { condition += ` AND art.chart_permission_id IN (` + chartPermissionIds + `)` } //如果是PC的,则不看易董的 if source == 1 { condition += ` AND art.yidong_activity_id = '' ` } var conditionOr string if whichDay != "" { var startDate string var endDate string if whichDay == "1" { startDate = time.Now().Format(utils.FormatDate) endDate = startDate } else if whichDay == "2" { startDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate) endDate = startDate } else if whichDay == "1,2" || whichDay == "2,1" { startDate = time.Now().Format(utils.FormatDate) endDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate) } else if whichDay == "3" { startDate = utils.GetNowWeekMonday().Format(utils.FormatDate) endDate = utils.GetNowWeekSunday().Format(utils.FormatDate) } else if whichDay == "4" { startDate = utils.GetLastWeekMonday().Format(utils.FormatDate) endDate = utils.GetLastWeekSunday().Format(utils.FormatDate) } else if whichDay == "5" { startDate = utils.GetNowMonthFirstDay().Format(utils.FormatDate) endDate = utils.GetNowMonthLastDay().Format(utils.FormatDate) } else if whichDay == "6" { startDate = utils.GetLastMonthFirstDay().Format(utils.FormatDate) endDate = utils.GetLastMonthLastDay().Format(utils.FormatDate) } else if whichDay == "3,4" || whichDay == "4,3" { startDate = utils.GetLastWeekMonday().Format(utils.FormatDate) endDate = utils.GetNowWeekSunday().Format(utils.FormatDate) } else if whichDay == "5,6" || whichDay == "6,5" { startDate = utils.GetLastMonthFirstDay().Format(utils.FormatDate) endDate = utils.GetNowMonthLastDay().Format(utils.FormatDate) } else { startDate = utils.GetNowWeekMonday().Format(utils.FormatDate) endDate = utils.GetNowWeekSunday().Format(utils.FormatDate) } condition += ` AND art.activity_time >= ` + "'" + startDate + " 00:00:00'" condition += ` AND art.activity_time <= ` + "'" + endDate + " 23:59:59'" } //有搜索条件传过来时,不判进行状态条件 if keyWord != "" { condition += ` AND (art.label LIKE '%` + keyWord + `%' OR art.activity_name LIKE '%` + keyWord + `%' ) ` } else { if activeState != "" { // 默认查看未开始跟进行中 if activeState == "1" { condition += ` AND art.active_state IN (1,2)` } else { condition += ` AND art.active_state IN (` + activeState + `)` } } else { condition += ` AND art.active_state IN (1,2)` } } if playBack == 1 { var pars []interface{} ativityVIdArry := make([]string, 0) voiceList, e := models.GetActivityVoiceListAll("", pars, 0, 1000) if e != nil && e.Error() != utils.ErrNoRow() { err = e return } for _, v := range voiceList { ativityVIdArry = append(ativityVIdArry, strconv.Itoa(v.ActivityId)) } videoList, e := models.GetActivityVideoListAll("", pars, 0, 1000) if e != nil && e.Error() != utils.ErrNoRow() { err = e return } for _, v := range videoList { ativityVIdArry = append(ativityVIdArry, strconv.Itoa(v.ActivityId)) } //活动音频,设置有效时间为30天,失效后该活动就不再支持音频回放。有效期起始时间为活动的开始时间 //endTime := time.Now().AddDate(0, 0, -30).Format("2006-01-02 15:04:05") //condition += ` AND art.activity_time > '` + endTime + `' ` if len(ativityVIdArry) > 0 { ativityVIdstr := strings.Join(ativityVIdArry, ",") condition += ` AND art.activity_id IN (` + ativityVIdstr + `) ` } } //查询全部可见的数据(是否全部客户可见) condition += ` AND art.publish_status = 1 ` conditionHz = condition //活动仅决策人可见 if isMaker == 0 { condition += ` AND art.is_maker_show = 0 ` } conditionAdmin = condition + ` AND art.visible_range = 1 ` condition += ` AND art.visible_range != 1 ` if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") { conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%' ` + condition + `) ` } if (userType == 5) && strings.Contains(permissionStr, "专家") { conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%5%' ` + condition + `) ` } if userType == 1 { conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + permissionSqlStr + `) ` } else { conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + `) ` } if userType == 6 || userType == 7 { conditionOr += ` OR ( art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' ` + condition + `) ` } if companyProduct != nil { if companyProduct.Scale != "" { conditionOr += ` OR ( art.scale LIKE '%` + companyProduct.Scale + `%' ` + condition + `) ` } } if adminIds != "" { conditionOr += ` OR ( art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' ` + ` AND art.admin_id IN (` + adminIds + `) ` + conditionAdmin + `) ` if companyProduct != nil { if companyProduct.Scale != "" { conditionOr += ` OR ( art.scale LIKE '%` + companyProduct.Scale + `%'` + ` AND art.admin_id IN (` + adminIds + `) ` + conditionAdmin + `) ` } } } //弘则研究下的客户不做权限,限制,C类电话会,仅本组销售、部门管理员、admin、权益研究员账号能看到 if user.CompanyId == 16 { mapMobile, e := GetAdminMobileMap() if e != nil { err = e return } if _, ok := mapMobile[user.Mobile]; ok { conditionOr += ` OR ( art.publish_status = 1 ` + conditionHz + `) ` } } conditionActivity = condition + permissionSqlStr + sqlExport + conditionOr return } //获取可见的活动 func HandleActivityPowerList(listActivity []*models.CygxActivity, user *models.WxUserItem) (items []*models.CygxActivity, err error) { return } //5.3版本活动标签字符串处理 func LabelStr(label string, isShowSubjectName int, temporaryLabel string) (labelNew string) { slicebr := strings.Split(label, "-") if len(slicebr) > 1 { if isShowSubjectName == 1 { labelNew = slicebr[1] } else { labelNew = slicebr[0] } } else { labelNew = label } if temporaryLabel != "" { labelNew = temporaryLabel } return labelNew } //列表 func HandleActivityTypeHomeList(listType []*models.ActivityTypeHome, listActivity []*models.CygxActivity, user *models.WxUserItem) (items []*models.ActivityTypeHome, err error) { mapActivity := make(map[int][]*models.CygxActivityLabelList) activityIds := make([]int, 0) // 用于查询活动【新】标签Map for _, v := range listActivity { // 如果是C类电话会就不展示内容,且合并到分析师电话会 if v.ActivityTypeId == 7 { v.ActivityTypeId = 2 } if v.ActivityTypeId == 1 { activityIds = append(activityIds, v.ActivityId) } } // 活动【新】标签Map newLabelMap, _, e := GetActivityNewLabelMap(activityIds) if e != nil { err = errors.New("获取产业新标签Map失败,GetActivityNewLabelMap Err: " + e.Error()) return } mapkeyWord := make(map[string]string) for _, v := range listActivity { if v.Label == "" { continue } // 如果是C类电话会就不展示内容,且合并到分析师电话会 if v.ActivityTypeId == 7 { v.ActivityTypeId = 2 } item := new(models.CygxActivityLabelList) item.KeyWord = LabelStr(v.Label, v.IsShowSubjectName, v.TemporaryLabel) if _, ok := mapkeyWord[fmt.Sprint(v.ActivityTypeId, "-", item.KeyWord)]; ok { continue } item.Resource = 1 item.ActivityId = v.ActivityId if v.YidongActivityId != "" { item.IsExternalLabel = true } item.IsNew = newLabelMap[v.ActivityId] mapActivity[v.ActivityTypeId] = append(mapActivity[v.ActivityTypeId], item) mapkeyWord[fmt.Sprint(v.ActivityTypeId, "-", item.KeyWord)] = item.KeyWord } for _, v := range listType { v.Resource = 1 if len(mapActivity[v.ActivityTypeId]) > 0 { v.List = mapActivity[v.ActivityTypeId] } else { v.List = make([]*models.CygxActivityLabelList, 0) } } items = listType fmt.Println(len(mapActivity)) 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 { mapActivityVoice[v.ActivityId] = v } } mapItem = mapActivityVoice return } //GetActivityVideoResp 处理活动视频频回放 func GetActivityVideoResp(mapActivityId []int) (mapItem map[int]*models.CygxActivityVideoListResp, err error) { var condition string var ativityVIdstr string for _, v := range mapActivityId { ativityVIdstr += strconv.Itoa(v) + "," } if ativityVIdstr == "" { return } ativityVIdstr = strings.TrimRight(ativityVIdstr, ",") condition += ` AND art.activity_id IN (` + ativityVIdstr + `) ` var pars []interface{} //endTime := time.Now().AddDate(0, 0, -30).Format("2006-01-02 15:04:05") //condition += ` AND art.activity_time > ? ` //pars = append(pars, endTime) videoList, e := models.GetActivityVideoListAll(condition, pars, 0, 1000) if e != nil && e.Error() != utils.ErrNoRow() { err = e return } mapActivityVideo := make(map[int]*models.CygxActivityVideoListResp) if len(videoList) > 0 { for _, v := range videoList { mapActivityVideo[v.ActivityId] = v } } mapItem = mapActivityVideo return } func ActivityButtonShow(item *models.ActivityDetail, user *models.WxUserItem) (itemActivity *models.ActivityListResp) { articleDetail := item //IsShowAppointment bool `description:"是否展示预约纪要"` //IsShowOutboundCall bool `description:"是否展示预约外呼"` //IsShowMeetingReminder bool `description:"是否展示会议提醒"` //IsShowHelpSsk bool `description:"是否展示帮我带问"` //IsShowSignup bool `description:"是否展示我要报名"` activityTimeText := articleDetail.ActivityTimeText activityTimeText = strings.Replace(activityTimeText, "(", "(", -1) activityTimeText = strings.Replace(activityTimeText, ")", ")", -1) articleDetail.ActivityTimeText = activityTimeText var yidongActivityUrl string articleDetail.IsShowAppointment = false //易董的操作按钮都隐藏 if articleDetail.YidongActivityId != "" { articleDetail.IsShowSignup = false articleDetail.IsShowDetails = true if articleDetail.YidongActivityId != "" { ydTgc, _ := GetYiDongCreateUserInfo(user) yidongLongLink, _ := GetYiDongOriginalLink(articleDetail) if yidongLongLink != "" { yidongActivityUrl = yidongLongLink + "%26source=11%26fromHz=true%26tgc=" + ydTgc } } } else { //专家电话会 1 if articleDetail.ActivityTypeId == 1 && articleDetail.IsLimitPeople == 0 && (articleDetail.ActiveState == "1" || articleDetail.ActiveState == "2") { articleDetail.IsShowHelpSsk = true } if articleDetail.ActiveState == "1" { //新的是否展示规则 if articleDetail.IsCanAppointmentMinutes == 1 { articleDetail.IsShowAppointment = true } //专家电话会 1 if articleDetail.ActivityTypeId == 1 { articleDetail.IsShowOutboundCall = true if articleDetail.IsLimitPeople == 0 { articleDetail.IsShowMeetingReminder = true articleDetail.IsShowHelpSsk = true } } //分析师电话会 2 if articleDetail.ActivityTypeId == 2 { articleDetail.IsShowOutboundCall = true if articleDetail.LimitPeopleNum == 0 { articleDetail.IsShowMeetingReminder = true } } //公司调研电话会 3 if articleDetail.ActivityTypeId == 3 { if articleDetail.LimitPeopleNum == 0 { articleDetail.IsShowMeetingReminder = true articleDetail.IsShowOutboundCall = true } else { articleDetail.IsShowSignup = true } } //公司线下调研 4 if articleDetail.ActivityTypeId == 4 { articleDetail.IsShowSignup = true } //专家线下沙龙 5 if articleDetail.ActivityTypeId == 5 { articleDetail.IsShowSignup = true } //分析师线下沙龙 6 if articleDetail.ActivityTypeId == 6 { articleDetail.IsShowSignup = true } //分析师电话会(C类) 7 if articleDetail.ActivityTypeId == 7 { articleDetail.IsShowSignup = true } } } v := articleDetail itemActivity = &models.ActivityListResp{ ActivityId: v.ActivityId, ActivityTypeId: v.ActivityTypeId, ActivityTypeName: v.ActivityTypeName, ChartPermissionId: v.ChartPermissionId, ChartPermissionName: v.ChartPermissionName, IsLimitPeople: v.IsLimitPeople, LimitPeopleNum: v.LimitPeopleNum, LastUpdatedTime: v.LastUpdatedTime, ActivityTime: v.ActivityTime, ActivityTimeText: v.ActivityTimeText, DistinguishedGuest: v.DistinguishedGuest, Host: v.Host, Speaker: v.Speaker, MainlandTell: v.MainlandTell, HongKongTell: v.HongKongTell, TaiwanTell: v.TaiwanTell, AmericaTell: v.AmericaTell, ParticipationCode: v.ParticipationCode, Theme: v.Theme, Expert: v.Expert, ActivityName: v.ActivityName, OnlineParticipation: v.OnlineParticipation, ReportLink: v.ReportLink, City: v.City, Address: v.Address, Highlights: v.Highlights, Remarks: v.Remarks, IsSignup: v.IsSignup, IsCancelMeetingReminder: v.IsCancelMeetingReminder, IsAppointment: v.IsAppointment, ActiveState: v.ActiveState, IsShowSustainable: v.IsShowSustainable, Description: v.Description, IsResearch: v.IsResearch, IsHideAppointment: v.IsHideAppointment, IsCClassMeeting: v.IsCClassMeeting, Label: v.Label, ImgUrl: v.ImgUrl, ImgUrlText: v.ImgUrlText, ActivityType: v.ActivityType, IsShowOutboundCall: v.IsShowOutboundCall, IsShowMeetingReminder: v.IsShowMeetingReminder, IsShowHelpSsk: v.IsShowHelpSsk, IsShowSignup: v.IsShowSignup, IsShowAppointment: v.IsShowAppointment, IsShowDetails: v.IsShowDetails, AudioLink: v.AudioLink, VoiceDetail: v.VoiceList, VideoDetail: v.VideoDetail, FileType: v.FileType, SourceType: v.SourceType, SignupNum: v.SignupNum, YidongActivityUrl: yidongActivityUrl, AuthInfo: v.AuthInfo, } return } func ActivityDetaailShow(activityInfo *models.ActivityListResp) (itemActivity *models.ActivityListResp, err error) { itemActivity = activityInfo if GetShowSustainable() && strings.Contains(itemActivity.ChartPermissionName, "研选") { itemActivity.IsShowSustainable = true } if activityInfo.SignupNum > activityInfo.LimitPeopleNum { activityInfo.SignupNum = activityInfo.LimitPeopleNum } if activityInfo.ReportLink != "" { artList := strings.Split(activityInfo.ReportLink, "{|}") if len(artList) > 0 { for _, v := range artList { artitem := new(models.ActivityArticleResp) artitem.ReportLink = v artIdSlice := strings.Split(v, "/") if len(artIdSlice) > 0 { articleId, _ := strconv.Atoi(artIdSlice[len(artIdSlice)-1]) artitem.ArticleId = articleId } activityInfo.ArticleList = append(activityInfo.ArticleList, artitem) } } } else { activityInfo.ArticleList = make([]*models.ActivityArticleResp, 0) } activityInfo.ActivityTypeName = strings.Replace(activityInfo.ActivityTypeName, "(C类)", "", -1) return } // GetActivityNewLabelMap 获取活动【新】标签Map func GetActivityNewLabelMap(activityIds []int) (labelMap map[int]bool, industryNewMap map[int]bool, err error) { labelMap = make(map[int]bool, 0) industryNewMap = make(map[int]bool, 0) if len(activityIds) == 0 { return } // 获取活动关联的产业 var groupCond string var groupPars []interface{} groupCond += ` AND a.activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `) AND b.source = 1 AND a.active_state != 3 ` groupPars = append(groupPars, activityIds) groups, e := models.GetActivityIndustryRelationList(groupCond, groupPars) if e != nil { err = errors.New("获取活动产业关联列表失败, Err: " + e.Error()) return } activityIndustryMap := make(map[int][]int, 0) industryIds := make([]int, 0) for i := range groups { industryIds = append(industryIds, groups[i].IndustrialManagementId) activityIndustryMap[groups[i].ActivityId] = append(activityIndustryMap[groups[i].ActivityId], groups[i].IndustrialManagementId) } // 获取新产业Map industryLabelMap, e := GetIndustryNewLabelMap(industryIds) if e != nil { err = errors.New("获取产业新标签Map失败, Err: " + e.Error()) return } // 判断活动是否为新 for k := range industryLabelMap { for k2, v2 := range activityIndustryMap { if labelMap[k2] { continue } // 活动的产业ID中存在一个新产业即为新活动 if utils.InArrayByInt(v2, k) { labelMap[k2] = true } } } //for _, v := range activityIds { // labelMap[v] = true //} //fmt.Println(labelMap) ////产业关联的弘则报告发布日期在三个月以内的活动、产业显示 NEW标签 articNewLabel, e := GetArticNewLabelWhithActivity3Month() if e != nil { err = errors.New("获取产业新标签Map失败, Err: " + e.Error()) return } for k := range articNewLabel { labelMap[k] = false } return } // GetIndustryNewLabelMap 获取产业【新】标签Map func GetIndustryNewLabelMap(industryIds []int) (labelMap map[int]bool, err error) { labelMap = make(map[int]bool, 0) industryIdLen := len(industryIds) if industryIdLen == 0 { return } // 获取产业关联的报告最早发布时间及最近的发布时间 var timeCond string var timePars []interface{} timeCond += ` AND b.publish_status = 1` if industryIdLen > 0 { timeCond += ` AND a.industrial_management_id IN (` + utils.GetOrmInReplace(industryIdLen) + `)` timePars = append(timePars, industryIds) } industryTimeList, e := models.GetIndustryArticleMinMaxPublishTime(timeCond, timePars) if e != nil { err = errors.New("获取产业文章最大最小发布时间失败, Err: " + e.Error()) return } // 判断产业是否为新 nowTime := time.Now().Local() threeMonthBefore := nowTime.AddDate(0, -3, 0) nullTime, _ := time.ParseInLocation(utils.FormatDateTime, "0001-01-01 00:00:00", time.Local) industryMap := make(map[int]*models.IndustryArticleMinMaxPublishTime, 0) for i := range industryTimeList { industryMap[industryTimeList[i].IndustrialManagementId] = industryTimeList[i] } for i := range industryIds { iid := industryIds[i] item := industryMap[iid] if item != nil { // 最早发布时间为空 / 最早发布时间在三个月前之后 if item.MinPublishTime.Equal(nullTime) || (item.MinPublishTime.After(threeMonthBefore)) { labelMap[iid] = true } } else { // 产业无报告, 则为新产业 labelMap[iid] = true } } return } //GetSpecialDetailUserPower 处理用户查看专项调研详情的权限 func GetActivityDetailUserPower(user *models.WxUserItem, activityInfo *models.ActivityDetail) (havePower bool, err error) { var companyDetailStatus string userType, permissionStr, e := GetUserType(user.CompanyId) if e != nil { err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error()) return } if user.CompanyId <= 1 { return } else { if permissionStr == "" { return } else { companyDetail, e := models.GetCompanyDetailById(user.CompanyId) if e != nil { err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error()) return } if companyDetail == nil { err = errors.New("客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId)) return } companyDetailStatus = companyDetail.Status } } if activityInfo.ChartPermissionId == 1 { havePower = true return } if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3) && strings.Contains(permissionStr, "专家") && activityInfo.LimitPeopleNum == 0 { havePower = true } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "正式" && strings.Contains(activityInfo.CustomerTypeIds, "4") { havePower = true } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "试用" && strings.Contains(activityInfo.CustomerTypeIds, "5") { havePower = true } else if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3 || activityInfo.ActivityTypeId == 4 || activityInfo.ActivityTypeId == 5) && strings.Contains(permissionStr, "专家") { havePower = true } if activityInfo.ActivityTypeId == 2 || activityInfo.ActivityTypeId == 6 || activityInfo.ActivityTypeId == 7 { if strings.Contains(permissionStr, activityInfo.ChartPermissionName+"(主观)") { havePower = true } } else { if strings.Contains(permissionStr, activityInfo.ChartPermissionName+"(客观)") { havePower = true } } if (strings.Contains(activityInfo.ChartPermissionName, "研选") || activityInfo.ChartPermissionName == "策略") && strings.Contains(permissionStr, activityInfo.ChartPermissionName) { havePower = true } //如果是易董的活动且属于研选类型,只要开通任何权限就可以查看详情 if activityInfo.YidongActivityId != "" && permissionStr != "" && strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) { havePower = true } if havePower && activityInfo.LimitPeopleNum > 0 { //对于一些特殊的活动,即使权限满足也不给产看 noPower, e := GetShareNoPowe(activityInfo, permissionStr, userType, user) if e != nil { err = errors.New("GetShareNoPowe, Err: " + e.Error()) return } if noPower { havePower = false } } return } // 校验被分享的用户是否有查看详情的权限 func GetShareNoPowe(activityInfo *models.ActivityDetail, permissionStr string, userType int, user *models.WxUserItem) (noPower bool, err error) { //如果是弘则的就不进行可见权限校验 if user.CompanyId == utils.HZ_COMPANY_ID { return } if (userType == 1 || userType == 4 || userType == 5) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(userType)) { noPower = true } //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户 if userType == 2 && strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(2)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(4)) { noPower = true } if userType == 2 && !strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(2)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) { noPower = true } if userType == 3 && strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(4)) { noPower = true } if userType == 3 && !strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) { noPower = true } if !noPower { noPower, err = CheckUserPowerByActivityChoose(user, activityInfo) } return } //处理活动本组们是否决策人权限 func CheckUserPowerByActivityChoose(user *models.WxUserItem, activityInfo *models.ActivityDetail) (noPower bool, err error) { //处理 见范围 1,仅本组可见 、2,全部客户可见 if activityInfo.VisibleRange == 1 { adminIds, errAdmin := models.GetSelleridWhichGroup(user.CompanyId, 2) if errAdmin != nil { err = errAdmin return } sliceAdminIds := strings.Split(adminIds, ",") var haveAdminId bool for _, v := range sliceAdminIds { if v == strconv.Itoa(activityInfo.AdminId) { haveAdminId = true } } if !haveAdminId { noPower = true } } //处理 是否仅决策人可见 0,否 、1,是 if activityInfo.IsMakerShow == 1 { if user.IsMaker == 0 { noPower = true } } return } //判断预约纪要按钮是否显示 func IsShowAppointment(activityTypeId int, chartPermissionName string) (isShowAppointment bool) { if activityTypeId == 1 || activityTypeId == 2 || activityTypeId == 3 || activityTypeId == 4 { isShowAppointment = true } if activityTypeId == 5 && chartPermissionName == "医药" { isShowAppointment = true } return } //GetindustryVideoDetailById 通过视频ID获取视频详情 func GetActivityVideoDetailById(user *models.WxUserItem, videoId int) (industryVideo *models.CygxActivityVideoDetailResp, AuthInfo *models.UserPermissionAuthInfo, err error) { total, e := models.GetActivityVideoByVideoIdCount(videoId) if e != nil { err = errors.New("获取活动的视频失败,GetActivityVideoByVideoIdCount " + e.Error()) return } if total == 0 { err = errors.New("视频不存在,或已取消发布") return } // 用户权限 authInfo, permissionArr, e := GetUserRaiPermissionInfo(user.UserId, user.CompanyId) if e != nil { err = errors.New("获取用户权限失败,GetUserRaiPermissionInfo " + e.Error()) return } videoSimple := new(models.CygxActivityVideoDetailResp) // 权限 var au *models.UserPermissionAuthInfo videoSimple, e = models.GetCygxActivityVideoById(videoId) if e != nil { err = errors.New("获取产业关联的视频失败,GetMicroRoadshowVideoByIndustryId " + e.Error()) return } else { //videoSimple.Id = video.Id //videoSimple.Title = video.Title //videoSimple.ResourceUrl = video.ResourceUrl //videoSimple.PlaySeconds = video.PlaySeconds //videoSimple.ActivityId = video.ActivityId //videoSimple.ChartPermissionId = video.ChartPermissionId if videoSimple.BackgroundImg == "" { // 获取默认图配置 _, videoMap, _, _, e := GetMicroRoadShowDefaultImgConfig() if e != nil { err = errors.New("获取视频默认配置图失败,GetMicroRoadshowVideoByIndustryId " + e.Error()) return } videoSimple.BackgroundImg = videoMap[videoSimple.ChartPermissionId] } 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 videoSimple.ChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, videoSimple.ChartPermissionName) { au.HasPermission = 2 } } // 无权限的弹框提示 if au.HasPermission != 1 { if au.OperationMode == UserPermissionOperationModeCall { au.PopupMsg = UserPermissionPopupMsgCallMicroVideo } else { au.PopupMsg = UserPermissionPopupMsgApplyMicroVideo } videoSimple.ResourceUrl = "" } } industryVideo = videoSimple AuthInfo = au return }