123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- package activity
- import (
- "errors"
- "gorm.io/gorm"
- "hongze/hongze_yb/global"
- "hongze/hongze_yb/models/tables/chart_permission"
- "hongze/hongze_yb/models/tables/research_report"
- "hongze/hongze_yb/models/tables/teleconference"
- "hongze/hongze_yb/models/tables/teleconference_video"
- "hongze/hongze_yb/models/tables/yb_activity"
- "hongze/hongze_yb/models/tables/yb_activity_permission"
- "hongze/hongze_yb/models/tables/yb_activity_register"
- "hongze/hongze_yb/models/tables/yb_activity_remind"
- "hongze/hongze_yb/models/tables/yb_activity_type"
- "hongze/hongze_yb/models/tables/yb_activity_voice"
- "hongze/hongze_yb/models/tables/yb_speaker"
- "hongze/hongze_yb/services/company"
- "hongze/hongze_yb/services/user"
- "hongze/hongze_yb/utils"
- "log"
- "strconv"
- "strings"
- "time"
- )
- // ActivityList 活动列表
- type ActivityList struct {
- yb_activity.ActivityItem // 活动信息
- VoiceList []*yb_activity_voice.YbActivityVoice // 音频列表
- }
- // PageList 活动分页列表
- func PageList(condition string, pars []interface{}, page, limit int, order string, userInfo user.UserInfo) (list []ActivityList, err error) {
- activities, err := yb_activity.GetPageListByWhere(condition, pars, page, limit, order, int(userInfo.UserID))
- if err != nil {
- log.Print(err.Error())
- return
- }
- if activities != nil {
- var activityIds []int
- for _, item := range activities {
- activityIds = append(activityIds, item.ActivityID)
- }
- // 录音
- voices, queryErr := yb_activity_voice.GetVoicesByActivityIds(activityIds)
- if queryErr != nil {
- log.Print(queryErr.Error())
- return
- }
- // 提醒
- reminds, queryErr := yb_activity_remind.GetRemindsByUserIdAndActivityIds(int(userInfo.UserID), activityIds)
- if queryErr != nil {
- log.Print(queryErr.Error())
- return
- }
- remindMap := make(map[int]int, 0)
- for _, remind := range reminds {
- remindMap[remind.ActivityId] = 1
- }
- // 报名
- registers, queryErr := yb_activity_register.GetRegistersByUserIdAndActivityIds(int(userInfo.UserID), activityIds)
- if queryErr != nil {
- log.Print(queryErr.Error())
- return
- }
- registerMap := make(map[int]int, 0)
- for _, register := range registers {
- if register.RegisterState == 1 {
- registerMap[register.ActivityId] = 1
- }
- }
- var temp ActivityList
- for _, activity := range activities {
- temp.ActivityItem = activity
- temp.WeekString = utils.StrDateTimeToWeek(activity.StartTime.Weekday().String())
- temp.ActivityState = getActivityStateByTime(activity.StartTime, activity.EndTime)
- // 音频列表
- var voiceMap []*yb_activity_voice.YbActivityVoice
- for _, voice := range voices {
- if temp.ActivityID == int(voice.ActivityID) {
- voiceMap = append(voiceMap, voice)
- temp.HasPlayBack = 1 // 有回放
- }
- }
- temp.VoiceList = voiceMap
- // 是否有提醒
- _, ok := remindMap[temp.ActivityID]
- if ok {
- temp.HasRemind = 1
- }
- // 是否已报名
- _, ok = registerMap[temp.ActivityID]
- if ok {
- temp.RegisterState = 1
- }
- list = append(list, temp)
- }
- }
- return
- }
- // getActivityStateByTime 根据时间生成活动枚举值
- func getActivityStateByTime(startTime, endTime time.Time) (state int) {
- nowTime := time.Now().Format(utils.FormatDateTime)
- timeNow, _ := time.ParseInLocation(utils.FormatDateTime, nowTime, time.Local)
- if timeNow.Before(endTime) && timeNow.After(startTime) {
- // 进行中
- state = 2
- } else if timeNow.After(endTime) {
- // 已结束
- state = 3
- } else if timeNow.Before(startTime) {
- // 未开始
- state = 1
- }
- return
- }
- // GetActivityDetail 活动详情
- func GetActivityDetail(activityId, userId int) (detail *yb_activity.ActivityDetail, err error) {
- detail, err = yb_activity.GetDetailById(activityId)
- if err != nil {
- if err == gorm.ErrRecordNotFound {
- return
- }
- }
- if detail == nil {
- return
- }
- registeredNum, err := yb_activity_register.CountRegistedNumByActivityId(activityId)
- if err != nil {
- log.Print(err.Error())
- return
- }
- detail.RegisteredNum = int(registeredNum)
- detail.WeekString = utils.StrDateTimeToWeek(detail.StartTime.Weekday().String())
- detail.ActivityState = getActivityStateByTime(detail.StartTime, detail.EndTime)
- _, remindErr := yb_activity_remind.RemindExist(userId, activityId)
- if remindErr != gorm.ErrRecordNotFound {
- detail.HasRemind = 1
- }
- _, registerErr := yb_activity_register.RegisterExist(userId, activityId)
- if registerErr != gorm.ErrRecordNotFound {
- detail.RegisterState = 1
- }
- return
- }
- // CheckActivityPermission 验证用户的活动参与权限
- func CheckActivityPermission(userInfo user.UserInfo, activityId int) (ok bool, permissionCheckInfo company.PermissionCheckInfo, err error) {
- companyId := userInfo.CompanyID
- activity, err := yb_activity.GetOneById(activityId)
- if err != nil {
- if err == gorm.ErrRecordNotFound {
- return
- }
- }
- if activity == nil {
- return
- }
- // 查询活动权限集合
- permissions, err := yb_activity_permission.GetPermissionsByActivityId(activityId)
- if err != nil {
- return
- }
- var permissionIds []int
- for _, item := range permissions {
- pid := int(item.PermissionID)
- permissionIds = append(permissionIds, pid)
- }
- ok, permissionCheckInfo, err = company.CheckPermissionByPermissionIdList2Ficc(companyId, int(userInfo.UserID), permissionIds)
- return
- }
- // GetUserAuthActivityIds 获取用户有权限参与的活动Ids
- func GetUserAuthActivityIds(userInfo user.UserInfo) (acrivityIds []int, err error) {
- // 获取用户有效权限
- productId := 1
- validPermissionIdList, err := company.GetValidPermissionIdListByCompany2ProductId(userInfo.CompanyID, int64(productId))
- if err != nil {
- return
- }
- // 获取用户权限可参与的活动ID
- permissions, err := yb_activity_permission.GetPermissionsByPermissionIds(validPermissionIdList)
- if err != nil {
- return
- }
- for _, v := range permissions {
- acrivityIds = append(acrivityIds, int(v.ActivityID))
- }
- return
- }
- // SyncTeleconferenceOldData 同步旧数据
- func SyncTeleconferenceOldData() (countTotal, countSuccess int, err error) {
- // 查询所有前三个月的电话会
- condition := "enabled = 1"
- pars := make([]interface{}, 0)
- nowTime := time.Now()
- threeMonth := nowTime.AddDate(0, -3, 0).Format(utils.FormatDateTime)
- condition += " AND created_time >= ? AND created_time <= ?"
- pars = append(pars, threeMonth, nowTime)
- teleconferenceList, err := teleconference.GetTeleconferenceList(condition, pars)
- if err != nil {
- return
- }
- countTotal = len(teleconferenceList)
-
- // 取出电话会IDs和报告Ids
- var teleconferenceIds, reportIds, chartPermissionIds []int
- for i := 0; i < len(teleconferenceList); i++ {
- teleconferenceIds = append(teleconferenceIds, int(teleconferenceList[i].TeleconferenceID))
- reportIds = append(reportIds, int(teleconferenceList[i].ReferResearchReportID))
- chartPermissionIds = append(chartPermissionIds, teleconferenceList[i].ReportPermissionID)
- }
- // 报告名称map
- var reportIdNameMap = make(map[int]string, 0)
- reportList, err := research_report.GetListByResearchReportIds(reportIds)
- if err != nil {
- return
- }
- for i := 0; i < len(reportList); i++ {
- reportIdNameMap[int(reportList[i].ResearchReportID)] = reportList[i].ResearchReportName
- }
- // 活动类型map
- var typeNameIdMap = make(map[string]int, 0)
- var typeFirstMap = make(map[int]int, 0)
- var typeIdNameMap = make(map[int]string, 0)
- activityTypeList, err := yb_activity_type.GetTypeList()
- if err != nil {
- return
- }
- for _, activityType := range activityTypeList {
- typeNameIdMap[activityType.ActivityTypeName] = activityType.ActivityTypeID
- typeFirstMap[activityType.ActivityTypeID] = activityType.Pid
- typeIdNameMap[activityType.ActivityTypeID] = activityType.ActivityTypeName
- }
- // 主讲人map
- speakerList, err := yb_speaker.GetSpeakerList()
- if err != nil {
- return
- }
- var speakerNamePicMap = make(map[string]string, 0)
- for i := 0; i < len(speakerList); i++ {
- speakerNamePicMap[speakerList[i].SpeakerName] = speakerList[i].SpeakerHeadPic
- }
- // 音频列表
- voicesList, err := teleconference_video.GetListByTeleconferenceIds(teleconferenceIds)
- if err != nil {
- return
- }
- // 图片权限map
- chartPermissionList, err := chart_permission.GetListByIds(chartPermissionIds)
- if err != nil {
- return
- }
- var chartPermissionIdNameMap = make(map[int]string, 0)
- for i := 0; i < len(chartPermissionList); i++ {
- chartPermissionIdNameMap[int(chartPermissionList[i].ChartPermissionID)] = chartPermissionList[i].PermissionName
- }
- // 开启事务
- tx := global.DEFAULT_MYSQL.Begin()
- defer func() {
- if err != nil {
- tx.Rollback()
- } else {
- tx.Commit()
- }
- }()
- // 遍历数据
- for _, item := range teleconferenceList {
- // 匹配报告名称和link
- reportId := int(item.ReferResearchReportID)
- linkUrl := `https://details.hzinsights.com/ficcReportDetail?research_report_id=`
- if global.CONFIG.Serve.RunMode == `debug` {
- linkUrl = `http://advisoryadmin.brilliantstart.cn/xcx_h5/ficcReportDetail?research_report_id=`
- }
- reportLink := linkUrl + strconv.Itoa(reportId)
- reportName := reportIdNameMap[reportId]
- // 匹配活动类型-中文匹配ID
- var firstActivityTypeId, activityTypeId int
- var firstActivityTypeName, activityTypeName string
- activityTypeId = typeNameIdMap[item.Type]
- if activityTypeId > 0 {
- // 类型匹配到了
- activityTypeName = typeIdNameMap[activityTypeId]
- firstActivityTypeId = typeFirstMap[activityTypeId]
- firstActivityTypeName = typeIdNameMap[firstActivityTypeId]
- }
- // 匹配主讲人头像
- speakerName := item.Speaker
- if speakerName == "" {
- continue
- } else if speakerName == "全体FICC研究员" || speakerName == "弘则FICC研究员" {
- speakerName = "FICC研究员"
- }
- speakerPic := "https://hzstatic.hzinsights.com/static/images/202112/20211210/wn6c3oYKTfT4NbTZgRGflRuIBZaa.png"
- for i := 0; i < len(speakerList); i++ {
- if strings.Contains(speakerName, speakerList[i].SpeakerName) {
- speakerName = speakerList[i].SpeakerName // 存在多个人的情况,则以新表数据为准
- speakerPic = speakerNamePicMap[speakerList[i].SpeakerName]
- break
- }
- }
- backgroundPic := ""
- if firstActivityTypeId == 1 {
- // 电话会议
- backgroundPic = `https://hongze.oss-accelerate.aliyuncs.com/static/images/202112/20211214/nNSTxmH6lxlT0PAp7xcfJJTGX9Gu.png`
- } else {
- // 线下沙龙
- backgroundPic = `https://hongze.oss-accelerate.aliyuncs.com/static/images/202112/20211214/k77gDxvFvuAnYUhF6PU1FOVDHI8O.png`
- }
- // 新增活动数据
- activityInfo := &yb_activity.YbActivity{
- FirstActivityTypeID: firstActivityTypeId,
- FirstActivityTypeName: firstActivityTypeName,
- ActivityTypeID: activityTypeId,
- ActivityTypeName: activityTypeName,
- ActivityName: item.TeleconferenceTitle,
- StartTime: item.StartTime,
- EndTime: item.EndTime,
- Speaker: speakerName,
- SpeakerHeadPic: speakerPic,
- SpeakerBackgroundPic: backgroundPic,
- SingaporeTel: item.SingaporeTelephone,
- ParticipationCode: item.Password,
- MainlandTel: item.Telephone,
- HongKongTel: item.HkTelephone,
- ReportID: reportId,
- ReportLink: reportLink,
- ReportName: reportName,
- Remarks: item.Remark,
- PublishStatus: 1,
- IsSendWxMsg: 1,
- IsSendSalonWxMsg: 1,
- ModifyTime: nowTime,
- CreateTime: nowTime,
- }
- // 开启事务之后的操作要使用tx
- activityCreate := tx.Debug().Create(activityInfo)
- if activityCreate.Error != nil {
- err = errors.New("新增活动失败")
- return
- }
- activityId := activityInfo.ActivityID
- // 5.新增活动音频-音频列表
- for _, voice := range voicesList {
- if int(item.TeleconferenceID) == voice.TeleconferenceID {
- activityVoice := &yb_activity_voice.YbActivityVoice{
- ActivityVoiceID: activityId,
- VoiceURL: voice.VideoURL,
- VoiceName: voice.VideoName,
- VoicePlaySeconds: voice.VideoPlaySeconds,
- CreateTime: nowTime,
- }
- activityVoiceCreate := tx.Debug().Create(activityVoice)
- if activityVoiceCreate.Error != nil {
- err = errors.New("新增活动音频失败")
- return
- }
- }
- }
- // 6.新增活动关联权限-源数据权限仅一个
- activityPermission := &yb_activity_permission.YbActivityPermission{
- ActivityID: uint32(activityId),
- PermissionID: uint32(item.ReportPermissionID),
- PermissionName: chartPermissionIdNameMap[item.ReportPermissionID],
- CreateTime: nowTime,
- }
- activityPermissionCreate := tx.Debug().Create(activityPermission)
- if activityPermissionCreate.Error != nil {
- err = errors.New("新增活动权限失败")
- return
- }
- countSuccess += 1
- }
- return
- }
|