service/app/mix/dao/mongo_vas.go

266 lines
5.8 KiB
Go

package dao
import (
"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,
},
},
).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
}