瀏覽代碼

add: 1.已关注弘则研究公众号用户自动登录 2.同步前三个月所有活动50%

hsun 3 年之前
父節點
當前提交
3a8a3bd997

+ 16 - 1
controller/activity/activity.go

@@ -28,7 +28,7 @@ import (
 // @Param has_permission query int false "是否查看仅有权限的 0-否 1-是"
 // @Param page query int false "当前页码"
 // @Param limit query int false "每页数量"
-// @Success 200 {object} []yb_activity.ActivityItem
+// @Success 200 {object} []activity.ActivityList
 // @failure 400 {string} string "活动获取失败"
 // @Router /activity/getPageList [get]
 func GetPageList(c *gin.Context) {
@@ -246,4 +246,19 @@ func calcuDrawXandY(drawText string, fontSize, canvasLength, canvasWidth int) (x
 	}
 
 	return
+}
+
+// SyncOldActivityData 同步三个月前电话会数据
+func SyncOldActivityData(c *gin.Context) {
+	authCode := c.DefaultQuery("auth_code", "0")
+	if authCode != "10086" {
+		response.Fail("无权操作", c)
+		return
+	}
+	countSuccess, err := activity.SyncTeleconferenceOldData()
+	if err != nil {
+		response.Fail("同步失败" + err.Error(), c)
+		return
+	}
+	response.OkData("同步成功", "同步成功数:" + strconv.Itoa(countSuccess), c)
 }

+ 9 - 0
models/tables/teleconference/query.go

@@ -0,0 +1,9 @@
+package teleconference
+
+import "hongze/hongze_yb/global"
+
+// GetTeleconferenceList 获取电话会列表
+func GetTeleconferenceList(condition string, pars []interface{}) (list []*Teleconference, err error) {
+	err = global.DEFAULT_MYSQL.Model(Teleconference{}).Where(condition, pars...).Scan(&list).Error
+	return
+}

+ 76 - 0
models/tables/teleconference/teleconference.go

@@ -0,0 +1,76 @@
+package teleconference
+
+import (
+	"time"
+)
+
+// Teleconference 电话会
+type Teleconference struct {
+	TeleconferenceID      uint64    `gorm:"primaryKey;column:teleconference_id;type:bigint(20) unsigned;not null" json:"-"`                     // 电话会id
+	TeleconferenceTitle   string    `gorm:"index:teleconference_title;column:teleconference_title;type:varchar(32)" json:"teleconferenceTitle"` // 电话会标题
+	Type                  string    `gorm:"index:type;column:type;type:varchar(30);not null" json:"type"`                                       // 电话会类型
+	Speaker               string    `gorm:"column:speaker;type:varchar(30)" json:"speaker"`
+	Telephone             string    `gorm:"column:telephone;type:varchar(30)" json:"telephone"`                                                // 拨入电话
+	Password              string    `gorm:"column:password;type:varchar(30)" json:"password"`                                                  // 参会人密码
+	StartTime             time.Time `gorm:"column:start_time;type:datetime" json:"startTime"`                                                  // 会议开始时间
+	EndTime               time.Time `gorm:"column:end_time;type:datetime" json:"endTime"`                                                      // 会议结束时间
+	ReferResearchReportID int64     `gorm:"column:refer_research_report_id;type:bigint(20)" json:"referResearchReportId"`                      // 关联研报id
+	Enabled               int8      `gorm:"index:enabled;column:enabled;type:tinyint(1);default:1" json:"enabled"`                             // 是否删除,1表示已删除,0表示未删除
+	CreatedTime           time.Time `gorm:"index:created_time;column:created_time;type:datetime;default:CURRENT_TIMESTAMP" json:"createdTime"` // 创建时间
+	LastUpdatedTime       time.Time `gorm:"index:last_updated_time;column:last_updated_time;type:timestamp;not null;default:CURRENT_TIMESTAMP" json:"lastUpdatedTime"`
+	ReportPermissionID    int       `gorm:"column:report_permission_id;type:int(10);default:1" json:"reportPermissionId"`   // 权限id,用来查询分类
+	SingaporeTelephone    string    `gorm:"column:singapore_telephone;type:varchar(30)" json:"singaporeTelephone"`          // 新加坡拨入电话
+	VideoURL              string    `gorm:"column:video_url;type:varchar(500)" json:"videoUrl"`                             // 音频文件URL
+	VideoName             string    `gorm:"column:video_name;type:varchar(125);default:''" json:"videoName"`                // 音频文件名称
+	VideoPlaySeconds      string    `gorm:"column:video_play_seconds;type:varchar(255);default:''" json:"videoPlaySeconds"` // 音频播放时长
+	Remark                string    `gorm:"column:remark;type:varchar(255);default:''" json:"remark"`                       // 简介
+	HkTelephone           string    `gorm:"column:hk_telephone;type:varchar(30)" json:"hkTelephone"`                        // 香港拨入电话
+}
+
+// TableName get sql table name.获取数据库表名
+func (m *Teleconference) TableName() string {
+	return "teleconference"
+}
+
+// TeleconferenceColumns get sql column name.获取数据库列名
+var TeleconferenceColumns = struct {
+	TeleconferenceID      string
+	TeleconferenceTitle   string
+	Type                  string
+	Speaker               string
+	Telephone             string
+	Password              string
+	StartTime             string
+	EndTime               string
+	ReferResearchReportID string
+	Enabled               string
+	CreatedTime           string
+	LastUpdatedTime       string
+	ReportPermissionID    string
+	SingaporeTelephone    string
+	VideoURL              string
+	VideoName             string
+	VideoPlaySeconds      string
+	Remark                string
+	HkTelephone           string
+}{
+	TeleconferenceID:      "teleconference_id",
+	TeleconferenceTitle:   "teleconference_title",
+	Type:                  "type",
+	Speaker:               "speaker",
+	Telephone:             "telephone",
+	Password:              "password",
+	StartTime:             "start_time",
+	EndTime:               "end_time",
+	ReferResearchReportID: "refer_research_report_id",
+	Enabled:               "enabled",
+	CreatedTime:           "created_time",
+	LastUpdatedTime:       "last_updated_time",
+	ReportPermissionID:    "report_permission_id",
+	SingaporeTelephone:    "singapore_telephone",
+	VideoURL:              "video_url",
+	VideoName:             "video_name",
+	VideoPlaySeconds:      "video_play_seconds",
+	Remark:                "remark",
+	HkTelephone:           "hk_telephone",
+}

+ 9 - 0
models/tables/user_record/update.go

@@ -46,3 +46,12 @@ func ModifySessionKeyByOpenid(openId, sessionKey string) (err error) {
 	}).Error
 	return
 }
+
+// UnBindUserRecordByUnionId 根据unionId和平台信息解除绑定用户关系
+func UnBindUserRecordByUnionId(unionId string, platform int) (err error) {
+	err = global.DEFAULT_MYSQL.Model(UserRecord{}).Select("UserID", "BindAccount").Where("union_id = ? AND create_platform = ?", unionId, platform).Updates(UserRecord{
+		UserID:      0,
+		BindAccount: "",
+	}).Error
+	return
+}

+ 9 - 0
models/tables/yb_activity/create.go

@@ -0,0 +1,9 @@
+package yb_activity
+
+import "hongze/hongze_yb/global"
+
+func (activityInfo *YbActivity) Create() (activityId int, err error) {
+	err = global.DEFAULT_MYSQL.Create(activityInfo).Error
+	activityId = activityInfo.ActivityID
+	return
+}

+ 8 - 0
models/tables/yb_activity_permission/create.go

@@ -0,0 +1,8 @@
+package yb_activity_permission
+
+import "hongze/hongze_yb/global"
+
+func (item *YbActivityPermission) Create() (err error) {
+	err = global.DEFAULT_MYSQL.Create(item).Error
+	return
+}

+ 8 - 0
models/tables/yb_activity_voice/create.go

@@ -0,0 +1,8 @@
+package yb_activity_voice
+
+import "hongze/hongze_yb/global"
+
+func (item *YbActivityVoice) Create() (err error) {
+	err = global.DEFAULT_MYSQL.Create(item).Error
+	return
+}

+ 2 - 0
routers/activity.go

@@ -22,5 +22,7 @@ func InitActivity(r *gin.Engine) {
 	rGroup2 := r.Group("activity")
 	{
 		rGroup2.GET("/getActivityShareImg", activity.GetActivityShareImg)
+		// 同步三个月前活动
+		rGroup2.GET("/syncOldActivity", activity.SyncOldActivityData)
 	}
 }

+ 121 - 17
services/activity/activity.go

@@ -2,6 +2,8 @@ package activity
 
 import (
 	"gorm.io/gorm"
+	"hongze/hongze_yb/global"
+	"hongze/hongze_yb/models/tables/teleconference"
 	"hongze/hongze_yb/models/tables/yb_activity"
 	"hongze/hongze_yb/models/tables/yb_activity_permission"
 	"hongze/hongze_yb/models/tables/yb_activity_register"
@@ -11,13 +13,18 @@ import (
 	"hongze/hongze_yb/services/user"
 	"hongze/hongze_yb/utils"
 	"log"
+	"strconv"
 	"time"
 )
 
-var WeekDay = [7]string{"周日", "周一", "周二", "周三", "周四", "周五", "周六"}
+// 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 []yb_activity.ActivityItem, err error) {
+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())
@@ -35,10 +42,6 @@ func PageList(condition string, pars []interface{}, page, limit int, order strin
 			log.Print(queryErr.Error())
 			return
 		}
-		voiceMap := make(map[int]int, 0)
-		for _, voice := range voices {
-			voiceMap[int(voice.ActivityID)] = 1
-		}
 		// 提醒
 		reminds, queryErr := yb_activity_remind.GetRemindsByUserIdAndActivityIds(int(userInfo.UserID), activityIds)
 		if queryErr != nil {
@@ -62,24 +65,27 @@ func PageList(condition string, pars []interface{}, page, limit int, order strin
 			}
 		}
 
-		var temp yb_activity.ActivityItem
+		var temp ActivityList
 		for _, activity := range activities {
-			temp = activity
-			temp.WeekString = WeekDay[activity.StartTime.Weekday()]
+			temp.ActivityItem = activity
+			temp.WeekString = utils.StrDateTimeToWeek(activity.StartTime.Weekday().String())
 			temp.ActivityState = getActivityStateByTime(activity.StartTime, activity.EndTime)
-			// 是否有回放
-			tempActivity := activity
-			_, ok := voiceMap[tempActivity.ActivityID]
-			if ok {
-				temp.HasPlayBack = 1
+			// 音频列表
+			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[tempActivity.ActivityID]
+			_, ok := remindMap[temp.ActivityID]
 			if ok {
 				temp.HasRemind = 1
 			}
 			// 是否已报名
-			_, ok = registerMap[tempActivity.ActivityID]
+			_, ok = registerMap[temp.ActivityID]
 			if ok {
 				temp.RegisterState = 1
 			}
@@ -123,7 +129,7 @@ func GetActivityDetail(activityId, userId int) (detail *yb_activity.ActivityDeta
 		return
 	}
 	detail.RegisteredNum = int(registeredNum)
-	detail.WeekString = WeekDay[detail.StartTime.Weekday()]
+	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 {
@@ -179,5 +185,103 @@ func GetUserAuthActivityIds(userInfo user.UserInfo) (acrivityIds []int, err erro
 		acrivityIds = append(acrivityIds, int(v.ActivityID))
 	}
 
+	return
+}
+
+// SyncTeleconferenceOldData 同步旧数据
+func SyncTeleconferenceOldData() (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
+	}
+
+	// 开启事务
+
+
+	// 遍历数据
+	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)
+
+		// 匹配活动类型
+
+		// 匹配主讲人信息
+		/*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: 0,
+			FirstActivityTypeName: "",
+			ActivityTypeID: 0,
+			ActivityTypeName: "",
+			ActivityName: item.TeleconferenceTitle,
+			StartTime: item.StartTime,
+			EndTime: item.EndTime,
+			Speaker: "",
+			SpeakerHeadPic: "",
+			SpeakerBackgroundPic: "",
+			SingaporeTel: "",
+			ParticipationCode: item.Password,
+			MainlandTel: item.Telephone,
+			HongKongTel: item.HkTelephone,
+			ReportID: reportId,
+			ReportLink: reportLink,
+			ReportName: "",
+			Remarks: item.Remark,
+			PublishStatus: 1,
+			IsSendWxMsg: 1,
+			IsSendSalonWxMsg: 1,
+			ModifyTime: nowTime,
+			CreateTime: nowTime,
+		}
+		activityId, tempErr := activityInfo.Create()
+		if tempErr != nil {
+			return
+		}
+
+		// 5.新增活动音频-音频列表
+		activityVoice := &yb_activity_voice.YbActivityVoice{
+			ActivityVoiceID: activityId,
+			VoiceURL: item.VideoURL,
+			VoiceName: item.VideoName,
+			VoicePlaySeconds: item.VideoPlaySeconds,
+			CreateTime: nowTime,
+		}
+		tempErr = activityVoice.Create()
+		if tempErr != nil {
+			return
+		}
+
+		// 6.新增活动关联权限-源数据权限仅一个
+		activityPermission := &yb_activity_permission.YbActivityPermission{
+			ActivityID: uint32(activityId),
+			PermissionID: uint32(item.ReportPermissionID),
+			PermissionName: "",
+			CreateTime: nowTime,
+		}
+		tempErr = activityPermission.Create()
+		if tempErr != nil {
+			return
+		}
+	}
+
 	return
 }

+ 67 - 20
services/user/user.go

@@ -116,17 +116,57 @@ func GetWxUserItemByMobile(mobile string, platform int) (userInfo UserInfo, err
 
 // GetWxUserItemByUnionId 根据用户unionid和平台id获取用户信息
 func GetWxUserItemByUnionId(unionId string, platform int) (userInfo UserInfo, err error) {
-	//获取用户信息
-	userRecord, err := user_record.GetByUnionID(unionId, platform)
-	if err != nil {
+	// 获取用户信息
+	userRecord, userRecordErr := user_record.GetByUnionID(unionId, platform)
+	if userRecordErr != nil {
+		if userRecordErr == utils.ErrNoRow {
+			err = ERR_NO_USER_RECORD
+			return
+		} else {
+			err = userRecordErr
+			return
+		}
+	}
+
+	// 该union在系统中没有关联关系
+	if userRecord == nil {
+		err = ERR_NO_USER_RECORD
 		return
 	}
-	wxUser, err := wx_user.GetByUserId(userRecord.UserID)
-	if err != nil {
+
+	// 该openid没有绑定用户
+	if userRecord.UserID <= 0 {
+		err = ERR_USER_NOT_BIND
+		item := new(wx_user.WxUser)
+		//格式化返回用户数据
+		userInfo = formatWxUserAndUserRecord(item, userRecord)
 		return
 	}
-	//格式化返回用户数据
-	userInfo = formatWxUserAndUserRecord(wxUser, userRecord)
+
+	item, wxUserErr := wx_user.GetByUserId(userRecord.UserID)
+	if wxUserErr != nil {
+		err = wxUserErr
+
+		// 如果是找不到数据,那么可能是该用户被删除了,但是user_record没有删除对应的关系
+		if wxUserErr == utils.ErrNoRow {
+			// 用户被删除了,但是user_record没有删除对应的关系,那么去解除绑定
+			userUnbindErr := user_record.UnBindUserRecordByUnionId(unionId, platform)
+			if userUnbindErr != nil {
+				err = userUnbindErr
+				return
+			}
+			// 返回状态为用户未绑定
+			err = ERR_USER_NOT_BIND
+			item := new(wx_user.WxUser)
+			// 格式化返回用户数据
+			userInfo = formatWxUserAndUserRecord(item, userRecord)
+			return
+		}
+		return
+	}
+	// 格式化返回用户数据
+	userInfo = formatWxUserAndUserRecord(item, userRecord)
+
 	return
 }
 
@@ -173,6 +213,7 @@ func WxLogin(wxPlatform int, wxSession auth.ResCode2Session) (token string, user
 	sessionKey := wxSession.SessionKey
 
 	needUpdateSessionKey := true //是否更新sessionKey
+
 QUERY_WX_USER:
 	wxUser, wxUserErr := GetWxUserItemByOpenId(openId)
 	if wxUserErr == ERR_NO_USER_RECORD { //没有用户openid记录
@@ -198,17 +239,31 @@ QUERY_WX_USER:
 		_ = user_record.ModifySessionKeyByOpenid(openId, sessionKey)
 	}
 
-	//如果已经登录注册绑定的情况下
+	// 如果已经登录注册绑定的情况下/或者首次登录且为弘则研究公众号用户
 	if wxUserErr == nil {
 		userId = int(wxUser.UserID)
 
-		//if wxUserInfo != nil {
-		//	go models.ModifyUserRecordInfo(openId, wxUserInfo.Nickname, wxUserInfo.Headimgurl, wxUserInfo.City, wxUserInfo.Province, wxUserInfo.Country, wxUserInfo.Sex, userId)
-		//}
-
 		// 如果账户有绑定了手机号或者邮箱,那么标记为已绑定
 		if wxUser.Mobile != "" || wxUser.Email != "" {
 			isBind = true
+		} else {
+			// 未绑定则去查询是否为弘则研究公众号用户,有相应的手机号邮箱信息则自动绑定,无则进入下一步
+			platformUser, platformErr := GetWxUserItemByUnionId(unionId, 1)
+			if platformErr == nil {
+				// 当公众号用户存在时
+				if platformUser.Mobile != "" || platformUser.Email != "" {
+					// 有手机号邮箱绑定信息则自动绑定,无则进入下一步
+					wxUser.Mobile = platformUser.Mobile
+					wxUser.Email = platformUser.Email
+					var wxUserUpdateCols = []string{"Mobile", "Email"}
+					updateErr := wxUser.Update(wxUserUpdateCols)
+					if updateErr != nil {
+						err = errors.New("用户信息更新失败")
+						return
+					}
+					isBind = true
+				}
+			}
 		}
 	}
 
@@ -225,14 +280,6 @@ QUERY_WX_USER:
 		token = utils.MD5(openId) + utils.MD5(timeUnixStr)
 		//新增session
 		{
-			//session := new(session.Session)
-			//session.OpenID = openId
-			//session.UserID = int64(userId)
-			//session.CreatedTime = time.Now()
-			//session.LastUpdatedTime = time.Now()
-			//session.ExpireTime = time.Now().AddDate(0, 3, 0)
-			//session.AccessToken = token
-
 			sessionItem := &session.Session{
 				OpenID:          openId,
 				UserID:          int64(userId),