فهرست منبع

处理用户爽约限制优化

xingzai 1 سال پیش
والد
کامیت
2c9eec67a6
6فایلهای تغییر یافته به همراه296 افزوده شده و 36 حذف شده
  1. 40 0
      models/activity_restrict_signup.go
  2. 15 2
      models/activity_signup.go
  3. 8 2
      models/activity_signup_detail.go
  4. 24 1
      models/yidong.go
  5. 180 1
      services/activity.go
  6. 29 30
      services/yidong.go

+ 40 - 0
models/activity_restrict_signup.go

@@ -0,0 +1,40 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_cygx/utils"
+)
+
+// 批量添加
+func AddCygxActivityRestrictSignupList(items []*CygxActivityRestrictSignup) (lastId int64, err error) {
+	lenitems := len(items)
+	if lenitems == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(1, items)
+	return
+}
+
+// 删除
+func DeleteCygxActivityRestrictSignupByUserIds(userIdDelArr []int) (err error) {
+	if len(userIdDelArr) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := ` DELETE FROM cygx_activity_restrict_signup  WHERE  1= 1  AND user_id IN (` + utils.GetOrmInReplace(len(userIdDelArr)) + `)`
+	_, err = o.Raw(sql, userIdDelArr).Exec()
+	return
+}
+
+// 列表
+func GetCygxActivityRestrictSignupList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityRestrictSignup, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_restrict_signup as art WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` LIMIT ?,?  `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}

+ 15 - 2
models/activity_signup.go

@@ -530,8 +530,7 @@ FROM
 	cygx_activity_signup AS s
 	INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id 
 WHERE
-	1 = 1 
-	AND a.is_limit_people > 0 
+	1 = 1
 	AND s.is_meeting = 0 
 	AND a.is_submit_meeting = 1
 	AND a.activity_id = ?`
@@ -625,3 +624,17 @@ func GetActivitySignupList(condition string, pars []interface{}) (items []*CygxA
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
+
+// GetCygxCygxActivitySignupList 获取报名列表信息
+func GetActivitySignupInnerActivityList(condition string, pars []interface{}) (items []*CygxActivitySignup, err error) {
+	sql := `SELECT
+			*
+		FROM
+			cygx_activity_signup AS v
+			INNER JOIN cygx_activity as a 
+		WHERE
+			1 = 1 	` + condition
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 8 - 2
models/activity_signup_detail.go

@@ -35,7 +35,7 @@ type CygxActivitySignupDetail struct {
 	CrmCompanyMapStatusId int       `description:"转换后的对应状态信息:1=正式客户, 2=曾使用客户, 3=其他"`
 }
 
-//获取当天已结束的活动
+// 获取当天已结束的活动
 func GetActivitySattusToComplete() (items []*CygxActivity, err error) {
 	defer func() {
 		if err != nil {
@@ -76,7 +76,7 @@ func GetSignupDetailList(condition string, pars []interface{}) (list []*CygxActi
 	return
 }
 
-//添加
+// 添加
 func AddCygxActivitySignupDetail(items []*CygxActivitySignupDetail) (err error) {
 	o, err := orm.NewOrm().Begin()
 	if err != nil {
@@ -148,6 +148,9 @@ func UpdateActivitySignupDetailMultiByYiDong(items []*CygxActivitySignupDetail)
 	p, err := o.Raw(` UPDATE cygx_activity_signup_detail SET 
 							first_meeting_time = ?,
 							last_meeting_time = ?,
+							meeting_status_str = ?,
+							position = ?,
+							real_name = ?,
 							duration = ?,
 							is_meeting = ?
 							WHERE mobile = ? AND activity_id = ? `).Prepare()
@@ -161,6 +164,9 @@ func UpdateActivitySignupDetailMultiByYiDong(items []*CygxActivitySignupDetail)
 		_, err = p.Exec(
 			v.FirstMeetingTime,
 			v.LastMeetingTime,
+			v.MeetingStatusStr,
+			v.Position,
+			v.RealName,
 			v.Duration,
 			v.IsMeeting,
 			v.Mobile, v.ActivityId)

+ 24 - 1
models/yidong.go

@@ -96,7 +96,7 @@ type ApifoxModaluser struct {
 	Timestamp int64        `json:"timestamp"`
 }
 
-type Resultuser struct {
+type Resultuser111 struct {
 	DeviceType      *int64 `json:"deviceType"`                // 参会方式,1-PC,2-Mac,3-Android,4-IOS,5-Web,6-iPad,7-Android Pad,8-小程序
 	Duration        string `json:"duration"`                  // 参会时长
 	EndTime         string `json:"endTime"`                   // 最后退会时间
@@ -107,6 +107,29 @@ type Resultuser struct {
 	UserID          string `json:"userId,omitempty"`          // 用户id
 }
 
+type Resultuser struct {
+	DeviceType        string `json:"deviceType"`        // 参会方式,1-PC,2-Mac,3-Android,4-IOS,5-Web,6-iPad,7-Android Pad,8-小程序,0-PSTN
+	Duration          string `json:"duration"`          // 云会议参会时长
+	DurationInteract  string `json:"durationInteract"`  // 互动交流参会时长
+	DurationLive      string `json:"durationLive"`      // 直播参会时长
+	DurationReview    string `json:"durationReview"`    // 回看参会时长
+	EndTime           string `json:"endTime"`           // 云会议最后退会时间
+	EndTimeInteract   string `json:"endTimeInteract"`   // 互动交流最后退会时间
+	EndTimeLive       string `json:"endTimeLive"`       // 直播最后退会时间
+	EndTimeReview     string `json:"endTimeReview"`     // 回看最后退会时间
+	ID                string `json:"id"`                // 主键id
+	JobName           string `json:"jobName"`           // 职务
+	MobileCountryCode string `json:"mobileCountryCode"` // 手机号国际区号码
+	PersonName        string `json:"personName"`        // 姓名
+	PersonTelephone   string `json:"personTelephone"`   // 用户手机号
+	StartTime         string `json:"startTime"`         // 云会议最早入会时间
+	StartTimeInteract string `json:"startTimeInteract"` // 互动交流最早入会时间
+	StartTimeLive     string `json:"startTimeLive"`     // 直播最早入会时间
+	StartTimeReview   string `json:"startTimeReview"`   // 回看最早入会时间
+	Status            string `json:"status"`            // 状态,D表示被删除
+	UserID            string `json:"userId,omitempty"`  // 用户id
+}
+
 type ApifoxModalUserTgc struct {
 	Result  结果Map `json:"result"`  // 结果Map
 	Success bool  `json:"success"` // 成功标识,可作为请求是否成功标识

+ 180 - 1
services/activity.go

@@ -1571,7 +1571,7 @@ func ActivityAttendanceDetail(cont context.Context) (err error) {
 }
 
 // 判断是否加入黑名单
-func AddCygxActivityRestrictSignupByAdmin(activityId int) (err error) {
+func AddCygxActivityRestrictSignupByAdmin111(activityId int) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println(err)
@@ -1679,6 +1679,185 @@ func AddCygxActivityRestrictSignupByAdmin(activityId int) (err error) {
 	return
 }
 
+// 查研观向处理活动用户限制报名
+func AddCygxActivityRestrictSignupByAdmin(activityId int) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go utils.SendAlarmMsg("查研观向处理活动用户限制报名失败,Err:"+err.Error()+"activityId"+strconv.Itoa(activityId), 3)
+		}
+	}()
+	activityInfo, e := models.GetAddActivityInfoById(activityId)
+	if e != nil {
+		err = errors.New("GetAddActivityInfoById" + e.Error())
+		return
+	}
+	if activityInfo == nil {
+		return
+	}
+	//不限制报名的不做爽约限制处理
+	//if activityInfo.IsLimitPeople > 0 {
+	//total, err := cygx.GetActivitySignupNomeetingCount(activityId)
+
+	if err != nil {
+		return
+	}
+	mobileList, _ := models.GetUserMeetingMobile(activityId)
+	var userIdArr []int
+	if len(mobileList) > 0 {
+		for _, v := range mobileList {
+			userIdArr = append(userIdArr, v.UserId)
+		}
+		lenuserIdArr := len(userIdArr)
+		var condition string
+		var pars []interface{}
+		condition = ` AND user_id IN (` + utils.GetOrmInReplace(lenuserIdArr) + `)`
+
+		pars = append(pars, userIdArr)
+		restrictSignupList, e := models.GetCygxActivityRestrictSignupList(condition, pars, 0, 9999)
+		if e != nil {
+			err = errors.New("GetCygxActivityRestrictSignupList" + e.Error())
+			return
+		}
+		//获取这些用户是否被加入到限制报名了
+		maptotalRestrict := make(map[int]bool)
+		for _, v := range restrictSignupList {
+			maptotalRestrict[v.UserId] = true
+		}
+
+		pars = make([]interface{}, 0)
+		condition = `   AND a.is_limit_people  = 1  AND  v.is_meeting = 0 	AND  v.do_fail_type = 0   AND  v.user_id IN (` + utils.GetOrmInReplace(lenuserIdArr) + `)`
+		pars = append(pars, userIdArr)
+		listSignup, e := models.GetActivitySignupInnerActivityList(condition, pars)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetActivitySignupInnerActivityList" + e.Error())
+			return
+		}
+		mapNomeet := make(map[int]int)
+		if len(listSignup) > 0 {
+			for _, v := range listSignup {
+				mapNomeet[v.UserId]++
+			}
+		}
+		var userIdDelArr []int
+		for _, v := range mobileList {
+			//如果加入了爽约限制但是爽约次数少于3条就删除爽约记录
+			if maptotalRestrict[v.UserId] && mapNomeet[v.UserId] < 3 {
+				userIdDelArr = append(userIdDelArr, v.UserId)
+			}
+		}
+		if len(userIdDelArr) > 0 {
+			e = models.DeleteCygxActivityRestrictSignupByUserIds(userIdDelArr)
+			if e != nil {
+				err = errors.New("DeleteCygxActivityRestrictSignupByUserIds" + e.Error())
+				return
+			}
+		}
+	}
+	//if total == 0 {
+	//	return
+	//}
+	//}
+	list, e := models.GetActivitySignupNomeetingCountList(activityId)
+	if e != nil {
+		err = errors.New("GetActivitySignupNomeetingCountList" + e.Error())
+		return
+	}
+	var userIdSiginArr []int
+	var items []*models.CygxActivitySignupBreak
+	for _, v := range list {
+		userIdSiginArr = append(userIdSiginArr, v.UserId)
+		//添加爽约记录
+		item := new(models.CygxActivitySignupBreak)
+		item.UserId = v.UserId
+		item.ActivityId = v.ActivityId
+		item.CreateTime = time.Now()
+		item.Mobile = v.Mobile
+		item.Email = v.Email
+		item.CompanyId = v.CompanyId
+		item.CompanyName = v.CompanyName
+		item.RealName = v.RealName
+		item.SellerName = v.SellerName
+		items = append(items, item)
+	}
+	if len(list) == 0 {
+		return
+	}
+
+	var itemsRestrict []*models.CygxActivityRestrictSignup
+	maptotalRestrict := make(map[int]bool)
+	lenuserIdSiginArr := len(userIdSiginArr)
+	var condition string
+	var pars []interface{}
+	condition = ` AND user_id IN (` + utils.GetOrmInReplace(lenuserIdSiginArr) + `)`
+	pars = append(pars, userIdSiginArr)
+	restrictSignupList, e := models.GetCygxActivityRestrictSignupList(condition, pars, 0, 9999)
+	if e != nil {
+		err = errors.New("GetCygxActivityRestrictSignupList" + e.Error())
+		return
+	}
+	//获取这些用户是否被加入到限制报名了
+	for _, v := range restrictSignupList {
+		maptotalRestrict[v.UserId] = true
+	}
+
+	pars = make([]interface{}, 0)
+	condition = `    AND a.is_limit_people  = 1  AND  v.is_meeting = 0 	AND  v.do_fail_type = 0  AND user_id IN (` + utils.GetOrmInReplace(lenuserIdSiginArr) + `)`
+	pars = append(pars, userIdSiginArr)
+	listSignup, e := models.GetActivitySignupInnerActivityList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetActivitySignupInnerActivityList" + e.Error())
+		return
+	}
+	mapNomeet := make(map[int]int)
+	if len(listSignup) > 0 {
+		for _, v := range listSignup {
+			mapNomeet[v.UserId]++
+		}
+	}
+
+	for _, v := range mobileList {
+		//如果加入了爽约限制但是爽约次数少于3条就删除爽约记录
+		if !maptotalRestrict[v.UserId] && mapNomeet[v.UserId] >= 3 {
+			itemRestrict := new(models.CygxActivityRestrictSignup)
+			itemRestrict.UserId = v.UserId
+			itemRestrict.CreateTime = time.Now()
+			itemRestrict.Mobile = v.Mobile
+			itemRestrict.Email = v.Email
+			itemRestrict.CompanyId = v.CompanyId
+			itemRestrict.CompanyName = v.CompanyName
+			itemRestrict.IsRestrict = 1
+			itemsRestrict = append(itemsRestrict, itemRestrict)
+		}
+	}
+
+	err = models.DeleteCygxActivitySignupBreakById(activityId)
+	if err != nil {
+		err = errors.New("DeleteCygxActivitySignupBreakById" + err.Error())
+		return
+	}
+
+	//添加爽约记录
+	if len(items) > 0 {
+		_, e = models.AddCygxActivitySignupBreakList(items)
+		if e != nil {
+			err = errors.New("AddCygxActivitySignupBreakList, Err: " + e.Error())
+			return
+		}
+	}
+
+	//添加报名限制
+	if len(itemsRestrict) > 0 {
+		_, e = models.AddCygxActivityRestrictSignupList(itemsRestrict)
+		if e != nil {
+			err = errors.New("AddCygxActivityRestrictSignupList, Err: " + e.Error())
+			return
+		}
+	}
+
+	return
+}
+
 // 判断预约纪要按钮是否显示
 func IsShowAppointment(activityTypeId int, chartPermissionName string) (isShowAppointment bool) {
 	if activityTypeId == 1 || activityTypeId == 2 || activityTypeId == 3 || activityTypeId == 4 {

+ 29 - 30
services/yidong.go

@@ -645,7 +645,7 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 				if vresult.PersonTelephone == "" {
 					continue
 				}
-				if vresult.EndTime != "" {
+				if vresult.Duration != "" || vresult.DurationReview != "" {
 					mobiles = append(mobiles, vresult.PersonTelephone)
 					//err = models.UpdateCygxActivitySignupisMeet(v.ActivityId, vresult.PersonTelephone)
 					//if err != nil {
@@ -653,11 +653,22 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 					//	return err
 					//}
 					var itemDetail = new(models.CygxActivitySignupDetail)
+					if vresult.Duration != "" {
+						itemDetail.FirstMeetingTime = vresult.StartTime
+						itemDetail.LastMeetingTime = vresult.EndTime
+						itemDetail.Duration = vresult.Duration
+						itemDetail.MeetingStatusStr = "直播"
+					} else if vresult.DurationReview != "" {
+						itemDetail.FirstMeetingTime = vresult.StartTimeReview
+						itemDetail.LastMeetingTime = vresult.EndTimeReview
+						itemDetail.Duration = vresult.DurationReview
+						itemDetail.MeetingStatusStr = "回放"
+					}
+					itemDetail.Position = vresult.JobName
+					itemDetail.RealName = vresult.PersonName
+
 					itemDetail.Mobile = vresult.PersonTelephone
 					itemDetail.OutboundMobile = vresult.PersonTelephone
-					itemDetail.FirstMeetingTime = vresult.StartTime
-					itemDetail.LastMeetingTime = vresult.EndTime
-					itemDetail.Duration = vresult.Duration
 					itemDetail.IsMeeting = 1
 					itemDetail.ActivityId = v.ActivityId
 					mapActivityAttendanceDetail[vresult.PersonTelephone] = new(models.CygxActivityAttendanceDetail)
@@ -671,6 +682,20 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 				item.ActivityId = v.ActivityId
 				item.Mobile = vresult.PersonTelephone
 				if vresult.Duration != "" {
+					if vresult.Duration != "" {
+						item.FirstMeetingTime = vresult.StartTime
+						item.LastMeetingTime = vresult.EndTime
+						item.Duration = vresult.Duration
+						item.MeetingStatusStr = "直播"
+					} else if vresult.DurationReview != "" {
+						item.FirstMeetingTime = vresult.StartTimeReview
+						item.LastMeetingTime = vresult.EndTimeReview
+						item.Duration = vresult.DurationReview
+						item.MeetingStatusStr = "回放"
+					}
+					item.Position = vresult.JobName
+					item.RealName = vresult.PersonName
+
 					item.FirstMeetingTime = vresult.StartTime
 					item.LastMeetingTime = vresult.EndTime
 					item.Duration = vresult.Duration
@@ -699,32 +724,6 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 					fmt.Println("UpdateActivitySignupDetailMultiByYiDong Err:", err.Error())
 					return err
 				}
-				//var condition string
-				//var pars []interface{}
-				//condition = ` AND do_fail_type = 0 AND mobile IN (` + utils.GetOrmInReplace(lenmobiles) + `) AND activity_id = ?`
-				//pars = append(pars, mobiles, v.ActivityId)
-				//listSignup, e := models.GetActivitySignupList(condition, pars)
-				//if e != nil {
-				//	err = errors.New("GetActivitySignupList, Err: " + e.Error())
-				//	return err
-				//}
-
-				//for _, vSignup := range listSignup {
-				//	item := new(models.CygxActivityAttendanceDetail)
-				//	item.ActivityId = vSignup.ActivityId
-				//	item.RealName = vSignup.RealName
-				//	item.Mobile = vSignup.Mobile
-				//	item.CompanyName = vSignup.CompanyName
-				//	if mapActivityAttendanceDetail[vSignup.Mobile] != nil {
-				//		item.FirstMeetingTime = mapActivityAttendanceDetail[vSignup.Mobile].FirstMeetingTime
-				//		item.LastMeetingTime = mapActivityAttendanceDetail[vSignup.Mobile].LastMeetingTime
-				//		item.Duration = mapActivityAttendanceDetail[vSignup.Mobile].Duration
-				//		item.IsMeetingStr = 1
-				//		mobileStr += "'" + vSignup.Mobile + "'" + ","
-				//	}
-				//	item.CreateTime = time.Now()
-				//	needAddAttendanc = append(needAddAttendanc, item)
-				//}
 			}
 
 			mobileStr = strings.TrimRight(mobileStr, ",")