|
@@ -892,3 +892,54 @@ func MergeDiffIndustry(wuye, other *[]map[string]interface{}) *[]map[string]inte
|
|
}
|
|
}
|
|
return &datas
|
|
return &datas
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+func GetWxTplSurplus(mgo *MongodbSim, wxNodeNum, dayNum, count, retain int64) int64 {
|
|
|
|
+ ymds := []string{}
|
|
|
|
+ now := time.Now()
|
|
|
|
+ for i := 0; i < int(dayNum); i++ {
|
|
|
|
+ now = now.AddDate(0, 0, -1)
|
|
|
|
+ ymds = append(ymds, FormatDate(&now, Date_Short_Layout))
|
|
|
|
+ }
|
|
|
|
+ list, ok := mgo.Find("wxtmplsend_tj", map[string]interface{}{"ymd": map[string]interface{}{"$in": ymds}}, `{"ymd":-1}`, `{"count":1,"node_type":1,"ymd":1}`, false, -1, -1)
|
|
|
|
+ if !ok || list == nil || len(*list) == 0 {
|
|
|
|
+ logger.Error("wxtmplsend_tj没有找到记录", ymds)
|
|
|
|
+ return 0
|
|
|
|
+ }
|
|
|
|
+ all := map[string]map[string]int64{}
|
|
|
|
+ ymdCount := map[string]int64{}
|
|
|
|
+ for _, v := range *list {
|
|
|
|
+ ymd, _ := v["ymd"].(string)
|
|
|
|
+ if all[ymd] == nil {
|
|
|
|
+ all[ymd] = map[string]int64{}
|
|
|
|
+ }
|
|
|
|
+ all[ymd][ObjToString(v["node_type"])]++
|
|
|
|
+ ymdCount[ymd] += Int64All(v["count"])
|
|
|
|
+ }
|
|
|
|
+ var index, maxNum int64
|
|
|
|
+L:
|
|
|
|
+ for _, v := range ymds {
|
|
|
|
+ if all[v] == nil || int64(len(all[v])) != wxNodeNum {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ for _, vv := range all[v] {
|
|
|
|
+ if vv != 1 {
|
|
|
|
+ continue L
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ index++
|
|
|
|
+ if maxNum < ymdCount[v] {
|
|
|
|
+ maxNum = ymdCount[v]
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if index < dayNum/2 {
|
|
|
|
+ logger.Error("计算以往最大推送量异常", index, dayNum/2)
|
|
|
|
+ return 0
|
|
|
|
+ }
|
|
|
|
+ surplus := count - maxNum - retain
|
|
|
|
+ if surplus < 0 {
|
|
|
|
+ return 0
|
|
|
|
+ }
|
|
|
|
+ logger.Info("微信模板消息最大量", count, ",过去", dayNum, "天内一天最大推送量", maxNum, ",保留", retain, ",剩余可用", surplus)
|
|
|
|
+ return surplus
|
|
|
|
+}
|