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.
328 lines
8.0 KiB
328 lines
8.0 KiB
package handler |
|
|
|
import ( |
|
"encoding/json" |
|
"fmt" |
|
"server/call" |
|
"server/common" |
|
"server/db" |
|
"server/modules/backend/app" |
|
"server/modules/backend/values" |
|
"server/natsClient" |
|
"server/pb" |
|
"server/util" |
|
"time" |
|
|
|
"github.com/gin-gonic/gin" |
|
"github.com/liangdas/mqant/log" |
|
"github.com/olivere/elastic/v7" |
|
) |
|
|
|
func DraftList(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.Response() |
|
}() |
|
req := new(values.MailDraftListReq) |
|
if !a.S(req) { |
|
return |
|
} |
|
var list []common.MailDraft |
|
var count int64 |
|
var err error |
|
if req.Title == nil && req.StartSendTime == nil && req.EndSendTime == nil { |
|
count, err = db.ES().QueryMailDraftList(int(req.Page), int(req.Num), &list) |
|
} else { |
|
q := elastic.NewBoolQuery() |
|
if req.Title != nil { |
|
log.Debug("title:%v", *req.Title) |
|
q.Filter(elastic.NewFuzzyQuery("Title.keyword", *req.Title)) |
|
} |
|
if req.StartSendTime != nil { |
|
q.Filter(elastic.NewRangeQuery("SendTime").Gte(*req.StartSendTime)) |
|
} |
|
if req.EndSendTime != nil { |
|
q.Filter(elastic.NewRangeQuery("SendTime").Lte(*req.EndSendTime)) |
|
} |
|
count, err = db.ES().SearchMailDraftList(int(req.Page), int(req.Num), q, &list) |
|
} |
|
if err != nil { |
|
log.Error("err:%v", err) |
|
a.Code = values.CodeRetry |
|
return |
|
} |
|
resp := values.MailDraftListResp{List: list, Count: int(count)} |
|
a.Data = resp |
|
} |
|
|
|
func DraftCreate(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.Response() |
|
}() |
|
req := new(values.MailDraftCreateReq) |
|
if !a.S(req) { |
|
return |
|
} |
|
if req.SendMethod == common.MailSendMethodTiming { |
|
if req.SendTime < time.Now().Unix() { |
|
a.Code = values.CodeParam |
|
a.Msg = "发送时间有误" |
|
return |
|
} |
|
} else { |
|
req.SendTime = time.Now().Unix() |
|
} |
|
save := new(common.MailDraft) |
|
save.Sender = req.Sender |
|
save.Receiver = req.Receiver |
|
save.Type = req.Type |
|
save.Title = req.Title |
|
save.Content = req.Content |
|
if len(req.Enclosure) > 0 { |
|
save.Enclosure = req.Enclosure[0] |
|
} |
|
save.SendMethod = req.SendMethod |
|
save.SendTime = req.SendTime |
|
save.Status = common.MailDraftStatusNew |
|
save.Time = time.Now().Unix() |
|
save.Operator = a.User.Account |
|
save.UserTag = req.UserTag |
|
save.MaxBirthAt = req.MaxBirthAt |
|
save.RechargeAmount = req.RechargeAmount |
|
save.ChannelId = req.ChannelId |
|
save.URL = req.URL |
|
save.Tag = req.Tag |
|
if err := db.ES().InsertToES(common.ESIndexBackMailDraft, save); err != nil { |
|
log.Error("err:%v", err) |
|
a.Code = values.CodeRetry |
|
return |
|
} |
|
a.RecordEdit(values.PowerMail, fmt.Sprintf("创建邮件:%v", req.Title)) |
|
} |
|
|
|
func DraftEdit(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.Response() |
|
}() |
|
req := new(values.MailDraftEditReq) |
|
if !a.S(req) { |
|
return |
|
} |
|
one := new(common.MailDraft) |
|
if err := db.ES().QueryOne(common.ESIndexBackMailDraft, elastic.NewTermQuery("_id", req.ID), one); err != nil { |
|
log.Error("err:%v", err) |
|
a.Code = values.CodeRetry |
|
return |
|
} |
|
if req.ID == "" { |
|
a.Code = values.CodeParam |
|
a.Msg = "草稿不存在" |
|
return |
|
} |
|
update := false |
|
if req.Sender != nil { |
|
update = true |
|
one.Sender = *req.Sender |
|
} |
|
if req.Receiver != nil { |
|
update = true |
|
one.Receiver = *req.Receiver |
|
} |
|
if req.Type != nil { |
|
update = true |
|
one.Type = *req.Type |
|
} |
|
if req.Title != nil { |
|
update = true |
|
one.Title = *req.Title |
|
} |
|
if req.Content != nil { |
|
update = true |
|
one.Content = *req.Content |
|
} |
|
if req.Enclosure != nil { |
|
update = true |
|
one.Enclosure = req.Enclosure[0] |
|
} |
|
if req.SendMethod != nil { |
|
update = true |
|
one.SendMethod = *req.SendMethod |
|
if one.SendMethod == common.MailSendMethodTiming { |
|
if req.SendTime == nil || *req.SendTime < time.Now().Unix() { |
|
a.Code = values.CodeParam |
|
a.Msg = "发送时间有误" |
|
return |
|
} |
|
one.SendTime = *req.SendTime |
|
} else { |
|
one.SendTime = time.Now().Unix() |
|
} |
|
} |
|
if req.UserTag != nil { |
|
update = true |
|
one.UserTag = *req.UserTag |
|
} |
|
if req.MaxBirthAt != nil { |
|
update = true |
|
one.MaxBirthAt = *req.MaxBirthAt |
|
} |
|
if req.RechargeAmount != nil { |
|
update = true |
|
one.RechargeAmount = *req.RechargeAmount |
|
} |
|
if req.ChannelId != nil { |
|
update = true |
|
one.ChannelId = *req.ChannelId |
|
} |
|
if req.URL != nil { |
|
update = true |
|
one.URL = *req.URL |
|
} |
|
if req.Tag != nil { |
|
update = true |
|
one.Tag = *req.Tag |
|
} |
|
if !update { |
|
a.Code = values.CodeParam |
|
a.Msg = "无内容修改" |
|
return |
|
} |
|
one.Operator = a.User.Account |
|
one.Time = time.Now().Unix() |
|
if _, err := db.ES().Update(common.ESIndexBackMailDraft, req.ID, one); err != nil { |
|
log.Error("err:%v", err) |
|
a.Code = values.CodeRetry |
|
return |
|
} |
|
a.RecordEdit(values.PowerMail, fmt.Sprintf("修改邮件:%v", req.ID)) |
|
} |
|
|
|
func DraftOpt(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.Response() |
|
}() |
|
req := new(values.MailDraftOptReq) |
|
if !a.S(req) { |
|
return |
|
} |
|
one := new(common.MailDraft) |
|
if err := db.ES().QueryOne(common.ESIndexBackMailDraft, elastic.NewTermQuery("_id", req.ID), one); err != nil { |
|
log.Error("err:%v", err) |
|
a.Code = values.CodeRetry |
|
return |
|
} |
|
if one.ID == "" { |
|
a.Code = values.CodeParam |
|
a.Msg = "草稿不存在" |
|
return |
|
} |
|
updateStatus := common.MailDraftStatusDelete |
|
switch req.Opt { |
|
case 1: |
|
if one.Status == common.MailStatusDelete { |
|
a.Code = values.CodeParam |
|
a.Msg = "该草稿已删除" |
|
return |
|
} |
|
updateStatus = common.MailDraftStatusDelete |
|
case 2: |
|
if one.Status == common.MailDraftStatusBack { |
|
a.Code = values.CodeParam |
|
a.Msg = "该草稿已撤回" |
|
return |
|
} |
|
updateStatus = common.MailDraftStatusBack |
|
if err := db.Mysql().Update(&common.Mail{DraftID: one.ID}, map[string]interface{}{"status": common.MailStatusDelete}); err != nil { |
|
log.Error("err:%v", err) |
|
a.Code = values.CodeRetry |
|
return |
|
} |
|
case 3: |
|
if one.Status == common.MailDraftStatusSent { |
|
a.Code = values.CodeParam |
|
a.Msg = "该草稿已发送" |
|
return |
|
} |
|
updateStatus = common.MailDraftStatusSent |
|
enclosure := "" |
|
if one.Enclosure != nil { |
|
e, _ := json.Marshal(one.Enclosure) |
|
enclosure = string(e) |
|
} |
|
if len(one.Receiver) > 0 { |
|
for _, v := range one.Receiver { |
|
mail := new(common.Mail) |
|
mail.DraftID = one.ID |
|
mail.Sender = one.Sender |
|
mail.Receiver = v |
|
mail.Type = one.Type |
|
mail.Title = one.Title |
|
mail.Content = one.Content |
|
mail.Enc = enclosure |
|
mail.SendMethod = one.SendMethod |
|
mail.Status = common.MailStatusNew |
|
mail.URL = one.URL |
|
mail.Tag = one.Tag |
|
if one.SendMethod == common.MailSendMethodTiming { |
|
mail.Time = one.SendTime |
|
} else if one.SendMethod == common.MailSendMethodImmediately { |
|
mail.Time = time.Now().Unix() |
|
} |
|
// util.Go(func() { |
|
if err := db.Mysql().Create(mail); err != nil { |
|
log.Error("err:%v", err) |
|
a.Code = values.CodeRetry |
|
return |
|
} |
|
// }) |
|
} |
|
} else { |
|
mail := new(common.Mail) |
|
mail.DraftID = one.ID |
|
mail.Sender = one.Sender |
|
mail.Receiver = 0 |
|
mail.Type = one.Type |
|
mail.Title = one.Title |
|
mail.Content = one.Content |
|
mail.Enc = enclosure |
|
mail.SendMethod = one.SendMethod |
|
mail.Status = common.MailStatusNew |
|
mail.MaxBirthAt = one.MaxBirthAt |
|
mail.UserTag = one.UserTag |
|
mail.MaxBirthAt = one.MaxBirthAt |
|
mail.RechargeAmount = one.RechargeAmount |
|
mail.ChannelId = one.ChannelId |
|
mail.URL = one.URL |
|
mail.Tag = one.Tag |
|
if one.SendMethod == common.MailSendMethodTiming { |
|
mail.Time = one.SendTime |
|
} else if one.SendMethod == common.MailSendMethodImmediately { |
|
mail.Time = time.Now().Unix() |
|
} |
|
if err := db.Mysql().Create(mail); err != nil { |
|
log.Error("err:%v", err) |
|
a.Code = values.CodeRetry |
|
return |
|
} |
|
} |
|
if one.SendMethod == common.MailSendMethodImmediately { |
|
// 如果是立即发送,需要通知在线玩家刷新邮件 |
|
err := call.Publish(natsClient.TopicBackRefreshMail, &pb.InnerRefreshMail{UIDs: util.SliceInt2Int32(one.Receiver)}) |
|
if err != nil { |
|
log.Error(err.Error()) |
|
} |
|
} |
|
} |
|
one.Status = updateStatus |
|
one.Operator = a.User.Account |
|
one.Time = time.Now().Unix() |
|
if _, err := db.ES().Update(common.ESIndexBackMailDraft, req.ID, one); err != nil { |
|
log.Error("err:%v", err) |
|
a.Code = values.CodeRetry |
|
return |
|
} |
|
a.RecordEdit(values.PowerMail, fmt.Sprintf("操作邮件:%v,操作码:%v", req.ID, req.Opt)) |
|
}
|
|
|