Browse Source

新增公开路演统计

longyu 2 years ago
parent
commit
48fba81cc5
4 changed files with 300 additions and 4 deletions
  1. 40 1
      models/roadshow/calendar.go
  2. 114 0
      models/roadshow/public_meeting.go
  3. 140 0
      services/roadshow/public_meeting.go
  4. 6 3
      services/task.go

+ 40 - 1
models/roadshow/calendar.go

@@ -1,8 +1,8 @@
 package roadshow
 
 import (
-	"time"
 	"github.com/rdlucklib/rdluck_tools/orm"
+	"time"
 )
 
 type RsCalendarResearcher struct {
@@ -22,6 +22,7 @@ type RsCalendarResearcher struct {
 	RefuseReason           string    `description:"拒绝理由"`
 	RefuseTime             time.Time `description:"拒绝时间"`
 	DeleteReason           string    `description:"删除理由"`
+	UnionCode              string    `description:"公开会议联合编码"`
 }
 
 func GetRsCalendarResearcher(endDate, endTime string) (list []*RsCalendarResearcher, err error) {
@@ -67,4 +68,42 @@ func ModifyRsMattersStatus(rsMattersId int) (err error) {
 	o := orm.NewOrm()
 	_, err = o.Raw(sql, rsMattersId).Exec()
 	return
+}
+
+type RsCalendar struct {
+	RsCalendarId     int    `orm:"column(rs_calendar_id);pk"`
+	SysUserId        int    `description:"创建人id"`
+	SysUserRealName  string `description:"创建人名称"`
+	ActivityType     string `description:"活动类型"`
+	RoadshowType     string `description:"路演形式"`
+	RoadshowPlatform string `description:"路演平台"`
+	CompanyId        int    `description:"客户id"`
+	CompanyName      string `description:"客户名称"`
+	Province         string `description:"省"`
+	ProvinceCode     string `description:"省编码"`
+	City             string `description:"市"`
+	CityCode         string `description:"市编码"`
+	Theme            string `description:"会议主题"`
+	CooperationName  string `description:"合作方名称"`
+	Title            string `description:"展示在日历的标题"`
+	Source           int8   `description:"来源,0:自系统,1:上海方的"`
+	CreateTime       time.Time
+	ModifyTime       time.Time
+	ActivityCategory string `description:"活动类别"`
+	IsSynced         int    `description:"是否与上海同步 0:未同步 1:已同步"`
+	UnionCode        string `description:"公开会议联合编码"`
+}
+
+func GetRsCalendarById(rsCalendarId int) (item *RsCalendar, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM rs_calendar WHERE rs_calendar_id=? `
+	err = o.Raw(sql, rsCalendarId).QueryRow(&item)
+	return
+}
+
+func GetRsCalendarResearcherById(rsCalendarId int) (item *RsCalendarResearcher, err error) {
+	sql := `SELECT * FROM rs_calendar_researcher WHERE rs_calendar_researcher_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sql, rsCalendarId).QueryRow(&item)
+	return
 }

+ 114 - 0
models/roadshow/public_meeting.go

@@ -0,0 +1,114 @@
+package roadshow
+
+import (
+	"github.com/rdlucklib/rdluck_tools/orm"
+)
+
+//公开会议总览
+
+//公开会议总览
+
+type PublicMeetingView struct {
+	RsCalendarId int    `description:"日历活动id"`
+	MinTime      string `description:"活动最小时间"`
+	MaxTime      string `description:"活动最大时间"`
+}
+
+//获取公开会议
+func GetPublicMeetingList(endDate string) (list []*PublicMeetingView, err error) {
+	sql := ` SELECT a.rs_calendar_id,min(DATE_FORMAT(CONCAT(b.start_date," ",b.start_time),'%Y-%m-%d %H:%i:%S')) AS min_time,max(DATE_FORMAT(CONCAT(b.end_date," ",b.end_time),'%Y-%m-%d %H:%i:%S')) AS max_time
+			FROM rs_calendar AS a
+			INNER JOIN rs_calendar_researcher AS b ON a.rs_calendar_id=b.rs_calendar_id
+			WHERE a.source=0 AND activity_type='公开会议'
+			AND b.end_date>=?
+			group by a.rs_calendar_id  `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, endDate).QueryRows(&list)
+	return
+}
+
+func ModifyCalendarUnionCode(unionCode string, rsCalendarId int) (err error) {
+	sql := ` UPDATE rs_calendar SET union_code=? WHERE rs_calendar_id=? `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, unionCode, rsCalendarId).Exec()
+	if err != nil {
+		return err
+	}
+	sql = ` UPDATE rs_calendar_researcher SET union_code=? WHERE rs_calendar_id=? `
+	_, err = o.Raw(sql, unionCode, rsCalendarId).Exec()
+	if err != nil {
+		return err
+	}
+	return
+}
+
+func GetCoincideMeeting(startTime, endTime string) (list []*PublicMeetingView, err error) {
+	sql := ` SELECT * FROM (
+			SELECT a.rs_calendar_id,MIN(DATE_FORMAT(CONCAT(b.start_date," ",b.start_time),'%Y-%m-%d %H:%i:%S')) AS min_time,MAX(DATE_FORMAT(CONCAT(b.end_date," ",b.end_time),'%Y-%m-%d %H:%i:%S')) AS max_time
+						FROM rs_calendar AS a
+						INNER JOIN rs_calendar_researcher AS b ON a.rs_calendar_id=b.rs_calendar_id
+						WHERE a.source=0 AND activity_type='公开会议'
+						GROUP BY a.rs_calendar_id
+			) AS t
+			WHERE (t.min_time<=? AND t.max_time>=?) OR (?>=t.min_time AND ?<=t.max_time) or 
+(t.min_time >= ? AND t.max_time <=?) `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, startTime, startTime, endTime, endTime, startTime, endTime).QueryRows(&list)
+	return
+}
+
+func GetCoincideMeetingMinAndMaxTime(startTime, endTime string) (min_time, max_time string, err error) {
+	sql := ` select min(t.min_time) as min_time,max(t.max_time) as max_time from (
+			SELECT a.rs_calendar_id,MIN(DATE_FORMAT(CONCAT(b.start_date," ",b.start_time),'%Y-%m-%d %H:%i:%S')) AS min_time,MAX(DATE_FORMAT(CONCAT(b.end_date," ",b.end_time),'%Y-%m-%d %H:%i:%S')) AS max_time
+						FROM rs_calendar AS a
+						INNER JOIN rs_calendar_researcher AS b ON a.rs_calendar_id=b.rs_calendar_id
+						WHERE a.source=0 AND activity_type='公开会议'
+						GROUP BY a.rs_calendar_id
+			)as t
+			where (t.min_time<=? AND t.max_time>=?) OR (?>=t.min_time AND ?<=t.max_time) `
+	o := orm.NewOrm()
+	err = o.Raw(sql, startTime, startTime, endTime, endTime).QueryRow(&min_time, &max_time)
+	return
+}
+
+func ClearCalendarUnionCode(nowDate string) (err error) {
+	o := orm.NewOrm()
+	var rs_calendar_id string
+	sql := `SELECT group_concat(distinct a.rs_calendar_id) AS rs_calendar_id FROM rs_calendar AS a
+			INNER JOIN rs_calendar_researcher AS b ON a.rs_calendar_id=b.rs_calendar_id
+			WHERE a.source=0 AND activity_type='公开会议'
+			AND b.end_date>=? `
+	err = o.Raw(sql, nowDate).QueryRow(&rs_calendar_id)
+
+	sql = ` UPDATE rs_calendar SET union_code='' WHERE rs_calendar_id IN(` + rs_calendar_id + `) `
+
+	_, err = o.Raw(sql).Exec()
+	if err != nil {
+		return err
+	}
+	sql = ` UPDATE rs_calendar_researcher SET union_code='' WHERE rs_calendar_id IN(` + rs_calendar_id + `) `
+	_, err = o.Raw(sql).Exec()
+	if err != nil {
+		return err
+	}
+	return
+}
+
+/*
+sql := ` SELECT b.* FROM rs_calendar AS a
+			INNER JOIN rs_calendar_researcher AS b ON a.rs_calendar_id=b.rs_calendar_id
+			WHERE a.source=0 AND activity_type='公开会议'
+			AND b.end_date>=?
+			ORDER BY a.rs_calendar_id ASC  `
+*/
+
+func GetExistMeetingCode(startTime, endTime string) (union_code string, err error) {
+	sql := ` SELECT union_code FROM rs_calendar_researcher AS a
+			WHERE DATE_FORMAT(CONCAT(a.start_date," ",a.start_time),'%Y-%m-%d %H:%i:%S')>=?
+			AND DATE_FORMAT(CONCAT(a.end_date," ",a.end_time),'%Y-%m-%d %H:%i:%S')<=?
+			group by a.union_code
+			LIMIT 1 `
+	o := orm.NewOrm()
+	err = o.Raw(sql, startTime, endTime).QueryRow(&union_code)
+	return
+}

+ 140 - 0
services/roadshow/public_meeting.go

@@ -0,0 +1,140 @@
+package roadshow
+
+import (
+	"context"
+	"fmt"
+	"hongze/hongze_task/models/roadshow"
+	"hongze/hongze_task/utils"
+	"strconv"
+	"time"
+)
+
+//
+//func SetPublicMeetingUnionCode(cont context.Context) (err error) {
+//	now := time.Now().Format(utils.FormatDate)
+//	list, err := roadshow.GetPublicMeetingList(now)
+//	if err != nil {
+//		return
+//	}
+//
+//	for _, v := range list {
+//		calendarResearchItem, err := roadshow.GetRsCalendarResearcherById(v.RsCalendarResearcherId)
+//		if err != nil {
+//			fmt.Println("GetRsCalendarById Err:" + err.Error())
+//			return
+//		}
+//		if calendarResearchItem == nil {
+//			continue
+//		}
+//		var unionCode string
+//		if calendarResearchItem.UnionCode != "" {
+//			unionCode = calendarResearchItem.UnionCode
+//		} else {
+//			//生成当前公开会议联合编码
+//			unionCodeStr := strconv.Itoa(v.RsCalendarId) + "_" + strconv.Itoa(int(time.Now().Unix()))
+//			unionCode = utils.MD5(unionCodeStr)
+//		}
+//
+//		err = roadshow.ModifyCalendarUnionCode(unionCode, v.RsCalendarId)
+//		if err != nil {
+//			fmt.Println("ModifyCalendarUnionCode Err:" + err.Error())
+//			return
+//		}
+//		startDateTime := v.StartDate + " " + v.StartTime
+//		endDateTime := v.EndDate + " " + v.EndTime
+//		coincideList, err := roadshow.GetCoincideMeeting(startDateTime, endDateTime)
+//		if err != nil {
+//			return
+//		}
+//		for _, cv := range coincideList {
+//			if cv.UnionCode != unionCode {
+//				err = roadshow.ModifyCalendarUnionCode(unionCode, cv.RsCalendarId)
+//				if err != nil {
+//					fmt.Println("ModifyCalendarUnionCode Err:" + err.Error())
+//					return
+//				}
+//			}
+//		}
+//	}
+//	return
+//}
+
+func SetPublicMeetingUnionCode(cont context.Context) (err error) {
+	fmt.Println("start SetPublicMeetingUnionCode"+time.Now().Format(utils.FormatDateTime))
+	now := time.Now().AddDate(-1,0,0).Format(utils.FormatDate)
+	//清空现有分组
+	err = roadshow.ClearCalendarUnionCode(now)
+	if err != nil {
+		return
+	}
+	list, err := roadshow.GetPublicMeetingList(now)
+	if err != nil {
+		return
+	}
+	for _, v := range list {
+		calendarResearchItem, err := roadshow.GetRsCalendarById(v.RsCalendarId)
+		if err != nil {
+			fmt.Println("GetRsCalendarById Err:" + err.Error())
+			return err
+		}
+		if calendarResearchItem == nil {
+			continue
+		}
+		if calendarResearchItem.UnionCode != "" {
+			continue
+		}
+		startDateTime := v.MinTime
+		endDateTime := v.MaxTime
+
+		var unionCode string
+		unionCodeStr := strconv.Itoa(v.RsCalendarId) + "_" + strconv.Itoa(int(time.Now().Unix()))
+		unionCode = utils.MD5(unionCodeStr)
+
+		err = roadshow.ModifyCalendarUnionCode(unionCode, v.RsCalendarId)
+		if err != nil {
+			fmt.Println("ModifyCalendarUnionCode Err:" + err.Error())
+			return err
+		}
+		fmt.Println("SetCoincideMeeting:", startDateTime, endDateTime)
+		SetCoincideMeeting(startDateTime, endDateTime, unionCode)
+	}
+	fmt.Println("end SetPublicMeetingUnionCode"+time.Now().Format(utils.FormatDateTime))
+	return
+}
+
+func SetCoincideMeeting(startDateTime, endDateTime, unionCode string) (err error) {
+	coincideList, err := roadshow.GetCoincideMeeting(startDateTime, endDateTime)
+	if err != nil {
+		return err
+	}
+	for _, cv := range coincideList {
+		calendarResearchItem, err := roadshow.GetRsCalendarById(cv.RsCalendarId)
+		if err != nil {
+			fmt.Println("GetRsCalendarById Err:" + err.Error())
+			return err
+		}
+		if calendarResearchItem == nil {
+			continue
+		}
+		if calendarResearchItem.UnionCode != "" {
+			continue
+		}
+		fmt.Println("RsCalendarId:", cv.RsCalendarId)
+		err = roadshow.ModifyCalendarUnionCode(unionCode, cv.RsCalendarId)
+		if err != nil {
+			fmt.Println("ModifyCalendarUnionCode Err:" + err.Error())
+			return err
+		}
+	}
+	minTime, maxTime, err := roadshow.GetCoincideMeetingMinAndMaxTime(startDateTime, endDateTime)
+	if minTime == startDateTime && maxTime == endDateTime {
+		return err
+	} else {
+		startDateTime = minTime
+		endDateTime = maxTime
+		SetCoincideMeeting(startDateTime, endDateTime, unionCode)
+	}
+	fmt.Println("结束循环")
+	fmt.Println(startDateTime, endDateTime, minTime, maxTime)
+	return err
+}

+ 6 - 3
services/task.go

@@ -93,8 +93,6 @@ func Task() {
 	addCompanyReportRecord := task.NewTask("addCompanyReportRecord", "0 0 */1 * * *", company.AddCompanyReportRecord)
 	task.AddTask("addCompanyReportRecord", addCompanyReportRecord)
 
-	task.StartTask()
-
 	//CRM 6.3 客户列表路演次数统计
 	roadShowTotal := task.NewTask("roadShowTotal", "0 */30 * * * *", roadshow.RoadShow)
 	task.AddTask("roadShowTotal", roadShowTotal)
@@ -102,6 +100,11 @@ func Task() {
 	//每半个小时用户阅读数据统计
 	statisticsUserView1Hour := task.NewTask("statisticsUserView1Hour", "0 */30 * * * *", StatisticsUserView1Hour)
 	task.AddTask("每半个小时用户阅读数据统计", statisticsUserView1Hour)
+
+	//路演公开会议合并
+	setPublicMeetingUnionCode := task.NewTask("setPublicMeetingUnionCode", "0 */10 * * * *", roadshow.SetPublicMeetingUnionCode)
+	task.AddTask("setPublicMeetingUnionCode", setPublicMeetingUnionCode)
+
 	task.StartTask()
 
 	fmt.Println("task end")
@@ -110,7 +113,7 @@ func Task() {
 //func Task() {
 //	fmt.Println("start")
 //	cont := new(context.Context)
-//	company.AddCompanyReportRecord(*cont)
+//	roadshow.SetPublicMeetingUnionCode(*cont)
 //	fmt.Println("end")
 //}