Добавлено: грамотная группировка пар и вывод расписания на день

This commit is contained in:
far-galaxy 2023-03-14 10:19:26 +04:00
parent 3a3479b6e3
commit 97c66c49bc
1 changed files with 61 additions and 25 deletions

View File

@ -35,55 +35,87 @@ func (bot *Bot) GetSummary() {
groups_str := strings.Join(groups, ",") groups_str := strings.Join(groups, ",")
bot.DB. bot.DB.
Where("begin > ?", now.Format("2006-01-02 15:04:05")). Where("end > ?", now.Format("2006-01-02 15:04:05")).
And("groupId in (?) or teacherId in (?)", groups_str, teachers_str). And("groupId in (?) or teacherId in (?)", groups_str, teachers_str).
OrderBy("begin"). OrderBy("begin").
Limit(6). Limit(16).
Find(&lessons) Find(&lessons)
log.Println(lessons) log.Println(lessons)
if len(lessons) != 0 { if len(lessons) != 0 {
var firstPair, secondPair []database.Lesson var firstPair, secondPair []database.Lesson
l_idx := 0 pairs := GroupPairs(lessons)
day := lessons[0].Begin firstPair = pairs[0]
// Я хз, надо ли упарываться для случаев с более чем двумя подпарами secondPair = pairs[1]
for lessons[l_idx].Begin == day && l_idx < len(lessons) {
firstPair = append(firstPair, lessons[l_idx])
l_idx++
}
if l_idx < len(lessons) {
day = lessons[l_idx].Begin
for lessons[l_idx].Begin == day && l_idx < len(lessons) {
secondPair = append(secondPair, lessons[l_idx])
l_idx++
}
}
log.Println(firstPair, secondPair) log.Println(firstPair, secondPair)
var str string var str string
if firstPair[0].Begin.Day() != time.Now().Day() { if pairs[0][0].Begin.Day() != time.Now().Day() {
str = "❗️Сегодня пар нет\nБлижайшие занятия " str = "❗️Сегодня пар нет\nБлижайшие занятия "
if time.Until(firstPair[0].Begin).Hours() < 48 { if time.Until(firstPair[0].Begin).Hours() < 48 {
str += "завтра\n" str += "завтра\n"
} else { } else {
str += fmt.Sprintf("%s\n\n", firstPair[0].Begin.Format("02.01")) str += fmt.Sprintf("%s\n\n", firstPair[0].Begin.Format("02.01"))
} }
day, _ := bot.GetDayShedule(pairs)
str += day
} else {
str = "Сводка на сегодня\n\n"
day, _ := bot.GetDayShedule(pairs)
str += day
/*
firstPairStr, _ := PairToStr(firstPair, &bot.DB)
str += firstPairStr
if len(secondPair) != 0 && firstPair[0].Begin.Day() == secondPair[0].Begin.Day() {
secondPairStr, _ := PairToStr(secondPair, &bot.DB)
str += "\n--\n" + secondPairStr
}
*/
} }
firstPairStr, _ := PairToStr(firstPair, &bot.DB)
str += firstPairStr
if len(secondPair) != 0 && firstPair[0].Begin.Day() == secondPair[0].Begin.Day() {
secondPairStr, _ := PairToStr(secondPair, &bot.DB)
str += secondPairStr
}
msg := tgbotapi.NewMessage(bot.TG_user.TgId, str) msg := tgbotapi.NewMessage(bot.TG_user.TgId, str)
bot.TG.Send(msg) bot.TG.Send(msg)
} }
} }
func (bot *Bot) GetDayShedule(lessons [][]database.Lesson) (string, error) {
var str string
day := lessons[0][0].Begin.Day()
for _, pair := range lessons {
if pair[0].Begin.Day() == day {
line, err := PairToStr(pair, &bot.DB)
if err != nil {
return "", err
}
str += line
} else {
break
}
}
return str, nil
}
func GroupPairs(lessons []database.Lesson) [][]database.Lesson {
var shedule [][]database.Lesson
var pair []database.Lesson
l_idx := 0
for l_idx < len(lessons) {
day := lessons[l_idx].Begin
for l_idx < len(lessons) && lessons[l_idx].Begin == day {
pair = append(pair, lessons[l_idx])
l_idx++
}
shedule = append(shedule, pair)
pair = []database.Lesson{}
}
return shedule
}
func PairToStr(pair []database.Lesson, db *xorm.Engine) (string, error) { func PairToStr(pair []database.Lesson, db *xorm.Engine) (string, error) {
var str string var str string
beginStr := pair[0].Begin.Format("15:04") beginStr := pair[0].Begin.Format("15:04")
@ -123,7 +155,11 @@ func PairToStr(pair []database.Lesson, db *xorm.Engine) (string, error) {
if sublesson.Comment != "" { if sublesson.Comment != "" {
str += fmt.Sprintf("💬%s\n", sublesson.Comment) str += fmt.Sprintf("💬%s\n", sublesson.Comment)
} }
str += "--------------------------------\n" if len(pair) > 1 {
str += "+\n"
}
} }
str += "--------------------------------\n"
return str, nil return str, nil
} }