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) }