Browse Source

进门财经到会优化

xingzai 1 year ago
parent
commit
0365be941d

+ 21 - 0
models/activity.go

@@ -66,6 +66,8 @@ type CygxActivity struct {
 	YidongSignUpStart       string    `description:"易董活动截止时间"` // 报名开始时间,适应于报名审核后可入会,为空表示不限制报名时间
 	IsExternalLabel         int       `description:"是否为外部资源 1是,0否"`
 	YidongActivityIdByCygx  string    `description:"通过查研观向建会易董返回的活动ID"`
+	JmcjRoadshowTitle       string    `description:"进门财经的活动标题"`
+	JmcjActivityId          string    `description:"进门财经的活动ID"`
 }
 
 type Activity struct {
@@ -1214,3 +1216,22 @@ func GetActivityLabelListAllNoLimit(condition, sortTime string, pars []interface
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
+
+// 批量修改弘则活动与进门财经的一个活动关联
+func UpdateJmcjActivityIdGroup(items map[int]string) (err error) {
+	o := orm.NewOrm()
+	p, err := o.Raw("UPDATE cygx_activity SET jmcj_activity_id = ? WHERE activity_id = ? AND jmcj_activity_id= '' ").Prepare()
+	if err != nil {
+		return
+	}
+	defer func() {
+		_ = p.Close() // 别忘记关闭 statement
+	}()
+	for k, v := range items {
+		_, err = p.Exec(v, k)
+		if err != nil {
+			return
+		}
+	}
+	return
+}

+ 27 - 22
models/activity_attendance_detail.go

@@ -3,6 +3,7 @@ package models
 import (
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_cygx/utils"
 	"time"
 )
 
@@ -83,28 +84,6 @@ func AddCygxActivityAttendanceDetail(item *CygxActivityAttendanceDetail) (lastId
 	return
 }
 
-type RoadshowData struct {
-	Id                    int    `orm:"column(id);pk;"description:"主键ID"`
-	Company               string `description:"公司名称"`
-	UserName              string `description:"用户名"`
-	UserPhone             string `description:"手机号"`
-	UserinfoUource        string `description:"用户来源"`
-	AuthInfo              string `description:"用户参会鉴权"`
-	GuestUsername         string `description:"嘉宾名称, 多个用,隔开"`
-	FirstWatchTime        string `description:"首次观看时间"`
-	LastWatchTime         string `description:"最后观看时间"`
-	RoadshowId            string `description:"路演ID"`
-	RoadshowTitle         string `description:"路演标题"`
-	RoadshowBeginTime     string `description:"路演开始时间"`
-	RoadshowEndTime       string `description:"路演结束时间"`
-	JoinTime              int    `description:"参与时长"`
-	JoinType              int    `description:"参与方式, 1网络, 2电话"`
-	DataType              int    `description:"数据类型: 1直播, 2回放"`
-	Occupation            string `description:"职位"`
-	UseridEntity          int    `description:"参会者身份. 1:主讲人, 2:主持人, 3:嘉宾, 4:普通参会者, 5:联席主讲人, 6:会议助理"`
-	CrmCompanyMapStatusId int    `description:"转换后的对应状态信息:1=正式客户, 2=曾使用客户, 3=其他"`
-}
-
 func AddAttendancDetail(items []*CygxActivityAttendanceDetail, activityId int, mobileStr string) (err error) {
 	if len(items) == 0 {
 		return
@@ -196,3 +175,29 @@ func GetActivityAttendanceDetailListAll() (items []*CygxActivityAttendanceDetail
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
+
+// 列表
+func GetActivityAttendanceDetailListCondition(condition string, pars []interface{}) (items []*CygxActivityAttendanceDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_attendance_detail WHERE   1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+func AddAttendancDetailNew(items []*CygxActivityAttendanceDetail, activityIds []int) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	//修改活动是否上传到会信息字段
+	sql := `UPDATE cygx_activity SET  is_submit_meeting=1   WHERE activity_id IN  (` + utils.GetOrmInReplace(len(activityIds)) + `)  `
+	_, err = o.Raw(sql, activityIds).Exec()
+	if err != nil {
+		return
+	}
+	_, err = o.InsertMulti(len(items), items)
+	return
+}

+ 181 - 1
models/activity_meet_detail_log.go

@@ -3,6 +3,7 @@ package models
 import (
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_cygx/utils"
 	"strconv"
 	"strings"
 	"time"
@@ -20,6 +21,27 @@ type CygxActivityMeetDetailLog struct {
 	ActivityTime string    `description:"活动时间"`
 }
 
+// 批量添加
+func AddCygxActivityMeetDetailLogMulti(items []*CygxActivityMeetDetailLog) (err error) {
+	o := orm.NewOrm()
+	if len(items) > 0 {
+		//批量添加
+		_, err = o.InsertMulti(len(items), items)
+	}
+	return
+}
+
+// 列表
+func GetCygxActivityMeetDetailLogList(condition string, pars []interface{}) (items []*CygxActivityMeetDetailLog, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_meet_detail_log as art WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
 func GetOfflineMeetingDetailListCompanyIdStr(companyIdStr string) (item []*CygxActivityMeetDetailLog, err error) {
 	if companyIdStr == "" {
 		return
@@ -80,6 +102,37 @@ func GetActivityMeetDetailLogCount(condition string) (count int, err error) {
 	return
 }
 
+// 报名
+type CygxActivityMeetDetailLogCountResp struct {
+	Mobile    string `description:"手机号"`
+	CompanyId int    `description:"公司id 不在数据库的用户为0"`
+	Count     int    `description:"公司id 不在数据库的用户为0"`
+}
+
+// 获取数量
+func GetActivityMeetDetailLogCountCompany(companyIds []int) (item []*CygxActivityMeetDetailLogCountResp, err error) {
+	lenArr := len(companyIds)
+	if lenArr == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `  SELECT company_id, COUNT(1) AS count  FROM cygx_activity_meet_detail_log WHERE 1=1 AND company_id IN  (` + utils.GetOrmInReplace(lenArr) + `)   GROUP BY company_id`
+	_, err = o.Raw(sql, companyIds).QueryRows(&item)
+	return
+}
+
+// 获取数量
+func GetActivityMeetDetailLogCountMobile(mobiles []string) (item []*CygxActivityMeetDetailLogCountResp, err error) {
+	lenArr := len(mobiles)
+	if lenArr == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `  SELECT mobile, COUNT(1) AS count  FROM cygx_activity_meet_detail_log WHERE 1=1 AND mobile IN  (` + utils.GetOrmInReplace(lenArr) + `)   GROUP BY company_id`
+	_, err = o.Raw(sql, mobiles).QueryRows(&item)
+	return
+}
+
 // 修改公司参会数量
 func UpdateActivityMeetDetailLog(companyName string, num int) (err error) {
 	sql := ` UPDATE cygx_activity_meet_detail_log SET  company_meet_num= ?  WHERE company_name = ?`
@@ -175,7 +228,7 @@ func AddCygxActivityMeetDetailLogOnline(list []*CygxActivityAttendanceDetail, ac
 }
 
 // 添加线上到会记录
-func AddCygxActivityMeetDetailLogOnlineByList(list []*CygxActivityAttendanceDetail, activityIds string) (err error) {
+func AddCygxActivityMeetDetailLogOnlineByListNew(list []*CygxActivityAttendanceDetail, activityIds string) (err error) {
 	o, err := orm.NewOrm().Begin()
 	if err != nil {
 		return
@@ -369,3 +422,130 @@ func AddCygxActivityMeetDetailLogOffline(activityId int) (err error) {
 	}
 	return
 }
+
+// 添加线上到会记录
+func AddCygxActivityMeetDetailLogOnlineByList(list []*CygxActivityAttendanceDetail, activityIds string) (err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	var CompanyName string
+	var MobileStr string
+	var items []*CygxActivityMeetDetailLog
+	//删除原有数据
+	sql := ` DELETE FROM cygx_activity_meet_detail_log WHERE activity_id IN (` + activityIds + `)`
+	_, err = o.Raw(sql).Exec()
+	if err != nil {
+		return
+	}
+	//插入新的数据
+	for _, v := range list {
+		item := new(CygxActivityMeetDetailLog)
+		item.ActivityId = v.ActivityId
+		item.Mobile = v.Mobile
+		fmt.Println(v.CompanyName)
+		item.CompanyName = v.CompanyName
+		item.CompanyId = v.CompanyId
+		item.ActivityTime = v.ActivityTime
+		item.CreateTime = v.CreateTime
+		if strings.Index(CompanyName, v.CompanyName) == -1 && v.CompanyName != "" {
+			CompanyName += "'" + v.CompanyName + "',"
+		}
+		if strings.Index(MobileStr, v.Mobile) == -1 && v.Mobile != "" {
+			MobileStr += v.Mobile + ","
+		}
+		items = append(items, item)
+	}
+	CompanyName = strings.TrimRight(CompanyName, ",")
+	MobileStr = strings.TrimRight(MobileStr, ",")
+	_, err = o.InsertMulti(1, items)
+	listCompany, err := GetOfflineMeetingDetailListCompanyName(CompanyName)
+	fmt.Println("公司数量", len(listCompany))
+	if err != nil {
+		return
+	}
+	//修改公司对应的数量
+	var condition string
+	for _, v := range listCompany {
+		var total int
+		condition = ` AND company_name = '` + v.CompanyName + `' `
+		total, err = GetActivityMeetDetailLogCount(condition)
+		if err != nil {
+			return
+		}
+		sql := ` UPDATE cygx_activity_meet_detail_log SET  company_meet_num= ?  WHERE company_name = ?`
+		_, err = o.Raw(sql, total, v.CompanyName).Exec()
+		fmt.Println("处理公司", v.CompanyName)
+		if err != nil {
+			return
+		}
+	}
+	listMobile, err := GetActivityMeetDetailLog(MobileStr)
+	fmt.Println("用户数量", len(listMobile))
+	if err != nil {
+		return
+	}
+	//修改个人对应的数量
+	for _, v := range listMobile {
+		var total int
+		condition = ` AND mobile = '` + v.Mobile + `' `
+		total, err = GetActivityMeetDetailLogCount(condition)
+		if err != nil {
+			return
+		}
+		sql := ` UPDATE cygx_activity_meet_detail_log SET  user_meet_num= ?  WHERE mobile = ?`
+		_, err = o.Raw(sql, total, v.Mobile).Exec()
+		fmt.Println("处理用户", v.Mobile)
+		if err != nil {
+			return
+		}
+	}
+	fmt.Println("user_end")
+	return
+}
+
+// UpdateActivitySpecialSignupNumMulti 批量修改个人参会数量
+func UpdateCygxActivityMeetDetailLogMobileNumMulti(items []*CygxActivityMeetDetailLogCountResp) (err error) {
+	o := orm.NewOrm()
+	p, err := o.Raw("UPDATE cygx_activity_meet_detail_log SET user_meet_num = ? WHERE mobile = ?").Prepare()
+	if err != nil {
+		return
+	}
+	defer func() {
+		_ = p.Close()
+	}()
+	for _, v := range items {
+		_, err = p.Exec(v.Count, v.Mobile)
+		if err != nil {
+			return
+		}
+	}
+	return
+}
+
+// UpdateActivitySpecialSignupNumMulti 批量修改机构参会数量
+func UpdateCygxActivityMeetDetailLogCompanyNumMulti(items []*CygxActivityMeetDetailLogCountResp) (err error) {
+	o := orm.NewOrm()
+	p, err := o.Raw("UPDATE cygx_activity_meet_detail_log SET company_meet_num = ? WHERE company_id = ?").Prepare()
+	if err != nil {
+		return
+	}
+	defer func() {
+		_ = p.Close()
+	}()
+	for _, v := range items {
+		_, err = p.Exec(v.Count, v.CompanyId)
+		if err != nil {
+			return
+		}
+	}
+	return
+}

+ 24 - 1
models/activity_signup.go

@@ -641,10 +641,33 @@ func GetActivitySignupInnerActivityList(condition string, pars []interface{}) (i
 			*
 		FROM
 			cygx_activity_signup AS v
-			INNER JOIN cygx_activity as a 
+			INNER JOIN cygx_activity as a  ON a.activity_id = v.activity_id
 		WHERE
 			1 = 1 	` + condition
 	o := orm.NewOrm()
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
+
+// UpdateCygxActivitySignupIsMeeting 批量标记用户的到会信息
+func UpdateCygxActivitySignupIsMeeting(items []*CygxActivityAttendanceDetail) (err error) {
+	o := orm.NewOrm()
+	p, err := o.Raw(` UPDATE cygx_activity_signup SET
+							is_meeting = 1
+							WHERE outbound_mobile = ? AND activity_id = ? `).Prepare()
+	if err != nil {
+		return
+	}
+	defer func() {
+		_ = p.Close() // 别忘记关闭 statement
+	}()
+	for _, v := range items {
+		_, err = p.Exec(
+			v.Mobile,
+			v.ActivityId)
+		if err != nil {
+			return
+		}
+	}
+	return
+}

+ 13 - 0
models/activity_signup_break.go

@@ -2,6 +2,7 @@ package models
 
 import (
 	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_cygx/utils"
 	"time"
 )
 
@@ -51,3 +52,15 @@ func DeleteCygxActivitySignupBreakById(activityId int) (err error) {
 	_, err = o.Raw(sql, activityId).Exec()
 	return
 }
+
+// 批量删除
+func DeleteCygxActivitySignupBreakByIds(activityIds []int) (err error) {
+	lenactivityIds := len(activityIds)
+	if lenactivityIds == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := ` DELETE FROM cygx_activity_signup_break  WHERE  activity_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `)`
+	_, err = o.Raw(sql, activityIds).Exec()
+	return
+}

+ 39 - 0
models/jmcj_comein_data.go

@@ -0,0 +1,39 @@
+package models
+
+import "github.com/beego/beego/v2/client/orm"
+
+type RoadshowData struct {
+	Id                    int    `orm:"column(id);pk;"description:"主键ID"`
+	Company               string `description:"公司名称"`
+	UserName              string `description:"用户名"`
+	UserPhone             string `description:"手机号"`
+	UserinfoUource        string `description:"用户来源"`
+	AuthInfo              string `description:"用户参会鉴权"`
+	GuestUsername         string `description:"嘉宾名称, 多个用,隔开"`
+	FirstWatchTime        string `description:"首次观看时间"`
+	LastWatchTime         string `description:"最后观看时间"`
+	RoadshowId            string `description:"路演ID"`
+	RoadshowTitle         string `description:"路演标题"`
+	RoadshowBeginTime     string `description:"路演开始时间"`
+	RoadshowEndTime       string `description:"路演结束时间"`
+	JoinTime              int    `description:"参与时长"`
+	JoinType              int    `description:"参与方式, 1网络, 2电话"`
+	DataType              int    `description:"数据类型: 1直播, 2回放"`
+	Occupation            string `description:"职位"`
+	UseridEntity          int    `description:"参会者身份. 1:主讲人, 2:主持人, 3:嘉宾, 4:普通参会者, 5:联席主讲人, 6:会议助理"`
+	CrmCompanyMapStatusId int    `description:"转换后的对应状态信息:1=正式客户, 2=曾使用客户, 3=其他"`
+}
+
+// 获取列表
+func GetJmcjRoadshowDataList(condition string, pars []interface{}) (list []*RoadshowData, err error) {
+	if condition == "" {
+		return
+	}
+	o := orm.NewOrmUsingDB("comein_data")
+	sql := `SELECT * FROM roadshow_data WHERE  1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&list)
+	return
+}

+ 14 - 0
models/wx_user.go

@@ -590,3 +590,17 @@ func UserSubscribe(subscribeTime string, userId int) (err error) {
 	_, err = o.Raw(sql, subscribeTime, userId).Exec()
 	return
 }
+
+func GetWxUserOutboundMobiles(mobiles []string) (item []*WxUserOutboundMobile, err error) {
+	lenmobiles := len(mobiles)
+	if lenmobiles == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `SELECT u.real_name,u.mobile,u.outbound_mobile,u.company_id,p.company_name ,GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS seller_name
+			FROM wx_user as u 
+			INNER JOIN company_product AS p ON p.company_id = u.company_id 
+			WHERE outbound_mobile IN(` + utils.GetOrmInReplace(lenmobiles) + `)   OR mobile IN (` + utils.GetOrmInReplace(lenmobiles) + `)   GROUP BY u.user_id`
+	_, err = o.Raw(sql, mobiles, mobiles).QueryRows(&item)
+	return
+}

+ 607 - 0
services/activity_meeting.go

@@ -0,0 +1,607 @@
+package services
+
+import (
+	"errors"
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// GroupingActivityToJmcj建立与进门财经的活动关联
+func GroupingActivityToJmcj() {
+
+}
+
+// GroupingActivityHzToJmcj 通过弘则的名称匹配进门财经的活动
+func GroupingActivityHzToJmcj() {
+
+}
+
+//func init() {
+//	var activityIds []int
+//	activityIds = append(activityIds, 3115)
+//	AddCygxActivityRestrictSignupByAdminNew(activityIds)
+//}
+
+// GroupingActivityJmcjToHz 通过进门财经的匹配弘则的活动
+func GroupingActivityJmcjToHz() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("通过进门财经的匹配弘则的活动", 2)
+		}
+	}()
+	dateTime := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
+	dateNow := time.Now().AddDate(0, 0, 0).Format(utils.FormatDate)
+	startDate := dateTime + " 00:00:00"
+	endDate := dateNow + " 23:59:59"
+	var condition string
+	var pars []interface{}
+	condition = " AND roadshow_begin_time BETWEEN ? AND ? "
+	pars = append(pars, startDate, endDate)
+	condition += ` GROUP BY roadshow_id `
+	listJmcj, e := models.GetJmcjRoadshowDataList(condition, pars)
+	if e != nil {
+		err = errors.New("GetJmcjRoadshowDataList, Err: " + e.Error())
+		return
+	}
+
+	pars = make([]interface{}, 0)
+	condition = " AND activity_time BETWEEN ? AND ? AND publish_status = 1 "
+	pars = append(pars, startDate, endDate)
+	listHz, e := models.GetActivityListByCondition(condition, pars)
+	if e != nil {
+		err = errors.New("GetActivityListByCondition, Err: " + e.Error())
+		return
+	}
+
+	mapGroupActivityid := make(map[int]string)
+	//通过进门财经匹配弘则
+	for _, vJmcj := range listJmcj {
+		var roadshowTitle string
+		roadshowTitle = vJmcj.RoadshowTitle
+		roadshowTitle = strings.Replace(roadshowTitle, "【", "", -1)
+		roadshowTitle = strings.Replace(roadshowTitle, "】", "", -1)
+		roadshowTitle = strings.Replace(roadshowTitle, " ", "", -1)
+		roadshowTitle = strings.Replace(roadshowTitle, "-", "", -1)
+		roadshowTitle = strings.Replace(roadshowTitle, ":", "", -1)
+		nameSlice := strings.Split(roadshowTitle, "|")
+		if len(nameSlice) >= 1 {
+			roadshowTitle = nameSlice[len(nameSlice)-1]
+			vJmcj.RoadshowBeginTime = utils.TimeRemoveHms2(vJmcj.RoadshowBeginTime)
+			for _, vHz := range listHz {
+				//如果同一时间标题匹配就建立匹配关系
+				if vJmcj.RoadshowBeginTime == utils.TimeRemoveHms2(vHz.ActivityTime) && (strings.Contains(vHz.ActivityNameTask, roadshowTitle) || strings.Contains(vHz.JmcjRoadshowTitle, roadshowTitle)) {
+					mapGroupActivityid[vHz.ActivityId] = vJmcj.RoadshowId
+				}
+			}
+		}
+	}
+
+	//通过弘则匹配进门财经
+	for _, vHz := range listHz {
+		if mapGroupActivityid[vHz.ActivityId] != "" {
+			continue
+		}
+		var roadshowTitle string
+		roadshowTitle = vHz.ActivityName
+		nameSlice := strings.Split(roadshowTitle, "】")
+		if len(nameSlice) >= 1 {
+			roadshowTitle = nameSlice[len(nameSlice)-1]
+			vHz.ActivityTime = utils.TimeRemoveHms2(vHz.ActivityTime)
+			for _, vJmcj := range listJmcj {
+				//如果同一时间标题匹配就建立匹配关系
+				if vHz.ActivityTime == utils.TimeRemoveHms2(vJmcj.RoadshowBeginTime) && strings.Contains(vJmcj.RoadshowTitle, roadshowTitle) {
+					mapGroupActivityid[vHz.ActivityId] = vJmcj.RoadshowId
+				}
+			}
+		}
+	}
+
+	if len(mapGroupActivityid) > 0 {
+		e = models.UpdateJmcjActivityIdGroup(mapGroupActivityid)
+		if e != nil {
+			err = errors.New("UpdateJmcjActivityIdGroup, Err: " + e.Error())
+		}
+	}
+	return
+
+}
+
+func GetActivityMeetingByJmcj() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("获取进门财经的到会信息失败,Err"+err.Error(), 2)
+		}
+	}()
+
+	//获取需要一直同步的活动信息
+	configCode := "jin_meng_activity_id"
+	detail, e := models.GetConfigByCode(configCode)
+	if e != nil {
+		err = errors.New("GetConfigByCode, Err: " + e.Error())
+		return
+	}
+	mapActivityIdlLongTime := make(map[string]string)
+	sliceValue := strings.Split(detail.ConfigValue, ",")
+	for _, v := range sliceValue {
+		mapActivityIdlLongTime[v] = v
+	}
+	dateTime := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
+	dateNow := time.Now().AddDate(0, 0, 0).Format(utils.FormatDate)
+	startDate := dateTime + " 00:00:00"
+	endDate := dateNow + " 23:59:59"
+	var condition string
+	var pars []interface{}
+	//获取弘则要同步到会信息的活动
+	condition = ` AND activity_time BETWEEN ? AND ? AND publish_status = 1  AND  jmcj_activity_id != '' OR (  activity_id IN (` + detail.ConfigValue + `) AND publish_status = 1 AND  jmcj_activity_id != '' ) `
+	pars = append(pars, startDate, endDate)
+	listHz, e := models.GetActivityListByCondition(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetActivityListByCondition, Err: " + e.Error())
+		return
+	}
+
+	var jmcjActivityIds []string
+	var activityIds []int
+	mapGroupActivityid := make(map[string]int)
+	mapGroupActivityTime := make(map[string]string)
+	for _, v := range listHz {
+		jmcjActivityIds = append(jmcjActivityIds, v.JmcjActivityId)
+		activityIds = append(activityIds, v.ActivityId)
+		mapGroupActivityid[v.JmcjActivityId] = v.ActivityId
+		mapGroupActivityTime[v.JmcjActivityId] = v.ActivityTime
+	}
+	fmt.Println(jmcjActivityIds)
+	//return
+	lenjmcjActivityIds := len(jmcjActivityIds)
+	if lenjmcjActivityIds == 0 {
+		return
+	}
+	//获取进门财经对应的路演ID的到会列表
+	pars = make([]interface{}, 0)
+	condition = ` AND roadshow_id IN (` + utils.GetOrmInReplace(lenjmcjActivityIds) + `)`
+	pars = append(pars, jmcjActivityIds)
+	listJmcj, e := models.GetJmcjRoadshowDataList(condition, pars)
+	if e != nil {
+		err = errors.New("GetJmcjRoadshowDataList, Err: " + e.Error())
+		return
+	}
+
+	//获取已经写入到会信息的参会人员
+	lenactivityIds := len(activityIds)
+	pars = make([]interface{}, 0)
+	condition = ` AND activity_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `)`
+	pars = append(pars, activityIds)
+	attendanceDetailList, e := models.GetActivityAttendanceDetailListCondition(condition, pars)
+	if e != nil {
+		err = errors.New("GetActivityAttendanceDetailListCondition, Err: " + e.Error())
+		return
+	}
+	mapAttendanceDetail := make(map[string]int)
+	for _, v := range attendanceDetailList {
+		mapAttendanceDetail[fmt.Sprint("ActivityId:", v.ActivityId, "Mobile:", v.Mobile)] = v.ActivityId
+	}
+
+	var mobiles []string
+	var mobileMap = make(map[string]string)
+	//var isPlayback bool                    // 是否包含回放
+	var isPlaybackMap = make(map[int]bool) // 是否包含回放map
+	var activityIdsLongTime string         //包含回放的活动ID
+	needAddAttendanc := make([]*models.CygxActivityAttendanceDetail, 0)
+	for _, v := range listJmcj {
+		if v.UserPhone == "" {
+			continue
+		}
+		if mapGroupActivityid[v.RoadshowId] == 0 {
+			continue
+		}
+		//如果数据已经存在了那么就不做数据更新
+		if mapAttendanceDetail[fmt.Sprint("ActivityId:", mapGroupActivityid[v.RoadshowId], "Mobile:", v.UserPhone)] > 0 {
+			continue
+		}
+		item := new(models.CygxActivityAttendanceDetail)
+		item.ActivityId = mapGroupActivityid[v.RoadshowId]
+		item.RealName = v.UserName
+		item.Mobile = v.UserPhone
+		item.CompanyName = v.Company
+		item.FirstMeetingTime = v.FirstWatchTime
+		item.LastMeetingTime = v.LastWatchTime
+		item.IsMeetingStr = 1
+		item.Duration = utils.GetAttendanceDetailSeconds(v.JoinTime)
+		if v.JoinType == 1 {
+			item.MeetingTypeStr = "网络"
+		} else {
+			item.MeetingTypeStr = "电话"
+		}
+		item.MeetingAuthentication = v.AuthInfo
+		if v.DataType == 1 {
+			item.MeetingStatusStr = "直播"
+		} else {
+			item.MeetingStatusStr = "回放"
+			if !isPlaybackMap[item.ActivityId] && mapActivityIdlLongTime[strconv.Itoa(item.ActivityId)] == "" {
+				activityIdsLongTime += strconv.Itoa(item.ActivityId) + ","
+			}
+			isPlaybackMap[item.ActivityId] = true
+		}
+		item.Position = v.Occupation
+		item.UseridEntity = v.UseridEntity
+		item.ActivityTime = mapGroupActivityTime[v.RoadshowId]
+		item.CrmCompanyMapStatusId = v.CrmCompanyMapStatusId
+		item.CreateTime = time.Now()
+		needAddAttendanc = append(needAddAttendanc, item)
+		if mobileMap[v.UserPhone] == "" {
+			mobiles = append(mobiles, v.UserPhone)
+			mobileMap[v.UserPhone] = v.UserPhone
+		}
+	}
+
+	// 更新需要长时间同步到会信息的活动
+	if activityIdsLongTime != "" {
+		activityIdsLongTime = strings.TrimRight(activityIdsLongTime, ",")
+		activityIdsLongTime = detail.ConfigValue + "," + activityIdsLongTime
+		e = models.UpdateConfigByCode(activityIdsLongTime, configCode)
+		if e != nil {
+			err = errors.New("UpdateConfigByCode, Err: " + e.Error())
+			return
+		}
+	}
+
+	//根据手机号获取这些用户的信息
+	listUser, e := models.GetWxUserOutboundMobiles(mobiles)
+	if e != nil {
+		err = errors.New("GetWxUserOutboundMobiles, Err: " + e.Error())
+		return
+	}
+
+	mapUser := make(map[string]*models.WxUserOutboundMobile)
+	for _, v := range listUser {
+		mapUser[v.Mobile] = v
+		mapUser[v.OutboundMobile] = v
+	}
+
+	var updateActivityIds []int                   // 需要更新的活动ID
+	var updateActivityIdsMap = make(map[int]bool) // 需要更新的活动ID
+	for k, v := range needAddAttendanc {
+		if needAddAttendanc[k].CompanyId == 0 && mapUser[v.Mobile] != nil {
+			needAddAttendanc[k].CompanyId = mapUser[v.Mobile].CompanyId
+			needAddAttendanc[k].SellerName = mapUser[v.Mobile].SellerName
+			needAddAttendanc[k].CompanyName = mapUser[v.Mobile].CompanyName
+			needAddAttendanc[k].IsMeetingStr = 1
+		}
+		if !updateActivityIdsMap[v.ActivityId] {
+			updateActivityIds = append(updateActivityIds, v.ActivityId)
+			updateActivityIdsMap[v.ActivityId] = true
+		}
+		attendanceDetailList = append(attendanceDetailList, v)
+	}
+	if len(updateActivityIds) == 0 {
+		return
+	}
+
+	//return
+	{
+		//参会记录
+		e = models.AddAttendancDetailNew(needAddAttendanc, updateActivityIds)
+		if e != nil {
+			err = errors.New("AddAttendancDetailNew, Err: " + e.Error())
+			return err
+		}
+	}
+
+	{
+		//标记到会信息
+		e = models.UpdateCygxActivitySignupIsMeeting(needAddAttendanc)
+		if e != nil {
+			err = errors.New("UpdateCygxActivitySignupIsMeeting, Err: " + e.Error())
+			return err
+		}
+	}
+
+	{
+		//处理是否限制报名
+		AddCygxActivityRestrictSignupByAdminNew(updateActivityIds)
+		if err != nil {
+			fmt.Println("AddCygxActivityRestrictSignupByAdmin Err:", err.Error())
+			return err
+		}
+	}
+
+	{
+		//通过进门财经添加用户参数信息
+		AddctivitySignupDetailByJmcjNew(needAddAttendanc, updateActivityIds)
+	}
+
+	{
+		//添加报名日志 (对个人以及机构互动数量进行排序下载使用)
+		CygxActivityMeetSort(needAddAttendanc, updateActivityIds)
+	}
+	return
+}
+
+// 查研观向处理活动用户限制报名
+func AddCygxActivityRestrictSignupByAdminNew(activityIds []int) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go utils.SendAlarmMsg("查研观向处理活动用户限制报名失败,AddCygxActivityRestrictSignupByAdminNew,Err:"+err.Error()+"activityIds"+fmt.Sprint(activityIds), 3)
+		}
+	}()
+
+	var condition string
+	var pars []interface{}
+	lenactivityIds := len(activityIds)
+	if lenactivityIds == 0 {
+		return
+	}
+	condition = ` AND	is_meeting = 1  AND activity_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `)`
+	pars = append(pars, activityIds)
+	//获取到会了的人员
+	meetingList, e := models.GetActivitySignupList(condition, pars)
+	if e != nil {
+		err = errors.New("GetActivitySignupList" + e.Error())
+		return
+	}
+	var userIdArr []int
+	if len(meetingList) > 0 {
+		for _, v := range meetingList {
+			userIdArr = append(userIdArr, v.UserId)
+		}
+		fmt.Println("userIdArr", userIdArr)
+		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
+		}
+		fmt.Println(1)
+		//获取这些用户是否被加入到限制报名了
+		maptotalRestrict := make(map[int]bool)
+		for _, v := range restrictSignupList {
+			maptotalRestrict[v.UserId] = true
+		}
+		fmt.Println(len(restrictSignupList))
+
+		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) + `) AND a.activity_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `)`
+		pars = append(pars, userIdArr, activityIds)
+		listSignup, e := models.GetActivitySignupInnerActivityList(condition, pars)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetActivitySignupInnerActivityList" + e.Error())
+			return
+		}
+		//fmt.Println(len(listSignup))
+		////return
+		//fmt.Println(2)
+		mapNomeet := make(map[int]int)
+		if len(listSignup) > 0 {
+			for _, v := range listSignup {
+				mapNomeet[v.UserId]++
+			}
+		}
+		var userIdDelArr []int
+		for _, v := range meetingList {
+			//如果加入了爽约限制但是爽约次数少于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
+			}
+		}
+	}
+
+	//获取未到会的人员
+	pars = make([]interface{}, 0)
+	condition = `   AND  v.is_meeting = 0 	AND  v.do_fail_type = 0  AND v.activity_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `)`
+	pars = append(pars, activityIds)
+	nomeetingListlist, e := models.GetActivitySignupInnerActivityList(condition, pars)
+	if e != nil {
+		err = errors.New("GetActivitySignupNomeetingCountList" + e.Error())
+		return
+	}
+	var userIdSiginArr []int
+	var items []*models.CygxActivitySignupBreak
+	for _, v := range nomeetingListlist {
+		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)
+	}
+	lenuserIdSiginArr := len(userIdSiginArr)
+	if lenuserIdSiginArr == 0 {
+		return
+	}
+
+	var itemsRestrict []*models.CygxActivityRestrictSignup
+	maptotalRestrict := make(map[int]bool)
+
+	//var condition string
+	pars = make([]interface{}, 0)
+	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 meetingList {
+		//如果加入了爽约限制但是爽约次数少于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.DeleteCygxActivitySignupBreakByIds(activityIds)
+	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 CygxActivityMeetSort(list []*models.CygxActivityAttendanceDetail, activityIds []int) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go utils.SendAlarmMsg("查研观向处理活动用户限制报名失败,AddCygxActivityRestrictSignupByAdminNew,Err:"+err.Error()+"activityIds"+fmt.Sprint(activityIds), 3)
+		}
+	}()
+	var items []*models.CygxActivityMeetDetailLog
+	var condition string
+	var pars []interface{}
+	lenactivityIds := len(activityIds)
+	if lenactivityIds == 0 {
+		return
+	}
+	//获取已经写入到会信息的参会人员
+	pars = make([]interface{}, 0)
+	condition = ` AND activity_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `)`
+	pars = append(pars, activityIds)
+	activityMeetDetailLogList, e := models.GetCygxActivityMeetDetailLogList(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxActivityMeetDetailLogList, Err: " + e.Error())
+		return
+	}
+	mapActivityMeetDetailL := make(map[string]int)
+	for _, v := range activityMeetDetailLogList {
+		mapActivityMeetDetailL[fmt.Sprint("ActivityId:", v.ActivityId, "Mobile:", v.Mobile)] = v.ActivityId
+	}
+
+	var companyIds []int
+	var companyIdsMap = make(map[int]bool)
+	var mobiles []string
+	var mobilesMap = make(map[string]bool)
+	for _, v := range list {
+		if mapActivityMeetDetailL[fmt.Sprint("ActivityId:", v.ActivityId, "Mobile:", v.Mobile)] > 0 {
+			continue
+		}
+		item := new(models.CygxActivityMeetDetailLog)
+		item.ActivityId = v.ActivityId
+		item.Mobile = v.Mobile
+		fmt.Println(v.CompanyName)
+		item.CompanyName = v.CompanyName
+		item.CompanyId = v.CompanyId
+		item.ActivityTime = v.ActivityTime
+		item.CreateTime = v.CreateTime
+		if !companyIdsMap[v.CompanyId] {
+			companyIds = append(companyIds, v.CompanyId)
+		}
+		if !mobilesMap[v.Mobile] {
+			mobiles = append(mobiles, v.Mobile)
+		}
+		items = append(items, item)
+	}
+	//插入
+	e = models.AddCygxActivityMeetDetailLogMulti(items)
+	if e != nil {
+		err = errors.New("AddCygxActivityMeetDetailLogMulti, Err: " + e.Error())
+		return
+	}
+
+	{
+		//批量修改个人参会数量
+		listMobileCount, e := models.GetActivityMeetDetailLogCountMobile(mobiles)
+		if e != nil {
+			err = errors.New("GetActivityMeetDetailLogCountCompany, Err: " + e.Error())
+			return
+		}
+
+		if len(listMobileCount) > 0 {
+			e = models.UpdateCygxActivityMeetDetailLogMobileNumMulti(listMobileCount)
+			if e != nil {
+				err = errors.New("UpdateCygxActivityMeetDetailLogMobileNumMulti, Err: " + e.Error())
+				return
+			}
+		}
+	}
+
+	{
+		//批量修改机构参会数量
+		listCompanyCount, e := models.GetActivityMeetDetailLogCountCompany(companyIds)
+		if e != nil {
+			err = errors.New("GetActivityMeetDetailLogCountCompany, Err: " + e.Error())
+			return
+		}
+
+		if len(listCompanyCount) > 0 {
+			e = models.UpdateCygxActivityMeetDetailLogCompanyNumMulti(listCompanyCount)
+			if e != nil {
+				err = errors.New("UpdateCygxActivityMeetDetailLogCompanyNumMulti, Err: " + e.Error())
+				return
+			}
+		}
+
+	}
+	return
+
+}

+ 95 - 2
services/activity_signup_detail.go

@@ -7,7 +7,7 @@ import (
 	"hongze/hongze_cygx/utils"
 )
 
-//AddctivitySignupDetail  获取当天已结束的活动的报名信息。添加到到会详情
+// AddctivitySignupDetail  获取当天已结束的活动的报名信息。添加到到会详情
 func AddctivitySignupDetail(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
@@ -93,7 +93,7 @@ func AddctivitySignupDetail(cont context.Context) (err error) {
 	return err
 }
 
-//AddctivitySignupDetailByJmcj 通过进门财经添加用户参数信息
+// AddctivitySignupDetailByJmcj 通过进门财经添加用户参数信息
 func AddctivitySignupDetailByJmcj(itemsDetail []*models.CygxActivityAttendanceDetail, activityId int) (err error) {
 	defer func() {
 		if err != nil {
@@ -207,3 +207,96 @@ func GetCygxActivityAttendanceDetail() {
 	}
 	//fmt.Println(mapDetal)
 }
+
+// AddctivitySignupDetailByJmcj 通过进门财经添加用户参数信息
+func AddctivitySignupDetailByJmcjNew(itemsDetail []*models.CygxActivityAttendanceDetail, activityIds []int) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("通过进门财经添加用户参数信息失败 ErrMsg:"+err.Error(), 2)
+		}
+	}()
+	actLen := len(activityIds)
+	var condition string
+	var pars []interface{}
+	if actLen > 0 {
+		condition += ` AND activity_id IN (` + utils.GetOrmInReplace(actLen) + `)`
+		pars = append(pars, activityIds)
+	}
+
+	signUpDetailList, err := models.GetSignupDetailList(condition, pars)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return err
+	}
+
+	mapsignUpDetai := make(map[string]string)
+	if len(signUpDetailList) > 0 {
+		for _, v := range signUpDetailList {
+			mapsignUpDetai[fmt.Sprint("ActivityId", v.ActivityId, "Mobile", v.Mobile)] = v.Mobile
+		}
+	}
+
+	//获取当天已经结束了 活动的报名人数
+	signUpList, err := models.GetSignupDetailBySignup(condition, pars)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return err
+	}
+	//建立外呼号与手机号的绑定
+	mapsignUp := make(map[string]string)
+	if len(signUpList) > 0 {
+		for _, v := range signUpList {
+			mapsignUp[fmt.Sprint(v.OutboundMobile)] = v.Mobile
+		}
+	}
+
+	var itemsAdd []*models.CygxActivitySignupDetail
+	var itemsUpdate []*models.CygxActivitySignupDetail
+
+	for _, v := range itemsDetail {
+		var item = new(models.CygxActivitySignupDetail)
+		item.ActivityId = v.ActivityId
+		item.RealName = v.RealName
+		//如果手机号存在那么就是报名的,不存在就是直接参与的
+		if _, ok := mapsignUp[v.Mobile]; ok {
+			item.Mobile = mapsignUp[v.Mobile]
+		} else {
+			item.Mobile = v.Mobile
+		}
+		item.OutboundMobile = v.Mobile
+		item.CompanyName = v.CompanyName
+		item.CompanyId = v.CompanyId
+		item.SellerName = v.SellerName
+		item.FirstMeetingTime = v.FirstMeetingTime
+		item.LastMeetingTime = v.LastMeetingTime
+		item.Duration = v.Duration
+		item.MeetingTypeStr = v.MeetingTypeStr
+		item.MeetingAuthentication = v.MeetingAuthentication
+		item.MeetingStatusStr = v.MeetingStatusStr
+		item.CreateTime = v.CreateTime
+		item.Position = v.Position
+		item.IsMeeting = 1
+		item.UseridEntity = v.UseridEntity
+		item.ActivityTime = v.ActivityTime
+		item.CrmCompanyMapStatusId = v.CrmCompanyMapStatusId
+
+		if _, ok := mapsignUpDetai[fmt.Sprint("ActivityId", v.ActivityId, "Mobile", item.Mobile)]; !ok {
+			itemsAdd = append(itemsAdd, item)
+		} else {
+			itemsUpdate = append(itemsUpdate, item)
+		}
+	}
+	if len(itemsAdd) > 0 {
+		err = models.AddCygxActivitySignupDetail(itemsAdd)
+		if err != nil {
+			return
+		}
+	}
+	if len(itemsUpdate) > 0 {
+		err = models.UpdateActivitySignupDetailMulti(itemsUpdate)
+		if err != nil {
+			return
+		}
+	}
+
+	return err
+}