2025-04-28 15:56:04 +08:00

109 lines
3.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package smdl
import (
"admin/apps/game/domain/entity"
"admin/apps/game/domain/repo"
"admin/apps/game/model"
"admin/apps/game/model/dto"
"admin/internal/errcode"
"admin/lib/httpclient"
"admin/lib/xlog"
"net/url"
"strconv"
"strings"
)
type MailGlobalHook struct {
}
func (hook *MailGlobalHook) Create(projectInfo *entity.Project, resource string, dtoObj dto.CommonDtoValues) error {
alisrvAddr := projectInfo.GetApiAddr()
if alisrvAddr == "" {
return errcode.New(errcode.ServerError, "项目%v没有配置api服务器地址", projectInfo.ProjectPo.Name)
}
et := (&entity.CommonResource{}).FromPo(&model.GlobalMail{}).FromDto(dtoObj)
mailInfo := et.ToPo().(*model.GlobalMail)
itemIdStr := ""
itemNumStr := ""
if len(mailInfo.Attach) == 1 {
itemIdStr = strconv.FormatInt(int64(mailInfo.Attach[0].ID), 10)
itemNumStr = strconv.FormatInt(mailInfo.Attach[0].Num, 10)
} else if len(mailInfo.Attach) > 1 {
// 多个道具附件itemid格式就是id@num@id@num@id@num...
itemWordList := make([]string, 0, len(mailInfo.Attach)*2)
for _, v := range mailInfo.Attach {
itemWordList = append(itemWordList, strconv.FormatInt(int64(v.ID), 10), strconv.FormatInt(v.Num, 10))
}
itemIdStr = strings.Join(itemWordList, "@")
itemNumStr = "-1"
} else {
itemIdStr = "0"
}
var serverIds []string
serverIdsLen := len(mailInfo.ServerIDs)
switch {
case serverIdsLen == 0:
// 为空就发给所有服
serverList, err := repo.ServerRepoInstance.List(projectInfo.ProjectPo.ProjectId)
if err != nil {
xlog.Errorf("list all server by project:%v error:%v", projectInfo.ProjectPo.ProjectId, err)
return errcode.New(errcode.ServerError, "list all server by project:%v error:%v", projectInfo.ProjectPo.ProjectId, err)
}
for _, v := range serverList {
serverIds = append(serverIds, v.ToPo().(*model.Server).ServerConfID)
}
case serverIdsLen > 0:
for _, v := range mailInfo.ServerIDs {
serverIds = append(serverIds, v)
}
}
params := &url.Values{}
params.Add("itemid", itemIdStr)
params.Add("itemnum", itemNumStr)
params.Add("mailtitle", mailInfo.Title)
params.Add("mailcontent", mailInfo.Content)
// 通知对应服务器
for _, serverId := range serverIds {
serverIdInt, _ := strconv.Atoi(serverId)
if serverIdInt == 0 || serverIdInt%10000 > 500 {
// 过滤掉20801 28802这些跨服
continue
}
params.Set("server", serverId)
xlog.Debugf("通知神魔大陆区服%v添加邮件:%v", serverId, params.Encode())
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/mail_global", "get", params, &rsp)
if err != nil {
return errcode.New(errcode.ServerError, "发送全服邮件通知服务器%v发生错误:%v", serverId, err)
}
}
return nil
}
func (hook *MailGlobalHook) Delete(projectInfo *entity.Project, resource string, dtoObj dto.CommonDtoValues) error {
alisrvAddr := projectInfo.GetApiAddr()
if alisrvAddr == "" {
return errcode.New(errcode.ServerError, "项目%v没有配置api服务器地址", projectInfo.ProjectPo.Name)
}
et := (&entity.CommonResource{}).FromPo(&model.GlobalMail{}).FromDto(dtoObj)
mailInfo := et.ToPo().(*model.GlobalMail)
if mailInfo != nil {
}
// todo 撤回邮件
return nil
}