Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
package rchgordmod
import (
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type VIPExperimentOrderStat struct {
Variant string `json:"variant" bson:"variant"`
ProductID primitive.ObjectID `json:"productId" bson:"productId"`
CreatedOrders int `json:"createdOrders" bson:"createdOrders"`
PaidOrders int `json:"paidOrders" bson:"paidOrders"`
RefundedOrders int `json:"refundedOrders" bson:"refundedOrders"`
OrderAmount int64 `json:"orderAmount" bson:"orderAmount"`
PaidAmount int64 `json:"paidAmount" bson:"paidAmount"`
GoldPaidOrders int `json:"goldPaidOrders" bson:"goldPaidOrders"`
GoldPaidAmount int64 `json:"goldPaidAmount" bson:"goldPaidAmount"`
}
func VIPExperimentOrderStatistics(experimentID string) ([]VIPExperimentOrderStat, error) {
var raw []struct {
ID struct {
Variant string `bson:"variant"`
ProductID primitive.ObjectID `bson:"productId"`
} `bson:"_id"`
CreatedOrders int `bson:"createdOrders"`
PaidOrders int `bson:"paidOrders"`
RefundedOrders int `bson:"refundedOrders"`
OrderAmount int64 `bson:"orderAmount"`
PaidAmount int64 `bson:"paidAmount"`
}
err := coll(nil).Aggregate(&raw, []bson.M{
{"$match": bson.M{"experimentId": experimentID}},
{"$group": bson.M{
"_id": bson.M{
"variant": "$experimentVariant",
"productId": "$productID",
},
"createdOrders": bson.M{"$sum": 1},
"paidOrders": bson.M{"$sum": bson.M{"$cond": bson.A{
bson.M{"$eq": bson.A{"$status", SUCCESS}}, 1, 0,
}}},
"refundedOrders": bson.M{"$sum": bson.M{"$cond": bson.A{
bson.M{"$eq": bson.A{"$status", REFUND}}, 1, 0,
}}},
"orderAmount": bson.M{"$sum": "$money"},
"paidAmount": bson.M{"$sum": bson.M{"$cond": bson.A{
bson.M{"$eq": bson.A{"$status", SUCCESS}}, "$payMoney", 0,
}}},
}},
{"$sort": bson.D{{Key: "_id.variant", Value: 1}, {Key: "createdOrders", Value: -1}}},
})
if err != nil {
return nil, err
}
result := make([]VIPExperimentOrderStat, 0, len(raw))
for _, item := range raw {
result = append(result, VIPExperimentOrderStat{
Variant: item.ID.Variant,
ProductID: item.ID.ProductID,
CreatedOrders: item.CreatedOrders,
PaidOrders: item.PaidOrders,
RefundedOrders: item.RefundedOrders,
OrderAmount: item.OrderAmount,
PaidAmount: item.PaidAmount,
})
}
return result, nil
}