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 }