You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
276 lines
7.3 KiB
276 lines
7.3 KiB
package internal |
|
|
|
import ( |
|
"context" |
|
"encoding/json" |
|
"errors" |
|
"fmt" |
|
mqtt "github.com/eclipse/paho.mqtt.golang" |
|
"github.com/gogf/gf/v2/encoding/gcharset" |
|
"github.com/gogf/gf/v2/encoding/gjson" |
|
"github.com/gogf/gf/v2/frame/g" |
|
"go.mongodb.org/mongo-driver/bson" |
|
"net/url" |
|
"strings" |
|
"tyj_admin/api/v1/game" |
|
"tyj_admin/internal/consts" |
|
"tyj_admin/internal/model/entity" |
|
) |
|
|
|
func GetMails(ctx context.Context, req *game.MailsSearchReq) (res *game.MailsSearchRes, err error) { |
|
res = new(game.MailsSearchRes) |
|
filter := bson.M{} |
|
if len(req.Uid) > 0 { |
|
filter["to"] = req.Uid |
|
} |
|
if len(req.ServerId) > 0 { |
|
filter["serverId"] = bson.M{"$elemMatch": bson.M{"$eq": req.ServerId}} |
|
} |
|
if req.LowTime >= 0 && req.UpperTime > req.LowTime { |
|
filter["c_date"] = bson.M{"$lte": req.UpperTime} |
|
} |
|
res.Total, err = MongoDatabaseList["0"].Collection("MailLog").Find(ctx, filter).Count() |
|
if req.PageSize == 0 { |
|
req.PageSize = 10 |
|
} |
|
if req.PageNum == 0 { |
|
req.PageNum = 1 |
|
} |
|
//g.Log().Info(ctx, " mailLog filter", filter) |
|
err = MongoDatabaseList["0"].Collection("MailLog").Find(ctx, filter).Sort("-c_date").Skip((req.PageNum - 1) * req.PageSize).Limit(req.PageSize).All(&res.Mails) |
|
return |
|
} |
|
|
|
func GetCornMails(ctx context.Context, send int32) (mailList []entity.Mail, err error) { |
|
filter := bson.M{} |
|
filter["send"] = send |
|
mailList = []entity.Mail{} |
|
err = MongoDatabaseList["0"].Collection("MailLog").Find(ctx, filter).All(&mailList) |
|
return |
|
} |
|
|
|
func AddMail(ctx context.Context, mail entity.Mail) (err error) { |
|
ss, err := MongoDatabaseList["0"].Collection("MailLog").InsertOne(ctx, mail) |
|
fmt.Println("ss %v", ss) |
|
return |
|
} |
|
|
|
func UpdateMail(ctx context.Context, mail entity.Mail, errData string) (err error) { |
|
err = MongoDatabaseList["0"].Collection("MailLog").UpdateOne(ctx, bson.M{"_id": mail.Id}, bson.M{"$set": bson.M{"send": mail.Send, "errData": errData}}) |
|
return |
|
} |
|
|
|
func DelMail(ctx context.Context, mail entity.Mail) (err error) { |
|
err = MongoDatabaseList["0"].Collection("MailLog").UpdateOne(ctx, bson.M{"_id": mail.Id}, bson.M{"$set": bson.M{"send": consts.Mail_Send_Delete}}) |
|
return |
|
} |
|
|
|
type MailBody struct { |
|
entity.Mail |
|
ModuleType string `json:"moduleType"` |
|
} |
|
|
|
type MqttMail struct { |
|
ReqId int64 `json:"reqId"` |
|
ModuleId string `json:"moduleId"` |
|
Body MailBody `json:"body"` |
|
} |
|
|
|
type HttpMail struct { |
|
Items string `json:"items"` |
|
ValidDay string `json:"validDay"` |
|
//Greetings string `json:"Greetings"` |
|
From string `json:"from"` |
|
Title string `json:"title"` |
|
NewGet string `json:"newGet"` |
|
Context string `json:"context"` |
|
To string `json:"to"` |
|
IsAll string `json:"isAll"` |
|
OwnerId string `json:"ownerId"` |
|
} |
|
|
|
func SendMqtt(msg interface{}, c chan bool, server string) { |
|
closeC := false |
|
registerFunc := func(client mqtt.Client, qtmsg mqtt.Message) { |
|
ss := string(qtmsg.Payload()) |
|
fmt.Println(ss) |
|
err := ClientSend("client", 0, false, msg) |
|
if err != nil { |
|
c <- false |
|
} |
|
//ClientSend("client", 0, false, `{"reqId":3,"moduleId":"webadmin","body":{"uids":"lq0001","gm":1,"moduleType":"changeGM"}}`) |
|
} |
|
|
|
callback := func(client mqtt.Client, qtmsg mqtt.Message) { |
|
if closeC { |
|
return |
|
} |
|
res := &MqttResult{} |
|
client.Disconnect(1) |
|
ss := string(qtmsg.Payload()) |
|
ss = ss[1 : len(ss)-1] |
|
ss = strings.Replace(ss, "\\", "", -1) |
|
err := json.Unmarshal([]byte(ss), res) |
|
closeC = true |
|
if err == nil && res.RespId == 1 { |
|
c <- true |
|
return |
|
} |
|
fmt.Println("error" + err.Error()) |
|
c <- false |
|
} |
|
if NewMqttClient(registerFunc, callback, server) != nil { |
|
c <- false |
|
} |
|
|
|
} |
|
|
|
type MqttResult struct { |
|
RespId int `json:"respId"` |
|
Error interface{} `json:"error"` |
|
} |
|
|
|
//func Mailcallback(c mqtt.Client, msg mqtt.Message) { |
|
// res := &MqttResult{} |
|
// c.Disconnect(1) |
|
// fmt.Println(string(msg.Payload())) |
|
// ss := string(msg.Payload()) |
|
// ss = ss[1 : len(ss)-1] |
|
// ss = strings.Replace(ss, "\\", "", -1) |
|
// fmt.Println(ss) |
|
// err := json.Unmarshal([]byte(ss), res) |
|
// if err == nil && res.RespId == 1 { |
|
// ch <- true |
|
// return |
|
// } |
|
// fmt.Println("error" + err.Error()) |
|
// ch <- false |
|
// |
|
//} |
|
// |
|
//func RegisterCallback(c mqtt.Client, msg mqtt.Message) { |
|
// ss := string(Payload.([]byte)) |
|
// fmt.Println(ss) |
|
// err := ClientSend("client", 0, false, ss) |
|
// if err != nil { |
|
// ch <- false |
|
// } |
|
// //ClientSend("client", 0, false, `{"reqId":3,"moduleId":"webadmin","body":{"uids":"lq0001","gm":1,"moduleType":"changeGM"}}`) |
|
// |
|
//} |
|
|
|
func SendMailToC(ctx context.Context, req *game.MailSendReq) (res *game.MailSendRes, err error) { |
|
res = new(game.MailSendRes) |
|
items := "" |
|
for _, v := range req.Drops { |
|
if items != "" { |
|
items += "|" |
|
} |
|
items += fmt.Sprint(v.Id) + "|" + fmt.Sprint(v.Num) |
|
} |
|
if req.Expired == 1 { |
|
if req.ValidDay == 0 { |
|
req.ValidDay = 30 |
|
} |
|
} else { |
|
req.ValidDay = 0 |
|
req.IsLongTerm = 1 |
|
} |
|
srcCharset := "UTF-8" |
|
g.Client().SetHeader("Content-Type", "application/json;charset=UTF-8") |
|
errdata := "" |
|
owners := strings.Split(req.OwnerId, ";") |
|
owner := "" |
|
if req.OwnerId != "" { |
|
for _, v := range owners { |
|
uid, _ := GetStringIdToUid(ctx, v) |
|
if uid == "" { |
|
errdata += "uid:" + v + "不存在!" |
|
continue |
|
} |
|
if len(owner) > 0 { |
|
owner += ";" |
|
} |
|
owner += uid |
|
} |
|
if len(owner) == 0 { |
|
errdata += "uid不存在,发送失败!" |
|
return nil, errors.New(errdata) |
|
} |
|
} |
|
|
|
g.Log().Info(ctx, "sendMail - ServerConfig: ", gjson.MustEncodeString(ServerConfig)) |
|
for _, v := range req.ServerId { |
|
ip := ServerConfig[v] |
|
//g.Log().Info(ctx, "sendMail - ServerConfig: ", v, gjson.MustEncodeString(ServerConfig)) |
|
url := "http://" + ip + "/sendMail?items=" + items + "&validDay=" + fmt.Sprint(req.ValidDay) + |
|
"&from=" + url.QueryEscape(req.From) + "&title=" + url.QueryEscape(req.Title) + "&context=" + url.QueryEscape(req.Content) + |
|
"&newGet=" + fmt.Sprint(req.NewGet) + "&ownerId=" + owner + "&isLongTerm=" + fmt.Sprint(req.IsLongTerm) |
|
|
|
g.Log().Info(ctx, "sendMail - req: ", url, gjson.MustEncodeString(req)) |
|
bytes := g.Client().GetBytes(ctx, url) |
|
src := string(bytes) |
|
if g.IsEmpty(src) { |
|
errdata += v + "-空回调,发送失败/n" |
|
continue |
|
} |
|
|
|
tmp, _ := gcharset.ToUTF8(srcCharset, src) |
|
json, err1 := gjson.DecodeToJson(tmp) |
|
if err1 != nil { |
|
errdata += v + "-" + err1.Error() + "/n" |
|
continue |
|
} |
|
if json.Get("Error").Int() != 200 { |
|
errdata += v + "-邮件发送失败/n" |
|
continue |
|
} |
|
errdata += v + "-邮件发送成功/n" |
|
g.Log().Info(ctx, "sendMail - req1: ", url, gjson.MustEncodeString(req)) |
|
} |
|
|
|
g.Log().Info(ctx, "sendMail - errdata2: ", errdata) |
|
return nil, errors.New(errdata) |
|
} |
|
|
|
func GetMailModel(ctx context.Context, req *game.GetMailDropModelReq) (res *game.GetMailDropModelRes, err error) { |
|
name := "" |
|
switch req.MType { |
|
case 1: |
|
name = "mailDropModel" |
|
break |
|
case 2: |
|
name = "mailContentModel" |
|
break |
|
default: |
|
return |
|
} |
|
rdbTop := RedisDbList[0] |
|
rdbTop.Do(ctx, "select", 0) |
|
result := rdbTop.Get(ctx, name) |
|
res = new(game.GetMailDropModelRes) |
|
res.Model = result.Val() |
|
//json.Unmarshal() |
|
return |
|
} |
|
|
|
func UpdateMailModel(ctx context.Context, req *game.UpdateMailDropModelReq) (res *game.UpdateMailDropModelRes, err error) { |
|
name := "" |
|
switch req.MType { |
|
case 1: |
|
name = "mailDropModel" |
|
break |
|
case 2: |
|
name = "mailContentModel" |
|
break |
|
default: |
|
return |
|
} |
|
rdbTop := RedisDbList[0] |
|
rdbTop.Do(ctx, "select", 0) |
|
err = rdbTop.Set(ctx, name, req.Model, 0).Err() |
|
if err != nil { |
|
panic(err) |
|
} |
|
return |
|
}
|
|
|