2025-04-26 13:50:26 +08:00
|
|
|
|
package smdl
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"admin/apps/game/domain/entity"
|
2025-04-28 15:56:04 +08:00
|
|
|
|
"admin/apps/game/domain/repo"
|
2025-04-26 13:50:26 +08:00
|
|
|
|
"admin/apps/game/model"
|
|
|
|
|
"admin/apps/game/model/dto"
|
|
|
|
|
"admin/internal/errcode"
|
|
|
|
|
"admin/lib/httpclient"
|
2025-04-28 15:56:04 +08:00
|
|
|
|
"admin/lib/xlog"
|
2025-04-26 13:50:26 +08:00
|
|
|
|
"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 == "" {
|
2025-04-30 15:46:14 +08:00
|
|
|
|
return errcode.New(errcode.ServerError, "项目%v没有配置api服务器地址", projectInfo.Po.Name)
|
2025-04-26 13:50:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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 {
|
2025-05-14 18:09:20 +08:00
|
|
|
|
itemNumStr = "0"
|
2025-04-26 13:50:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var serverIds []string
|
|
|
|
|
|
|
|
|
|
serverIdsLen := len(mailInfo.ServerIDs)
|
|
|
|
|
switch {
|
|
|
|
|
case serverIdsLen == 0:
|
2025-04-28 15:56:04 +08:00
|
|
|
|
// 为空就发给所有服
|
2025-04-30 15:46:14 +08:00
|
|
|
|
serverList, err := repo.ServerRepoInstance.List(projectInfo.Po.ID)
|
2025-04-28 15:56:04 +08:00
|
|
|
|
if err != nil {
|
2025-04-30 15:46:14 +08:00
|
|
|
|
xlog.Errorf("list all server by project:%v error:%v", projectInfo.Po.ID, err)
|
|
|
|
|
return errcode.New(errcode.ServerError, "list all server by project:%v error:%v", projectInfo.Po.ID, err)
|
2025-04-28 15:56:04 +08:00
|
|
|
|
}
|
|
|
|
|
for _, v := range serverList {
|
|
|
|
|
serverIds = append(serverIds, v.ToPo().(*model.Server).ServerConfID)
|
|
|
|
|
}
|
2025-04-26 13:50:26 +08:00
|
|
|
|
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 {
|
2025-04-28 15:56:04 +08:00
|
|
|
|
serverIdInt, _ := strconv.Atoi(serverId)
|
|
|
|
|
if serverIdInt == 0 || serverIdInt%10000 > 500 {
|
|
|
|
|
// 过滤掉20801 28802这些跨服
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-26 13:50:26 +08:00
|
|
|
|
params.Set("server", serverId)
|
|
|
|
|
|
2025-04-28 15:56:04 +08:00
|
|
|
|
xlog.Debugf("通知神魔大陆区服%v添加邮件:%v", serverId, params.Encode())
|
|
|
|
|
|
2025-04-26 13:50:26 +08:00
|
|
|
|
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 == "" {
|
2025-04-30 15:46:14 +08:00
|
|
|
|
return errcode.New(errcode.ServerError, "项目%v没有配置api服务器地址", projectInfo.Po.Name)
|
2025-04-26 13:50:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
et := (&entity.CommonResource{}).FromPo(&model.GlobalMail{}).FromDto(dtoObj)
|
|
|
|
|
mailInfo := et.ToPo().(*model.GlobalMail)
|
|
|
|
|
if mailInfo != nil {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// todo 撤回邮件
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|