@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user