163 lines
4.8 KiB
Go
163 lines
4.8 KiB
Go
package rchgordmod
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"91porn-server/common/pageopt"
|
|
"91porn-server/common/ysinterface/disc"
|
|
)
|
|
|
|
type DistrictStatKey struct {
|
|
DiscSeqe `bson:",inline"` //商区码
|
|
DevType string `bson:"devType"` //系统类型 iOS Android
|
|
}
|
|
|
|
func (d DistrictStatKey) GetDiscCode() string {
|
|
return d.DistrictCode
|
|
}
|
|
|
|
func (d DistrictStatKey) GetPromSeqe() string {
|
|
return d.PromSeqe
|
|
}
|
|
|
|
func (d DistrictStatKey) GetSysType() string {
|
|
return d.DevType
|
|
}
|
|
|
|
func (d DistrictStatKey) String() string {
|
|
if d.DiscSeqe.String() == "" {
|
|
return ""
|
|
}
|
|
return strings.ToUpper(strings.Join([]string{d.DiscSeqe.String(), d.DevType}, "-"))
|
|
}
|
|
|
|
type DistrictStater = disc.DistrictStater
|
|
|
|
// DistrictOrderCountMap districtCode->订单数 map
|
|
func DistrictOrderCountMap(start, end time.Time, mats ...Matcher) (map[DistrictStater]int64, error) {
|
|
mats = append(mats, (&CreatedAtGTEAndLTMatch{GTE: &start, LT: &end}).New())
|
|
filter := pageopt.MergeM(mats)
|
|
list := []DistrictStatKey{}
|
|
if err := coll(nil).Find(&list, filter); err != nil {
|
|
return nil, err
|
|
}
|
|
m := make(map[DistrictStater]int64, len(list))
|
|
for _, v := range list {
|
|
if v.String() != "" {
|
|
m[v] += 1
|
|
}
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
// DistrictOrderMoneyMap districtCode->完成订单数 map
|
|
func DistrictOrderMoneyMap(start, end time.Time, mats ...Matcher) (map[DistrictStater]int64, error) {
|
|
mats = append(mats, (&CreatedAtGTEAndLTMatch{GTE: &start, LT: &end}).New())
|
|
filter := pageopt.MergeM(mats)
|
|
var list []struct {
|
|
DistrictStatKey `bson:",inline"` //商区码
|
|
Money int64 `bson:"money"` //充值金额 订单金额 李秋山确认
|
|
}
|
|
if err := coll(nil).Find(&list, filter); err != nil {
|
|
return nil, err
|
|
}
|
|
m := make(map[DistrictStater]int64, len(list))
|
|
for _, v := range list {
|
|
if v.String() != "" {
|
|
m[v.DistrictStatKey] += v.Money
|
|
}
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
// DistrictCompleteOrderCountMap districtCode->订单金额 map
|
|
func DistrictCompleteOrderCountMap(start, end time.Time, mats ...Matcher) (map[DistrictStater]int64, error) {
|
|
mats = append(mats, (&SuccessAtGTEAndLTMatch{&start, &end}).New())
|
|
filter := pageopt.MergeM(mats)
|
|
list := []DistrictStatKey{}
|
|
if err := coll(nil).Find(&list, filter); err != nil {
|
|
return nil, err
|
|
}
|
|
m := make(map[DistrictStater]int64, len(list))
|
|
for _, v := range list {
|
|
if v.String() != "" {
|
|
m[v] += 1
|
|
}
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
// DistrictCompleteOrderPayMoneyMap districtCode->完成订单的用户实际支付金额 map
|
|
func DistrictCompleteOrderPayMoneyMap(start, end time.Time, mats ...Matcher) (map[DistrictStater]int64, error) {
|
|
mats = append(mats, (&SuccessAtGTEAndLTMatch{&start, &end}).New())
|
|
filter := pageopt.MergeM(mats)
|
|
var list []struct {
|
|
DistrictStatKey `bson:",inline"` //商区码
|
|
PayMoney int64 `bson:"payMoney"` //实际到账金额 实际支付金额 李秋山确认
|
|
}
|
|
if err := coll(nil).Find(&list, filter); err != nil {
|
|
return nil, err
|
|
}
|
|
m := make(map[DistrictStater]int64, len(list))
|
|
for _, v := range list {
|
|
if v.String() != "" {
|
|
m[v.DistrictStatKey] += v.PayMoney
|
|
}
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
// DiscCompleteOrderUIDSMap districtCode->完成订单的用户列表 map key:District
|
|
func DiscCompleteOrderUIDSMap(start, end time.Time, mats ...Matcher) (map[DistrictStater][]uint64, error) {
|
|
mats = append(mats, (&SuccessAtGTEAndLTMatch{&start, &end}).New())
|
|
filter := pageopt.MergeM(mats)
|
|
var list []struct {
|
|
DistrictCode string `json:"districtCode" bson:"districtCode"` //商区码
|
|
UID uint64 `bson:"uid"` //uid
|
|
}
|
|
if err := coll(nil).Find(&list, filter); err != nil {
|
|
return nil, err
|
|
}
|
|
m := make(map[DistrictStater][]uint64, len(list))
|
|
for _, v := range list {
|
|
key := DistrictStatKey{
|
|
DiscSeqe: DiscSeqe{DistrictCode: v.DistrictCode},
|
|
}
|
|
if key.String() != "" {
|
|
m[key] = append(m[key], v.UID)
|
|
}
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
// DistrictCompleteOrderUIDSMap districtCode->完成订单的用户列表 map key:DiscSeqeSystem
|
|
func DistrictCompleteOrderUIDSMap(start, end time.Time, mats ...Matcher) (map[DistrictStater][]uint64, error) {
|
|
mats = append(mats, (&SuccessAtGTEAndLTMatch{&start, &end}).New())
|
|
filter := pageopt.MergeM(mats)
|
|
var list []struct {
|
|
DistrictStatKey `bson:",inline"` //商区码
|
|
UID uint64 `bson:"uid"` //uid
|
|
}
|
|
if err := coll(nil).Find(&list, filter); err != nil {
|
|
return nil, err
|
|
}
|
|
m := make(map[DistrictStater][]uint64, len(list))
|
|
for _, v := range list {
|
|
if v.String() != "" {
|
|
m[v.DistrictStatKey] = append(m[v.DistrictStatKey], v.UID)
|
|
}
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
// 时间内购买VIP次数
|
|
func CompleteOrderCountByDiscCode(start, end time.Time, discCode string) (int64, error) {
|
|
mats := []Matcher{
|
|
(&SuccessAtGTEAndLTMatch{GTE: &start, LT: &end}).New(),
|
|
(&DistrictCodeMatch{DistrictCode: &discCode}).New(),
|
|
}
|
|
filter := pageopt.MergeM(mats)
|
|
return coll(nil).Count(filter)
|
|
}
|