go_dreamfactory/modules/mail/model_mail.go
2023-10-17 11:55:56 +08:00

211 lines
5.1 KiB
Go

package mail
import (
"context"
"go_dreamfactory/comm"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
"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) {
var index int32
if _data, err := this.DB.Find(comm.TableMail, bson.M{"uid": uId}); err == nil {
for _data.Next(context.TODO()) {
index++
temp := &pb.DBMailData{}
if err = _data.Decode(temp); err == nil {
if index > comm.MaxMailCount { // 删除超标的邮件
this.DB.DeleteOne(comm.TableMail, bson.M{"_id": temp.ObjId}, options.Delete())
continue
}
mail = append(mail, temp)
}
}
}
if len(mail) == 0 { // 没有邮件的时候 err返回空
err = nil
}
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
}
func (this *modelMail) GetMailCountByUid(uid string) (int32, error) {
var count int64
count, err := this.DB.CountDocuments(comm.TableMail, bson.M{"uid": uid})
return int32(count), err
}
// 删除超过最大邮件数量的邮件
func (this *modelMail) DelOtherMail(uid string) {
if _data, err := this.DB.Find(comm.TableMail, bson.M{"uid": uid}); err == nil {
var index int32
for _data.Next(context.TODO()) {
index++
temp := &pb.DBMailData{}
if err = _data.Decode(temp); err == nil {
if index >= comm.MaxMailCount { // 删除超标的邮件
this.DB.DeleteOne(comm.TableMail, bson.M{"_id": temp.ObjId}, options.Delete())
continue
}
}
}
}
}
// 更新领取附件状态
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
}
if len(mailinfo) == 0 {
return false
}
for _, v := range mailinfo {
if !v.Check {
return true
}
}
return false
}
func (this *modelMail) MailGetAttachmentMail(objId []string) bool {
Where := bson.M{}
Query := bson.M{
"reward": true,
"check": true,
}
Where = bson.M{"_id": bson.M{"$in": objId}}
data, err := this.DB.UpdateMany(core.SqlTable(comm.TableMail), Where, bson.M{"$set": Query}, options.MergeUpdateOptions().SetUpsert(true))
if err != nil {
log.Errorf("Update : %+v err :%v, ", data, err)
}
return true
}