wangchuanjin 5 ヶ月 前
コミット
0a5e243edc
1 ファイル変更16 行追加7 行削除
  1. 16 7
      p/public.go

+ 16 - 7
p/public.go

@@ -893,33 +893,41 @@ func MergeDiffIndustry(wuye, other *[]map[string]interface{}) *[]map[string]inte
 	return &datas
 }
 
-//
-func GetWxTplSurplus(mgo *MongodbSim, wxNodeNum, dayNum, count, retain int64) int64 {
+//获取无消息提醒微信模板消息的可用数量
+func WxNoMsgTmplUsableNum(mgo *MongodbSim, wxNodeNum, dayNum, count, retain int64) int64 {
+	if count < 0 {
+		return -1
+	}
 	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)
+	list, ok := mgo.Find("wxtmplsend_tj", map[string]interface{}{"type": map[string]interface{}{"$in": []string{"all", "nomsg"}}, "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{}
+	ymdNoMsgCount := 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"])
+		if ObjToString(v["type"]) == "all" {
+			ymdCount[ymd] += Int64All(v["count"])
+		} else {
+			ymdNoMsgCount[ymd] += Int64All(v["count"])
+		}
 	}
-	var index, maxNum int64
+	var index, maxNum, maxNoMsgNum int64
 L:
 	for _, v := range ymds {
-		if all[v] == nil || int64(len(all[v])) != wxNodeNum {
+		if all[v] == nil || int64(len(all[v])) != wxNodeNum+1 {
 			continue
 		}
 		for _, vv := range all[v] {
@@ -930,13 +938,14 @@ L:
 		index++
 		if maxNum < ymdCount[v] {
 			maxNum = ymdCount[v]
+			maxNoMsgNum = ymdNoMsgCount[v]
 		}
 	}
 	if index < dayNum/2 {
 		logger.Error("计算以往最大推送量异常", index, dayNum/2)
 		return 0
 	}
-	surplus := count - maxNum - retain
+	surplus := count - maxNum - retain + maxNoMsgNum
 	if surplus < 0 {
 		return 0
 	}