162 lines
3.8 KiB
Go
162 lines
3.8 KiB
Go
package mail
|
|
|
|
import (
|
|
"context"
|
|
"go_dreamfactory/comm"
|
|
"go_dreamfactory/modules"
|
|
"go_dreamfactory/pb"
|
|
|
|
"go_dreamfactory/lego/core"
|
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
"go.mongodb.org/mongo-driver/mongo/options"
|
|
"go.mongodb.org/mongo-driver/x/bsonx"
|
|
)
|
|
|
|
type modelMail struct {
|
|
modules.MCompModel
|
|
}
|
|
|
|
func (this *modelMail) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
|
this.TableName = comm.TableMail
|
|
this.MCompModel.Init(service, module, comp, options)
|
|
|
|
//创建uid索引
|
|
this.DB.CreateIndex(core.SqlTable(comm.TableMail), mongo.IndexModel{
|
|
Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}},
|
|
})
|
|
return
|
|
}
|
|
|
|
func (this *modelMail) MailQueryUserMail(uId string) (mail []*pb.DBMailData, err error) {
|
|
|
|
if _data, err := this.DB.Find(comm.TableMail, bson.M{"uid": uId}, options.Find().SetSort(bson.M{"createtime": -1})); err == nil {
|
|
for _data.Next(context.TODO()) {
|
|
temp := &pb.DBMailData{}
|
|
if err = _data.Decode(temp); err == nil {
|
|
mail = append(mail, temp)
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// 插入一封新的邮件
|
|
func (this *modelMail) MailInsertUserMail(mail *pb.DBMailData) (err error) {
|
|
|
|
mail.ObjId = primitive.NewObjectID().Hex()
|
|
mail.Check = false
|
|
mail.Reward = true
|
|
|
|
if len(mail.GetItems()) > 0 {
|
|
mail.Reward = false
|
|
}
|
|
_, err = this.DB.InsertOne(comm.TableMail, mail)
|
|
|
|
return err
|
|
}
|
|
|
|
func (this *modelMail) MailReadOneMail(objId string) (mail *pb.DBMailData, err error) {
|
|
|
|
err = this.DB.FindOneAndUpdate(
|
|
comm.TableMail,
|
|
bson.M{"_id": objId},
|
|
bson.M{"$set": bson.M{
|
|
"check": true,
|
|
}},
|
|
options.FindOneAndUpdate().SetUpsert(true).SetReturnDocument(options.After),
|
|
).Decode(&mail)
|
|
|
|
return mail, err
|
|
}
|
|
|
|
// 查询附件信息
|
|
func (this *modelMail) MailGetMailAttachment(objId string) (itmes []*pb.UserAssets, err error) {
|
|
|
|
var nd *pb.DBMailData
|
|
err = this.DB.FindOne(comm.TableMail, bson.M{"_id": objId}).Decode(&nd)
|
|
if err == nil {
|
|
itmes = nd.GetItems()
|
|
}
|
|
return itmes, err
|
|
}
|
|
|
|
// 查看领取附件状态
|
|
func (this *modelMail) MailGetMailAttachmentState(objId string) (*pb.DBMailData, error) {
|
|
var nd *pb.DBMailData
|
|
err := this.DB.FindOne(comm.TableMail, bson.M{"_id": objId}).Decode(&nd)
|
|
|
|
return nd, err
|
|
//return !nd.Reward && len(nd.GetItems()) > 0 && nd.Uid == uid
|
|
}
|
|
|
|
// 更新领取附件状态
|
|
func (this *modelMail) MailUpdateMailAttachmentState(objId string) bool {
|
|
this.DB.FindOneAndUpdate(
|
|
comm.TableMail,
|
|
bson.M{"_id": objId},
|
|
bson.M{"$set": bson.M{
|
|
"reward": true,
|
|
"check": true,
|
|
}},
|
|
options.FindOneAndUpdate().SetUpsert(false).SetReturnDocument(options.After),
|
|
)
|
|
|
|
return true
|
|
}
|
|
|
|
// 删除一封邮件
|
|
func (this *modelMail) MailDelUserMail(objId string) bool {
|
|
var obj *pb.DBMailData
|
|
err := this.DB.FindOne(comm.TableMail, bson.M{"_id": objId}).Decode(&obj)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
this.DB.DeleteOne(comm.TableMail, bson.M{"_id": objId})
|
|
|
|
return true
|
|
}
|
|
|
|
func (this *modelMail) MailQueryUserMailByReard(uId string) (mail []*pb.DBMailData, err error) {
|
|
|
|
if _data, err := this.DB.Find(comm.TableMail, bson.M{"uid": uId, "reward": false}); err == nil {
|
|
for _data.Next(context.TODO()) {
|
|
temp := &pb.DBMailData{}
|
|
if err = _data.Decode(temp); err == nil {
|
|
mail = append(mail, temp)
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
//附件红点
|
|
func (this *modelMail) checkReddot26(uid string) bool {
|
|
mailinfo, err := this.MailQueryUserMail(uid)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
for _, v := range mailinfo {
|
|
if v.Reward && len(v.Items) > 0 {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// 未读红点
|
|
func (this *modelMail) checkReddot30(uid string) bool {
|
|
mailinfo, err := this.MailQueryUserMail(uid)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
for _, v := range mailinfo {
|
|
if !v.Check {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|