171 lines
4.4 KiB
Go
171 lines
4.4 KiB
Go
package mwacc
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
"videoweb/pub/common/errors"
|
|
sErr "videoweb/pub/common/errors"
|
|
"videoweb/pub/common/log"
|
|
"videoweb/pub/common/srvdef"
|
|
"videoweb/pub/mongos"
|
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
"go.mongodb.org/mongo-driver/mongo/options"
|
|
)
|
|
|
|
// 过滤查询数量
|
|
func AccCountByFilter(ctx context.Context, filters primitive.M, opts ...*options.CountOptions) (c int64, err error) {
|
|
c, err = mwAccColl.Count(ctx, filters)
|
|
return
|
|
}
|
|
|
|
// 过滤查询账号
|
|
func FindOneAccByFilter(ctx context.Context, filters primitive.M, opts ...*options.FindOneOptions) (*MwAcc, error) {
|
|
var res MwAcc
|
|
err := mwAccColl.FindOne(ctx, &res, filters, opts...)
|
|
if err != nil {
|
|
log.Error("mwacc FindOneAccByFilter err", log.Any("filters", filters), log.E(err))
|
|
}
|
|
return &res, err
|
|
}
|
|
|
|
// 过滤更新
|
|
func UpOneAccByFilter(ctx context.Context, query primitive.M, update primitive.M) (err error) {
|
|
_, err = mwAccColl.UpdateOne(ctx, query, primitive.M{"$set": update})
|
|
return
|
|
}
|
|
|
|
// 过滤删除角色
|
|
func DelAccByFilter(ctx context.Context, filters primitive.M) (err error) {
|
|
_, err = mwAccColl.DeleteOne(ctx, filters)
|
|
if err != nil {
|
|
log.Error("mwacc DelAccByFilter err", log.Any("filters", filters), log.E(err))
|
|
}
|
|
return
|
|
}
|
|
|
|
// // 更新最后登录时间
|
|
// func UpAccLastTimeById(ctx context.Context, id int64) (*mongo.UpdateResult, error) {
|
|
// ret, err := mwAccColl.UpdateOne(ctx, primitive.M{FN.MwAcc.Id: id}, primitive.M{"$set": primitive.M{FN.MwAcc.LastTime: time.Now()}})
|
|
// if err != nil {
|
|
// log.Error("mvacc UpLastTimeById err", log.Any(FN.MwAcc.Id, id), log.E(err))
|
|
// }
|
|
// return ret, err
|
|
// }
|
|
|
|
// 绑定二维码
|
|
func BindAccQurl(ctx context.Context, acc string) (ok bool, err error) {
|
|
|
|
res, dataErr := FindOneAccByFilter(ctx, primitive.M{
|
|
FN.MwAcc.Acc: acc,
|
|
})
|
|
|
|
if dataErr != nil || res.Id == 0 {
|
|
err = sErr.MakeWithMsg(sErr.Logo, "用户不存在!")
|
|
return false, err
|
|
}
|
|
|
|
if res.IsEnb == false {
|
|
err = sErr.MakeWithMsg(sErr.UserPermission, "用户被禁用!")
|
|
return false, err
|
|
}
|
|
err = UpOneAccByFilter(ctx, primitive.M{
|
|
FN.MwAcc.Acc: acc,
|
|
}, primitive.M{
|
|
FN.MwAcc.IsBase32: true,
|
|
})
|
|
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return true, err
|
|
}
|
|
|
|
// 插入角色
|
|
func AccAdd(ctx context.Context, insertReq *AccInsertDoc) (id int64, ok bool, err error) {
|
|
|
|
insertReq.Id = int64(mongos.Lid.MwAcc.Get())
|
|
insertReq.CreatedAt = time.Now()
|
|
|
|
_, err = mwAccColl.InsertOne(ctx, insertReq)
|
|
if err != nil {
|
|
log.ZapLog.Error(fmt.Sprintf("InsertRole mongo error %v", err))
|
|
err = errors.MakeWithErr(errors.DBInsert, err)
|
|
return 0, false, err
|
|
}
|
|
return insertReq.Id, true, nil
|
|
}
|
|
|
|
// 获取角色列表
|
|
func GetAccList(ctx context.Context, search primitive.M, sort []primitive.M) (
|
|
total int64, data []*AccGetListRec, err error) {
|
|
|
|
var countPipe []primitive.M
|
|
countPipe = append(countPipe, search, bson.M{"$count": "total"})
|
|
var aggCount AggStatCount
|
|
err = mwAccColl.ObjectAggregate(ctx, &aggCount, countPipe)
|
|
if err != nil {
|
|
return 0, nil, err
|
|
}
|
|
total = aggCount.Total
|
|
|
|
var pip []primitive.M
|
|
pip = append(pip, search)
|
|
pip = append(pip, sort...)
|
|
pip = append(pip,
|
|
primitive.M{
|
|
"$lookup": primitive.M{
|
|
"localField": FN.MwAcc.RoleId,
|
|
"from": TN.MwRole,
|
|
"foreignField": FN.MwRole.Id,
|
|
"as": "roles",
|
|
},
|
|
},
|
|
primitive.M{"$unwind": primitive.M{
|
|
"path": "$roles",
|
|
"preserveNullAndEmptyArrays": true,
|
|
},
|
|
},
|
|
primitive.M{
|
|
"$project": primitive.M{
|
|
FN.MwAcc.Id: 1,
|
|
FN.MwAcc.UserName: 1,
|
|
FN.MwAcc.Acc: 1,
|
|
FN.MwAcc.Pwd: 1,
|
|
FN.MwAcc.Email: 1,
|
|
FN.MwAcc.RoleId: 1,
|
|
FN.MwAcc.RoleName: "$roles.name",
|
|
FN.MwAcc.Base32: 1,
|
|
FN.MwAcc.IsBase32: 1,
|
|
// mwacc.FN.MwAcc.LastTime: 1,
|
|
FN.MwAcc.IsEnb: 1,
|
|
FN.MwAcc.Feedback: 1,
|
|
FN.MwAcc.CreatedAt: 1,
|
|
FN.MwAcc.UpdatedAt: 1,
|
|
FN.MwAcc.LimitIP: 1,
|
|
},
|
|
})
|
|
|
|
err = mwAccColl.Aggregate(ctx, &data, pip)
|
|
if err != nil {
|
|
err = errors.MakeWithErr(errors.DBQuery, err)
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
// 过滤查询账号
|
|
func FindManyAccByFilter(ctx context.Context, filters primitive.M, opts ...*options.FindOptions) ([]*MwAcc, *srvdef.SrvErr) {
|
|
var res []*MwAcc
|
|
err := mwAccColl.Find(ctx, &res, filters, opts...)
|
|
if err != nil {
|
|
log.Error("mwacc FindOneAccByFilter err", log.Any("filters", filters), log.E(err))
|
|
return res, srvdef.New(srvdef.ErrDbQueryError, "", "")
|
|
}
|
|
log.Info("success")
|
|
|
|
return res, nil
|
|
}
|