package dao import ( "errors" "github.com/gin-gonic/gin" "github.com/qiniu/qmgo" "github.com/qiniu/qmgo/operator" vasproto "service/api/proto/vas/proto" "service/dbstruct" "time" ) // 订单操作历史 func (m *Mongo) AddOplogOrder(ctx *gin.Context, doc *dbstruct.OplogOrder) error { col := m.getColOplogOrder(doc.OrderId) _, err := col.InsertOne(ctx, doc) return err } // 金币订单操作历史 func (m *Mongo) AddOplogCoinOrder(ctx *gin.Context, doc *dbstruct.OplogCoinOrder) error { col := m.getColOplogCoinOrder(doc.OrderId) _, err := col.InsertOne(ctx, doc) return err } // 用户增值信息 func (m *Mongo) GetUserVasInfoByMid(ctx *gin.Context, mid int64) (*dbstruct.UserVasInfo, error) { doc := new(dbstruct.UserVasInfo) col := m.getColUserVasInfo() query := qmgo.M{ "_id": mid, } err := col.Find(ctx, query).One(&doc) if err == qmgo.ErrNoSuchDocuments { err = nil return nil, nil } if err != nil { return nil, err } return doc, nil } func (m *Mongo) UpdateUserVasInfo(ctx *gin.Context, req *vasproto.UpdateWechatReq) error { col := m.getColUserVasInfo() _, err := col.Bulk().UpsertOne( qmgo.M{ "_id": req.Mid, }, qmgo.M{ operator.SetOnInsert: qmgo.M{ "ct": time.Now().Unix(), }, operator.Set: qmgo.M{ "wechat_lock_type": req.WechatLockType, "wechat_contact": req.WechatContact, "wechat_coin_price": req.WechatCoinPrice, "wechat_ut": time.Now().Unix(), }, }, ).Run(ctx) if err != nil { return err } return err } // 空间价格信息 func (m *Mongo) GetZoneVasById(ctx *gin.Context, zid int64) (*dbstruct.ZoneVas, error) { doc := new(dbstruct.ZoneVas) col := m.getColZoneVas() query := qmgo.M{ "_id": zid, } err := col.Find(ctx, query).One(&doc) if err == qmgo.ErrNoSuchDocuments { err = nil return nil, nil } if err != nil { return nil, err } return doc, nil } // 批量空间价格信息 func (m *Mongo) GetZoneVasByIds(ctx *gin.Context, zids []int64) ([]*dbstruct.ZoneVas, error) { list := make([]*dbstruct.ZoneVas, 0) col := m.getColZoneVas() query := qmgo.M{ "_id": qmgo.M{ "$in": zids, }, } err := col.Find(ctx, query).All(&list) if err == qmgo.ErrNoSuchDocuments { err = nil return make([]*dbstruct.ZoneVas, 0), nil } if err != nil { return make([]*dbstruct.ZoneVas, 0), err } return list, nil } func (m *Mongo) UpsertZoneVas(ctx *gin.Context, req *dbstruct.ZoneVas) error { col := m.getColZoneVas() _, err := col.Bulk().UpsertOne( qmgo.M{ "_id": req.Zid, }, qmgo.M{ operator.SetOnInsert: qmgo.M{ "ct": time.Now().Unix(), "mid": req.Mid, }, operator.Set: qmgo.M{ "ut": time.Now().Unix(), "admission_price": req.AdmissionPrice, "ironfanship_price": req.IronfanshipPrice, "is_superfanship_enabled": req.IsSuperfanshipEnabled, "superfanship_price": req.SuperfanshipPrice, "superfanship_valid_period": req.SuperfanshipValidPeriod, "is_superfanship_give_wechat": req.IsSuperfanshipGiveWechat, "superfan_price_list": req.SuperfanPriceList, }, }, ).Run(ctx) if err != nil { return err } return err } // 空间动态价格 func (m *Mongo) GetZoneMomentPriceById(ctx *gin.Context, id int64) (*dbstruct.ZoneMomentPrice, error) { doc := new(dbstruct.ZoneMomentPrice) col := m.getColZoneMomentPrice() query := qmgo.M{ "_id": id, } err := col.Find(ctx, query).One(&doc) if err == qmgo.ErrNoSuchDocuments { err = nil return nil, nil } if err != nil { return nil, err } return doc, nil } // 批量空间动态价格 func (m *Mongo) GetZoneMomentPriceByIds(ctx *gin.Context, ids []int64) ([]*dbstruct.ZoneMomentPrice, error) { list := make([]*dbstruct.ZoneMomentPrice, 0) col := m.getColZoneMomentPrice() query := qmgo.M{ "_id": qmgo.M{ "$in": ids, }, } err := col.Find(ctx, query).All(&list) if err == qmgo.ErrNoSuchDocuments { err = nil return make([]*dbstruct.ZoneMomentPrice, 0), nil } if err != nil { return make([]*dbstruct.ZoneMomentPrice, 0), err } return list, nil } func (m *Mongo) UpsertZoneMomentPrice(ctx *gin.Context, req *dbstruct.ZoneMomentPrice) error { col := m.getColZoneMomentPrice() _, err := col.Bulk().UpsertOne( qmgo.M{ "_id": req.MomentId, }, qmgo.M{ operator.SetOnInsert: qmgo.M{ "ct": time.Now().Unix(), "mid": req.Mid, }, operator.Set: qmgo.M{ "ut": time.Now().Unix(), "price": req.Price, }, }, ).Run(ctx) if err != nil { return err } return err } // 增加动态购买人数 func (m *Mongo) IncZoneMomentBuyerCnt(ctx *gin.Context, zid, momentId int64) error { col := m.getColZoneMomentStat() _, err := col.Bulk().UpsertOne( qmgo.M{ "_id": momentId, }, qmgo.M{ operator.SetOnInsert: qmgo.M{ "ct": time.Now().Unix(), "zid": zid, }, operator.Set: qmgo.M{ "ut": time.Now().Unix(), }, operator.Inc: qmgo.M{ "buyer_cnt": 1, }, }, ).Run(ctx) if err != nil { return err } return err } // 减少动态购买人数 func (m *Mongo) DecZoneMomentBuyerCnt(ctx *gin.Context, zid, momentId int64) error { col := m.getColZoneMomentStat() _, err := col.Bulk().UpsertOne( qmgo.M{ "_id": momentId, }, qmgo.M{ operator.SetOnInsert: qmgo.M{ "ct": time.Now().Unix(), "zid": zid, }, operator.Set: qmgo.M{ "ut": time.Now().Unix(), }, operator.Inc: qmgo.M{ "buyer_cnt": -1, }, }, ).Run(ctx) if err != nil { return err } return err } // 获取动态的数据 func (m *Mongo) GetZoneMomentStatByIds(ctx *gin.Context, momentIds []int64) ([]*dbstruct.ZoneMomentStat, error) { list := make([]*dbstruct.ZoneMomentStat, 0) col := m.getColZoneMomentStat() query := qmgo.M{ "_id": qmgo.M{ "$in": momentIds, }, } err := col.Find(ctx, query).All(&list) if err == qmgo.ErrNoSuchDocuments { err = nil return make([]*dbstruct.ZoneMomentStat, 0), nil } if err != nil { return make([]*dbstruct.ZoneMomentStat, 0), err } return list, nil } // 获取收入看板 func (m *Mongo) GetZoneUserIncome(ctx *gin.Context, mid int64) (*dbstruct.UserIncome, error) { doc := new(dbstruct.UserIncome) col := m.getColUserIncome() query := qmgo.M{ "_id": mid, } err := col.Find(ctx, query).One(&doc) if err == qmgo.ErrNoSuchDocuments { err = nil return nil, nil } if err != nil { return nil, err } return doc, nil } // 收入历史 func (m *Mongo) AddWithdrawHis(ctx *gin.Context, doc *dbstruct.WithdrawHis) error { col := m.getColWithdrawHis() _, err := col.InsertOne(ctx, doc) return err } // 提现冻结 func (m *Mongo) AddWithdrawFreeze(ctx *gin.Context, doc *dbstruct.WithdrawFreeze) error { col := m.getColWithdrawFreeze() _, err := col.InsertOne(ctx, doc) return err } func (m *Mongo) DelWithdrawFreeze(ctx *gin.Context, userId int64) error { col := m.getColWithdrawFreeze() err := col.RemoveId(ctx, userId) return err } func (m *Mongo) GetWithdrawFreezeList(ctx *gin.Context) ([]*dbstruct.WithdrawFreeze, error) { list := make([]*dbstruct.WithdrawFreeze, 0) col := m.getColWithdrawFreeze() query := qmgo.M{} err := col.Find(ctx, query).All(&list) if err == qmgo.ErrNoSuchDocuments { err = nil return make([]*dbstruct.WithdrawFreeze, 0), nil } if err != nil { return make([]*dbstruct.WithdrawFreeze, 0), err } return list, nil } func (m *Mongo) GetWithdrawFreezeByUserId(ctx *gin.Context, userId int64) (*dbstruct.WithdrawFreeze, error) { doc := new(dbstruct.WithdrawFreeze) col := m.getColWithdrawFreeze() query := qmgo.M{ "_id": userId, } err := col.Find(ctx, query).One(&doc) if err == qmgo.ErrNoSuchDocuments { err = nil return nil, nil } if err != nil { return nil, err } return doc, nil } func (m *Mongo) GetWithdrawFreezeByMid(ctx *gin.Context, mid int64) (*dbstruct.WithdrawFreeze, error) { doc := new(dbstruct.WithdrawFreeze) col := m.getColWithdrawFreeze() query := qmgo.M{ "mid": mid, } err := col.Find(ctx, query).One(&doc) if err == qmgo.ErrNoSuchDocuments { err = nil return nil, nil } if err != nil { return nil, err } return doc, nil } // 用户退款表:查询主播审核列表 func (m *Mongo) GetZoneRefundList(ctx *gin.Context, bMid int64, refundsStatusList []int64) ([]*dbstruct.RefundInfo, error) { list := make([]*dbstruct.RefundInfo, 0) doc := m.GetZoneRefund() query := qmgo.M{ "b_mid": bMid, "refunds_status": qmgo.M{ "$in": refundsStatusList, }, } err := doc.Find(ctx, query).All(&list) if errors.Is(err, qmgo.ErrNoSuchDocuments) { err = nil return nil, err } if err != nil { return nil, err } return list, nil } // 用户退款表:查询主播审核详情页 func (m *Mongo) GetZoneRefundInfo(ctx *gin.Context, auditId string) (*dbstruct.RefundInfo, error) { doc := new(dbstruct.RefundInfo) col := m.GetZoneRefund() query := qmgo.M{ "_id": auditId, } err := col.Find(ctx, query).One(&doc) if errors.Is(err, qmgo.ErrNoSuchDocuments) { err = nil return nil, err } if err != nil { return nil, err } return doc, nil } // 用户退款表:主播审核 func (m *Mongo) SetZoneRefundAuditInfo(ctx *gin.Context, auditId string, refundsStatus int64) error { col := m.GetZoneRefund() _, err := col.Bulk().UpdateOne( qmgo.M{ "_id": auditId, }, qmgo.M{ operator.Set: qmgo.M{ "refunds_status": refundsStatus, "ut": time.Now().Unix(), }, }, ).Run(ctx) if errors.Is(err, qmgo.ErrNoSuchDocuments) { err = nil return err } if err != nil { return err } return nil } // 用户退款表:2小时内自动通过 func (m *Mongo) AddZoneRefundAutomatic(ctx *gin.Context, doc *dbstruct.RefundInfo) error { col := m.GetZoneRefund() _, err := col.InsertOne(ctx, doc) if err != nil { return err } return nil } // 用户退款表:主播超过 24 小时未审核列表 func (m *Mongo) GetRefundAudit(ctx *gin.Context) ([]*dbstruct.RefundInfo, error) { list := make([]*dbstruct.RefundInfo, 0) col := m.GetZoneRefund() at := time.Now().Unix() - 24*3600 query := qmgo.M{ "ct": qmgo.M{ "$gte": at - 5*60, // >= "$lte": at, // <= }, } err := col.Find(ctx, query).All(&list) if errors.Is(err, qmgo.ErrNoSuchDocuments) { err = nil return nil, err } if err != nil { return nil, err } return list, nil } func (m *Mongo) SetRefundAudit(ctx *gin.Context, ids []string) error { col := m.GetZoneRefund() query := qmgo.M{ "_id": qmgo.M{ "$in": ids, }, } _, err := col.Bulk().UpdateAll( query, qmgo.M{ operator.Set: qmgo.M{ "refunds_status": dbstruct.RefundsOvertime, "ut": time.Now().Unix(), }, }, ).Run(ctx) if errors.Is(err, qmgo.ErrNoSuchDocuments) { err = nil return err } if err != nil { return err } return nil }