package tasks import ( "fmt" "go-wechat/client" "go-wechat/config" "go-wechat/entity" "go-wechat/utils" "log" "strings" "time" ) // week // @description: 周排行榜 func week() { for _, id := range config.Conf.Task.WaterGroup.Groups { // 消息统计 dealWeek(id) // 获取上周周数 year, weekNo := time.Now().Local().AddDate(0, 0, -1).ISOWeek() // 发送词云 fileName := fmt.Sprintf("%d%d_%s.png", year, weekNo, id) utils.SendImage(id, "D:\\Share\\wordcloud\\"+fileName, 0) } } // dealWeek // @description: 处理请求 // @param gid func dealWeek(gid string) { notifyMsgs := []string{"#上周水群排行榜"} // 获取上周消息总数 var yesterdayMsgCount int64 err := client.MySQL.Model(&entity.Message{}). Where("from_user = ?", gid). Where("type < 10000"). Where("YEARWEEK(date_format(create_at, '%Y-%m-%d')) = YEARWEEK(now()) - 1"). Count(&yesterdayMsgCount).Error if err != nil { log.Printf("获取上周消息总数失败, 错误信息: %v", err) return } log.Printf("上周消息总数: %d", yesterdayMsgCount) if yesterdayMsgCount == 0 { return } notifyMsgs = append(notifyMsgs, " ") notifyMsgs = append(notifyMsgs, fmt.Sprintf("上周消息总数: %d", yesterdayMsgCount)) // 返回数据 type record struct { GroupUser string Nickname string Count int64 } var records []record tx := client.MySQL.Table("t_message AS tm"). Joins("LEFT JOIN t_group_user AS tgu ON tgu.wxid = tm.group_user AND tm.from_user = tgu.group_id"). Select("tm.group_user", "tgu.nickname", "count( 1 ) AS `count`"). Where("tm.from_user = ?", gid). Where("tm.type < 10000"). Where("YEARWEEK(date_format(tm.create_at, '%Y-%m-%d')) = YEARWEEK(now()) - 1"). Group("tm.group_user, tgu.nickname").Order("`count` DESC"). Limit(10) // 黑名单 blacklist := config.Conf.Task.WaterGroup.Blacklist // 如果有黑名单,过滤掉 if len(blacklist) > 0 { tx.Where("tm.group_user NOT IN (?)", blacklist) } err = tx.Find(&records).Error if err != nil { log.Printf("获取上周消息失败, 错误信息: %v", err) return } notifyMsgs = append(notifyMsgs, " ") for i, r := range records { log.Printf("账号: %s[%s] -> %d", r.Nickname, r.GroupUser, r.Count) notifyMsgs = append(notifyMsgs, fmt.Sprintf("#%d: %s -> %d条", i+1, r.Nickname, r.Count)) } notifyMsgs = append(notifyMsgs, " \n请未上榜的群友多多反思。") log.Printf("排行榜: \n%s", strings.Join(notifyMsgs, "\n")) go utils.SendMessage(gid, "", strings.Join(notifyMsgs, "\n"), 0) }