Browse Source

新增路演公开会议总览定时任务

longyu 2 years ago
parent
commit
ccabf847c6
3 changed files with 190 additions and 32 deletions
  1. 79 8
      models/roadshow/public_meeting.go
  2. 106 20
      services/roadshow/public_meeting.go
  3. 5 4
      services/task.go

+ 79 - 8
models/roadshow/public_meeting.go

@@ -6,13 +6,22 @@ import (
 
 //公开会议总览
 
+//公开会议总览
+
+type PublicMeetingView struct {
+	RsCalendarId int    `description:"日历活动id"`
+	MinTime      string `description:"活动最小时间"`
+	MaxTime      string `description:"活动最大时间"`
+}
+
 //获取公开会议
-func GetPublicMeetingList(endDate string) (list []*RsCalendarResearcher, err error) {
-	sql := ` SELECT b.* FROM rs_calendar AS a
+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>=?
-			ORDER BY a.rs_calendar_id ASC  `
+			group by a.rs_calendar_id  `
 	o := orm.NewOrm()
 	_, err = o.Raw(sql, endDate).QueryRows(&list)
 	return
@@ -33,11 +42,73 @@ func ModifyCalendarUnionCode(unionCode string, rsCalendarId int) (err error) {
 	return
 }
 
-func GetCoincideMeeting(startTime, endTime string) (list []*RsCalendarResearcher, err error) {
-	sql := ` SELECT * 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') `
+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).QueryRows(&list)
+	err = o.Raw(sql, startTime, endTime).QueryRow(&union_code)
 	return
 }

+ 106 - 20
services/roadshow/public_meeting.go

@@ -1,26 +1,81 @@
 package roadshow
 
 import (
+	"context"
 	"fmt"
 	"hongze/hongze_task/models/roadshow"
 	"hongze/hongze_task/utils"
 	"strconv"
 	"time"
-	"context"
 )
 
-func SetPublicMeetingUnionCode(cont context.Context)(err error) {
-	now:=time.Now().Format(utils.FormatDate)
+//
+//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.GetRsCalendarResearcherById(v.RsCalendarResearcherId)
+		calendarResearchItem, err := roadshow.GetRsCalendarById(v.RsCalendarId)
 		if err != nil {
 			fmt.Println("GetRsCalendarById Err:" + err.Error())
-			return
+			return err
 		}
 		if calendarResearchItem == nil {
 			continue
@@ -28,27 +83,58 @@ func SetPublicMeetingUnionCode(cont context.Context)(err error) {
 		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)
+		unionCode = utils.MD5(unionCodeStr)
+
 		err = roadshow.ModifyCalendarUnionCode(unionCode, v.RsCalendarId)
 		if err != nil {
 			fmt.Println("ModifyCalendarUnionCode Err:" + err.Error())
-			return
+			return err
 		}
-		startDateTime := v.StartDate + " " + v.StartTime
-		endDateTime := v.EndDate + " " + v.EndTime
-		coincideList, err := roadshow.GetCoincideMeeting(startDateTime, endDateTime)
+		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 {
-			return
+			fmt.Println("GetRsCalendarById Err:" + err.Error())
+			return err
 		}
-		for _, cv := range coincideList {
-			err = roadshow.ModifyCalendarUnionCode(unionCode, cv.RsCalendarId)
-			if err != nil {
-				fmt.Println("ModifyCalendarUnionCode Err:" + err.Error())
-				return
-			}
+		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
 		}
 	}
-	return
+	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
 }

+ 5 - 4
services/task.go

@@ -16,7 +16,7 @@ import (
 	"time"
 )
 
-func Task123() {
+func Task() {
 	fmt.Println("task start")
 	//如果是生产环境,才需要走这些任务
 	if utils.RunMode == "release" {
@@ -94,8 +94,8 @@ func Task123() {
 	task.AddTask("roadShowTotal", roadShowTotal)
 
 	//路演公开会议合并
-	//setPublicMeetingUnionCode := task.NewTask("setPublicMeetingUnionCode", "0 */30 * * * *", roadshow.SetPublicMeetingUnionCode)
-	//task.AddTask("setPublicMeetingUnionCode", setPublicMeetingUnionCode)
+	setPublicMeetingUnionCode := task.NewTask("setPublicMeetingUnionCode", "0 */10 * * * *", roadshow.SetPublicMeetingUnionCode)
+	task.AddTask("setPublicMeetingUnionCode", setPublicMeetingUnionCode)
 
 	task.StartTask()
 
@@ -104,7 +104,8 @@ func Task123() {
 
 //func Task() {
 //	fmt.Println("start")
-//	roadshow.SetPublicMeetingUnionCode()
+//	cont := new(context.Context)
+//	roadshow.SetPublicMeetingUnionCode(*cont)
 //	fmt.Println("end")
 //}