package rechargemod import ( "context" "fmt" "stat/common/log" "stat/common/mongos" "stat/common/utils" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) // 初始化model func Init() { // 获取数据库表 db = mongos.New(mongos.MgoManager, CollRechargeLog) // 初始化索引 indexes := []mongo.IndexModel{ { Keys: bson.D{{Key: "userId", Value: 1}, {Key: "appId", Value: 1}}, }, { Keys: bson.D{{Key: "appId", Value: 1}, {Key: "orderId", Value: 1}}, Options: options.Index().SetUnique(true), }, { Keys: bson.D{{Key: "appId", Value: 1}, {Key: "successAt", Value: 1}}, }, { Keys: bson.D{{Key: "appId", Value: 1}, {Key: "successAt", Value: 1}, {Key: "isDeduction", Value: 1}, {Key: "blocDeduction", Value: 1}}, }, } if _, err := db.CreateIndex(context.Background(), indexes); err != nil { panic(fmt.Sprintf("%s model set index err ==>[%+v]", CollRechargeLog, err)) } } // 新增用户充值记录 func AddRechargeLog(ctx context.Context, doc *RechargeMod) (err error) { if _, err = db.InsertOne(ctx, doc); err != nil { log.Error("admin AddActionLog InsertOne err", log.E(err)) return } return } // 获取充值详情(集团) func GetBlocRechargeDetailsList(ctx context.Context, appId *int32, start, end *time.Time, skip, limit int64) (count int64, data []RechargeMod, err error) { filter := bson.M{"blocDeduction": false} if appId != nil { filter["appId"] = appId } if start != nil && end != nil { filter["successAt"] = bson.M{"$gte": start, "$lt": end} } else if start != nil { filter["successAt"] = bson.M{"$gte": start} } else if end != nil { filter["successAt"] = bson.M{"$lt": end} } sort := bson.D{{Key: "successAt", Value: -1}} opts := options.Find().SetSort(sort).SetSkip(skip).SetLimit(limit) if err = db.Find(ctx, &data, filter, opts); err != nil { log.Error("recharge GetBlocRechargeDetailsList Find err", log.E(err)) return } if count, err = db.Count(ctx, filter); err != nil { log.Error("recharge GetBlocRechargeDetailsList Count err", log.E(err)) return } return } // 获取充值详情 func GetBlocRechargeDetailsListTool(ctx context.Context, appId int32, skip, limit int64) (data []RechargeMod, err error) { filter := bson.M{"appId": appId} sort := bson.D{{Key: "_id", Value: 1}} opts := options.Find().SetSort(sort).SetSkip(skip).SetLimit(limit) if err = db.Find(ctx, &data, filter, opts); err != nil { log.Error("recharge GetBlocRechargeDetailsList Find err", log.E(err)) return } return } // UpdateRechargeInfo 批量更新 func UpdateRechargeInfo(ctx context.Context, mods []mongo.WriteModel) error { if _, err := db.BulkWrite(ctx, mods); err != nil { log.Error("UpdateRechargeInfo failed", log.Any("err", err)) return err } return nil } // AddManyRecharge 新增多条注册记录 func AddManyRecharge(ctx context.Context, docs *[]*RechargeMod) (err error) { if _, err = db.InsertMany(ctx, docs); err != nil { log.Error("channelCode AddManyRecharge InsertMany err", log.E(err)) return } return } // FindDspDistrictRecharge func FindDistrictRecharge(ctx context.Context, appId int32, district string) ([]RechargeMod, error) { list := make([]RechargeMod, 0) beginTimeStr := "2020-10-01T00:00:00-08:00" beginTime := utils.StrTimeToTime(beginTimeStr) query := bson.M{"successAt": bson.M{"$gt": beginTime}, "districtCode": district, "appId": appId} if err := db.Find(ctx, &list, query); err != nil { log.Error("FindDspDistrictRecharge Find error", log.E(err)) return list, err } return list, nil } func FindBlocDistrictRecharge(ctx context.Context, appId int32, blocDeduction bool) ([]RechargeMod, error) { list := make([]RechargeMod, 0) beginTimeStr := "2020-10-01T00:00:00-08:00" beginTime := utils.StrTimeToTime(beginTimeStr) query := bson.M{"successAt": bson.M{"$gt": beginTime}, "appId": appId, "blocDeduction": blocDeduction} if err := db.Find(ctx, &list, query); err != nil { log.Error("FindDspDistrictRecharge Find error", log.E(err)) return list, err } return list, nil } func FindBlocDistrictRechargeTotal(ctx context.Context, appId int32) ([]RechargeMod, error) { list := make([]RechargeMod, 0) beginTimeStr := "2020-10-01T00:00:00-08:00" beginTime := utils.StrTimeToTime(beginTimeStr) query := bson.M{"successAt": bson.M{"$gt": beginTime}, "appId": appId} if err := db.Find(ctx, &list, query); err != nil { log.Error("FindDspDistrictRecharge Find error", log.E(err)) return list, err } return list, nil } func FindDistrictRechargeAll(ctx context.Context, appId int32) ([]RechargeMod, error) { list := make([]RechargeMod, 0) beginTimeStr := "2020-10-01T00:00:00-08:00" beginTime := utils.StrTimeToTime(beginTimeStr) query := bson.M{"successAt": bson.M{"$gt": beginTime}, "appId": appId, "districtCode": bson.M{"$gt": ""}} if err := db.Find(ctx, &list, query); err != nil { log.Error("FindDspDistrictRecharge Find error", log.E(err)) return list, err } return list, nil } // FindRechargeByOrder func FindRechargeByOrder(ctx context.Context, appId int32, OrderId string) (data RechargeMod, err error) { query := bson.M{"orderId": OrderId, "appId": appId} if err = db.FindOne(ctx, &data, query); err != nil { log.Error("FindRechargeByOrder Find error", log.E(err)) return data, err } return data, nil } func FindRechargeByUser(ctx context.Context, appId int32, userid int64) (data RechargeMod, err error) { query := bson.M{"userId": userid, "appId": appId} if err = db.FindOne(ctx, &data, query); err != nil { log.Error("FindRechargeByOrder Find error", log.E(err)) return data, err } return data, nil } //UpdateManyRecharge 更新注册用户信息 func UpdateManyRecharge(ctx context.Context, filter bson.M, update bson.M) error { _, err := db.UpdateMany(ctx, filter, update) if err != nil { log.Warn("user:UpdateManyRecharge db.UpdateMany failed", log.E(err), log.Any("filter", filter)) return err } return nil } // FindOneRecharge 按条件查询单条充值订单(退款订单管理按 cid 回填数据使用)。 // 使用 FindOneEx,查不到时透传 mongo.ErrNoDocuments,由调用方区分"未命中"与"出错"。 func FindOneRecharge(ctx context.Context, filter bson.M) (*RechargeMod, error) { var doc RechargeMod if err := db.FindOneEx(ctx, &doc, filter); err != nil { return nil, err } return &doc, nil }