group_support.go 2.26 KB
Newer Older
chenweijian's avatar
chenweijian committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
package group_cron

import (
	"encoding/json"
	"git.hilo.cn/hilo-common/domain"
	"git.hilo.cn/hilo-common/resource/config"
	"git.hilo.cn/hilo-common/sdk/tencentyun"
	"git.hilo.cn/hilo-common/utils"
	"github.com/robfig/cron"
	"hilo-group/_const/enum/group_e"
	"hilo-group/domain/model/group_m"
	"hilo-group/domain/service/group_s"
	"time"
)

// 群组扶持计算
func CalcGroupSupport() {
	if !config.IsMaster() {
		return
	}
	c := cron.New()
	//北京时间周一0点,过了一秒后,
	spec := "1 0 0 * * 1"
	_ = c.AddFunc(spec, func() {
		defer utils.CheckGoPanic()
		var model = domain.CreateModelNil()
		//开始
		model.Log.Infof("cron CalcGroupSupport start")

		calcTime := time.Now().AddDate(0, 0, -1)
		if err := group_s.NewGroupService(model.MyContext).GroupSupportResult(calcTime); err != nil {
			model.Log.Errorf("cron CalcGroupSupport faild calcTime:%v, err:%v", calcTime, err)
			return
		}
		model.Log.Infof("cron CalcGroupSupport after GroupSupportResult")

		//全服发送H5
		if err := sendGroupSupportH5(domain.CreateModelContext(model.MyContext)); err != nil {
			model.Log.Errorf("cron CalcGroupSupport err:%v", err)
		} else {
			model.Log.Infof("cron CalcGroupSupport success")
		}
	})

	c.Start()
}

func sendGroupSupportH5(model *domain.Model) error {
	groupIds, err := group_m.GetAllGroupsSorted(model)
	if err != nil {
		return err
	}

	model.Log.Infof("SendGroupSupportH5 groupIds:%v", groupIds)

	groupSupportH5 := group_m.GroupSupportH5{
		CommonPublicMsg: group_m.CommonPublicMsg{
			Type: group_e.GroupSupportH5,
		},
		H5: config.GetH5Config().GROUP_SUPPORT,
	}
	buffer, err := json.Marshal(groupSupportH5)
	if err != nil {
		model.Log.Errorf("publicScreenMsg AddSendGiftAsync json.Marshal(giftContent) err:%v", err)
		return err
	}
	content := string(buffer)

	//策略1:for循环,没有开启协程,100个停一下
	for i, _ := range groupIds {
		func(groupId string, content string) {
			defer utils.CheckGoPanic()
			model.Log.Infof("SendGroupSupportH5 groupId:%v", groupId)
			txGroupId, err := group_m.ToTxGroupId(model, groupId)
			// 公屏消息
			if err == nil {
				tencentyun.SendCustomMsg(model.Log, txGroupId, nil, content, "")
			}
		}(groupIds[i], content)

		if i != 0 && i%100 == 0 {
			//躺平1秒
			time.Sleep(1 * time.Second)
		}
	}
	return nil
}