浏览代码

获取进门财经数据,自动提交到参会记录V1

xingzai 3 年之前
父节点
当前提交
95f5d10e9f
共有 7 个文件被更改,包括 310 次插入6 次删除
  1. 8 0
      models/activity.go
  2. 168 0
      models/activity_attendance_detail.go
  3. 15 0
      models/db.go
  4. 83 0
      services/activity.go
  5. 1 0
      services/task.go
  6. 29 2
      utils/common.go
  7. 6 4
      utils/config.go

+ 8 - 0
models/activity.go

@@ -183,6 +183,14 @@ func GetActivityListAll(condition string, pars []interface{}, uid, startSize, pa
 	return
 }
 
+//列表
+func GetActivityListByDateTime(startDate, endDate string) (items []*CygxActivityList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity WHERE activity_time > '` + startDate + `' AND activity_time < '` + endDate + `' AND is_submit_meeting = 0 `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
 //获取数量
 func GetActivityCount(condition string, pars []interface{}) (count int, err error) {
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity as art WHERE 1= 1  `

+ 168 - 0
models/activity_attendance_detail.go

@@ -0,0 +1,168 @@
+package models
+
+import (
+	"fmt"
+	"rdluck_tools/orm"
+	"time"
+)
+
+type CygxActivityAttendanceDetail struct {
+	AttendanceId          int       `orm:"column(attendance_id);pk;"description:"主键ID"`
+	ActivityId            int       `description:"活动ID"`
+	RealName              string    `description:"姓名"`
+	Mobile                string    `description:"手机号"`
+	CompanyName           string    `description:"公司名称"`
+	CompanyId             int       `description:"公司id 不在数据库的用户为0"`
+	SellerName            string    `description:"销售姓名"`
+	FirstMeetingTime      string    `description:"首次入会时间"`
+	LastMeetingTime       string    `description:"最后退出时间"`
+	Duration              string    `description:"参会时长"`
+	MeetingTypeStr        string    `description:"参会方式"`
+	MeetingAuthentication string    `description:"参会权鉴"`
+	MeetingStatusStr      string    `description:"参会状态"`
+	CreateTime            time.Time `description:"创建时间"`
+	Position              string    `description:"职位"`
+}
+
+//添加会议提醒信息
+func AddCygxActivityAttendanceDetail(item *CygxActivityAttendanceDetail) (lastId int64, err error) {
+	o := orm.NewOrm()
+	o.Begin()
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	var count int
+	var countMySchedule int
+	sql := `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE user_id=? AND activity_id=? `
+	err = o.Raw(sql, item, item.ActivityId).QueryRow(&countMySchedule)
+	if err != nil {
+		return
+	}
+	if countMySchedule == 0 {
+		itemMy := new(CygxMySchedule)
+		itemMy.ActivityId = item.ActivityId
+		itemMy.CreateTime = time.Now()
+		itemMy.Mobile = item.Mobile
+
+		itemMy.CompanyId = item.CompanyId
+		itemMy.CompanyName = item.CompanyName
+		lastId, err = o.Insert(itemMy)
+		if err != nil {
+			return
+		}
+	}
+	sql = `SELECT COUNT(1) AS count FROM cygx_activity_meeting_reminder WHERE user_id=? AND activity_id=? `
+	err = o.Raw(sql, item, item.ActivityId).QueryRow(&count)
+	if err != nil {
+		return
+	}
+	if count > 0 {
+		sql := `UPDATE cygx_activity_meeting_reminder SET is_cancel = 0  WHERE user_id=?  AND activity_id=? `
+		_, err = o.Raw(sql, item, item.ActivityId).Exec()
+	} else {
+		lastId, err = o.Insert(item)
+	}
+	itemLog := new(CygxActivityMeetingReminderLog)
+	//itemLog.UserId = item.UserId
+	itemLog.ActivityId = item.ActivityId
+	itemLog.CreateTime = time.Now()
+	itemLog.Mobile = item.Mobile
+	//itemLog.Email = item.Email
+	itemLog.CompanyId = item.CompanyId
+	itemLog.CompanyName = item.CompanyName
+	itemLog.Type = 1
+	lastId, err = o.Insert(itemLog)
+	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 time.Time `description:"路演开始时间"`
+	RoadshowEndTime   time.Time `description:"路演结束时间"`
+	JoinTime          int       `description:"参与时长"`
+	JoinType          int       `description:"参与方式, 1网络, 2电话"`
+	DataType          int       `description:"数据类型: 1直播, 2回放"`
+	Occupation        string    `description:"职位"`
+}
+
+func AddAttendancDetail(items []*CygxActivityAttendanceDetail, activityId int, mobileStr string) (err error) {
+	o := orm.NewOrm()
+	//o.Begin()
+	//defer func() {
+	//	fmt.Println(err)
+	//	if err == nil {
+	//		o.Commit()
+	//	} else {
+	//		o.Rollback()
+	//	}
+	//}()
+	//修改活动是否上传到会信息字段
+	sql := `UPDATE cygx_activity SET  is_submit_meeting=1   WHERE activity_id=? `
+	_, err = o.Raw(sql, activityId).Exec()
+	if err != nil {
+		return
+	}
+	//修改单个报名信息是否到会
+	sql = `UPDATE cygx_activity_signup SET  is_meeting=0   WHERE activity_id=? `
+	_, err = o.Raw(sql, activityId).Exec()
+	if err != nil {
+		return
+	}
+	sql = `UPDATE cygx_activity_signup SET  is_meeting=1   WHERE  activity_id=? AND outbound_mobile IN (` + mobileStr + `)`
+	_, err = o.Raw(sql, activityId).Exec()
+	if err != nil {
+		return
+	}
+	//二次上传时删除原有数据
+	sql = ` DELETE FROM cygx_activity_attendance_detail WHERE activity_id = ?`
+	_, err = o.Raw(sql, activityId).Exec()
+	if err != nil {
+		return
+	}
+	//插入提交信息
+	for _, v := range items {
+		_, err = o.Insert(v)
+		if err != nil {
+			return
+		}
+	}
+	return
+}
+
+//获取用户报名数量
+
+func GetRoadshowDataList(endDate string) (list []*RoadshowData, err error) {
+	o := orm.NewOrm()
+	o.Using("comein_data")
+	sql := `SELECT * FROM roadshow_data WHERE roadshow_title LIKE '%化学发光自身免疫产品&流水线市场情况%'`
+
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+type WxUserOutboundMobile struct {
+	CompanyId      int    `description:"公司ID"`
+	OutboundMobile string `description:"外呼手机号"`
+}
+
+func GetWxUserOutboundMobile(mobileStr string) (item []*WxUserOutboundMobile, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *  FROM wx_user WHERE mobile IN (` + mobileStr + `)`
+	_, err = o.Raw(sql).QueryRows(&item)
+	return
+}

+ 15 - 0
models/db.go

@@ -31,6 +31,20 @@ func init() {
 	tacticsDb, _ := orm.GetDB("tactics")
 	tacticsDb.SetConnMaxLifetime(10 * time.Minute)
 
+	orm.RegisterDataBase("comein_data", "mysql", utils.MYSQL_URL_COMEIN_DATA)
+	orm.SetMaxIdleConns("comein_data", 50)
+	orm.SetMaxOpenConns("comein_data", 100)
+
+	comein_dataDb, _ := orm.GetDB("comein_data")
+	comein_dataDb.SetConnMaxLifetime(10 * time.Minute)
+	//
+	//orm.RegisterDataBase("comein_data", "mysql", utils.MYSQL_URL_COMEIN_DATA)
+	//orm.SetMaxIdleConns("comein_data", 50)
+	//orm.SetMaxOpenConns("comein_data", 100)
+	//
+	//comein_dataDb, _ := orm.GetDB("comein_data")
+	//comein_dataDb.SetConnMaxLifetime(10 * time.Minute)
+
 	//注册对象
 	orm.RegisterModel(
 		new(WxUser),
@@ -68,5 +82,6 @@ func init() {
 		new(CygxReportIndustrialSeaarchHistory),
 		new(CygxArticleHistoryRecordNewpv),
 		new(CygxActivitySearchHistory),
+		new(CygxActivityAttendanceDetail),
 	)
 }

+ 83 - 0
services/activity.go

@@ -648,3 +648,86 @@ func LabelStr(label string) (labelNew string) {
 	}
 	return labelNew
 }
+
+func ActivityAttendanceDetail() {
+	//var mobileStr string
+	//needAddAttendanc := make([]*models.CygxActivityAttendanceDetail, 0)
+	fmt.Println("开始同步")
+	dateTime := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
+	fmt.Println(dateTime)
+	startDate := dateTime + " 00:00:00"
+	endDate := dateTime + " 23:59:59"
+	fmt.Println(startDate)
+	fmt.Println(endDate)
+	listActivity, err := models.GetActivityListByDateTime(startDate, endDate)
+	if err != nil {
+		fmt.Println("GetTacticsList Err:", err.Error())
+		return
+	}
+	for _, v := range listActivity {
+		fmt.Println(v.ActivityName)
+		fmt.Println(v.ActivityTime)
+	}
+
+	//list, err := models.GetRoadshowDataList("")
+	//list, err := models.GetTacticsListAll2()
+	//if err != nil {
+	//	fmt.Println("GetTacticsList Err:", err.Error())
+	//	return
+	//}
+	//mobileMap := make(map[string]string)
+
+	//activityId := 4
+	//for _, v := range list {
+	//	if v.UserPhone != "" {
+	//		item := new(models.CygxActivityAttendanceDetail)
+	//		item.ActivityId = activityId
+	//		item.RealName = v.UserName
+	//		item.Mobile = v.UserPhone
+	//		item.CompanyName = v.Company
+	//		//item.SellerName = sellerName
+	//		item.FirstMeetingTime = v.FirstWatchTime
+	//		item.LastMeetingTime = v.LastWatchTime
+	//		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 = "回放"
+	//		}
+	//		item.Position = v.Occupation
+	//		item.CreateTime = time.Now()
+	//		mobileStr += "'" + v.UserPhone + "'" + ","
+	//		needAddAttendanc = append(needAddAttendanc, item)
+	//	}
+	//}
+	//mobileStr = strings.TrimRight(mobileStr, ",")
+	//if mobileStr == "" {
+	//	mobileStr = "1"
+	//}
+	//listUser, err := models.GetWxUserOutboundMobile(mobileStr)
+	//if err != nil {
+	//	fmt.Println("GetWxUserOutboundMobile Err:", err.Error())
+	//	return
+	//}
+	//for k, v := range needAddAttendanc {
+	//	for _, v2 := range listUser {
+	//		if v2.OutboundMobile == v.Mobile {
+	//			needAddAttendanc[k].CompanyId = v2.CompanyId
+	//		}
+	//	}
+	//}
+	//
+	//fmt.Println(mobileStr)
+	//err = models.AddAttendancDetail(needAddAttendanc, activityId, mobileStr)
+	//if err != nil {
+	//	fmt.Println("AddAttendancDetail Err:", err.Error())
+	//	return
+	//}
+	fmt.Println("结束同步")
+}

+ 1 - 0
services/task.go

@@ -54,6 +54,7 @@ func Task() {
 		chageIndustrialArticleNum := task.NewTask("chageIndustrialArticleNum", "0 01 00 * * *", ChageIndustrialArticleNum) //更改对应产业的文章阅读数量
 		task.AddTask("chageIndustrialArticleNum", chageIndustrialArticleNum)
 	}
+	ActivityAttendanceDetail()
 	//SynchronizationArthistory()//同步原有的阅读记录
 	//GetAddpArticle() //同步日度点评数据
 	task.StartTask()

+ 29 - 2
utils/common.go

@@ -613,11 +613,11 @@ func Mp3Time(videoPlaySeconds string) string {
 	var timeStr string
 	a, _ := strconv.ParseFloat(videoPlaySeconds, 32)
 	b := int(a)
-	c := b % 60
-	d = b / 60
 	if b <= 60 {
 		timeStr = "00:" + strconv.Itoa(b)
 	} else {
+		c := b % 60
+		d = b / 60
 		if d < 10 {
 			timeStr = "0" + strconv.Itoa(d) + ":" + strconv.Itoa(c)
 		} else {
@@ -626,3 +626,30 @@ func Mp3Time(videoPlaySeconds string) string {
 	}
 	return timeStr
 }
+
+//用户参会时间转换
+func GetAttendanceDetailSeconds(secondNum int) string {
+	var timeStr string
+	if secondNum <= 60 {
+		if secondNum <= 10 {
+			timeStr = "0" + strconv.Itoa(secondNum) + "''"
+		} else {
+			timeStr = strconv.Itoa(secondNum) + "''"
+		}
+	} else {
+		var remainderStr string
+		remainderNum := secondNum % 60
+		minuteNum := secondNum / 60
+		if remainderNum <= 10 {
+			remainderStr = "0" + strconv.Itoa(remainderNum) + "''"
+		} else {
+			remainderStr = strconv.Itoa(remainderNum) + "''"
+		}
+		if minuteNum < 10 {
+			timeStr = "0" + strconv.Itoa(minuteNum) + "'" + remainderStr
+		} else {
+			timeStr = strconv.Itoa(minuteNum) + "'" + remainderStr
+		}
+	}
+	return timeStr
+}

+ 6 - 4
utils/config.go

@@ -7,10 +7,11 @@ import (
 )
 
 var (
-	RunMode           string //运行模式
-	MYSQL_URL         string //数据库连接
-	MYSQL_URL_RDDP    string //数据库连接
-	MYSQL_URL_TACTICS string
+	RunMode               string //运行模式
+	MYSQL_URL             string //数据库连接
+	MYSQL_URL_RDDP        string //数据库连接
+	MYSQL_URL_TACTICS     string
+	MYSQL_URL_COMEIN_DATA string // 路演记录数据库
 
 	REDIS_CACHE string       //缓存地址
 	Rc          *cache.Cache //redis缓存
@@ -75,6 +76,7 @@ func init() {
 	MYSQL_URL = config["mysql_url"]
 	MYSQL_URL_RDDP = config["mysql_url_rddp"]
 	MYSQL_URL_TACTICS = config["mysql_url_tactics"]
+	MYSQL_URL_COMEIN_DATA = config["mysql_url_comein_data"]
 
 	REDIS_CACHE = config["beego_cache"]
 	if len(REDIS_CACHE) <= 0 {