81 lines
2.4 KiB
Go
81 lines
2.4 KiB
Go
package smdl
|
||
|
||
import (
|
||
"admin/apps/game/domain/entity"
|
||
"admin/apps/game/model"
|
||
"admin/apps/game/model/dto"
|
||
"admin/internal/errcode"
|
||
"admin/lib/httpclient"
|
||
"admin/lib/xlog"
|
||
"net/url"
|
||
"strconv"
|
||
"strings"
|
||
)
|
||
|
||
type MailRoleHook struct {
|
||
}
|
||
|
||
func (hook *MailRoleHook) 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.RoleMail{}).FromDto(dtoObj)
|
||
mailInfo := et.ToPo().(*model.RoleMail)
|
||
|
||
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"
|
||
}
|
||
|
||
params := &url.Values{}
|
||
params.Add("itemid", itemIdStr)
|
||
params.Add("itemnum", itemNumStr)
|
||
params.Add("mailtitle", mailInfo.Title)
|
||
params.Add("mailcontent", mailInfo.Content)
|
||
params.Add("server", mailInfo.ServerID)
|
||
|
||
// 通知对应服务器
|
||
for _, roleId := range mailInfo.RoleIDs {
|
||
params.Set("playerid", roleId)
|
||
xlog.Debugf("发送神魔大陆个人邮件给角色:%v, 内容:%v", roleId, params.Encode())
|
||
rsp := make(map[string]any)
|
||
err := httpclient.Request(alisrvAddr+"/mail_role", "get", params, &rsp)
|
||
if err != nil {
|
||
return errcode.New(errcode.ServerError, "发送全服邮件通知服务器角色%v发生错误:%v", roleId, err)
|
||
}
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
func (hook *MailRoleHook) 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.RoleMail{}).FromDto(dtoObj)
|
||
mailInfo := et.ToPo().(*model.RoleMail)
|
||
if mailInfo != nil {
|
||
|
||
}
|
||
|
||
// todo 撤回邮件
|
||
|
||
return nil
|
||
}
|