Ver Fonte

wip:记录存储

wangshan há 5 meses atrás
pai
commit
b68aeb9532
2 ficheiros alterados com 43 adições e 22 exclusões
  1. 6 6
      src/config.json
  2. 37 16
      src/service/verify.go

+ 6 - 6
src/config.json

@@ -51,18 +51,18 @@
 	"strategy": [
 		{
 			"day": "1",
-			"num": 6,
-			"date": 86400
+			"num": 1,
+			"date": 60
 		},
 		{
 			"day": "7",
-			"num": 20,
-			"date": 604800
+			"num": 2,
+			"date": 180
 		},
 		{
 			"day": "30",
-			"num": 40,
-			"date": 2592000
+			"num": 3,
+			"date": 300
 		}
 	],
 	"smsIpMap": ["10","172","192","127","169","100"]

+ 37 - 16
src/service/verify.go

@@ -25,7 +25,7 @@ func SmsStrategy(keys []string) (abnormalKey []string) {
 			cacheKey := fmt.Sprintf(key, s.Day)
 			num := redis.GetInt(smsCacheCode, cacheKey)
 			ttl := redis.GetTTL(smsCacheCode, cacheKey)
-			jylog.Info(cacheKey, "-----num----", num, "----ttl---", ttl, "--s.Num--", s.Num)
+			jylog.Info(cacheKey, "#num:", num, "#ttl:", ttl, "#s.Num:", s.Num)
 			if num >= s.Num {
 				abnormalKey = append(abnormalKey, cacheKey)
 			}
@@ -46,6 +46,7 @@ func Verify(reqData *ReqData) bool {
 	var keys = []string{fmt.Sprintf(smsPhoneKey, "%s", reqData.Phones)}
 	if ips := strings.Split(reqData.Ip, ","); len(ips) > 0 {
 		for _, ip := range ips {
+			ip = strings.TrimSpace(ip)
 			ipHead := strings.Split(ip, ".")[0]
 			if config.SmsIpMap[ipHead] {
 				continue
@@ -59,39 +60,59 @@ func Verify(reqData *ReqData) bool {
 			var (
 				ipState, phoneState int
 				now                 = time.Now()
-				ipE, _              = redis.Exists(smsCacheCode, fmt.Sprintf(smsExistKey, ip))
-				phoneE, _           = redis.Exists(smsCacheCode, fmt.Sprintf(smsExistKey, mobile))
 			)
 			for _, v := range aks {
 				if strings.Contains(v, "sms_ip") {
-					ipState = 1
-					redis.Put(smsCacheCode, fmt.Sprintf(smsExistKey, ip), 1, 30*24*60*60)
+					ipState = ipState + 1
 				}
 				if strings.Contains(v, "sms_phone") {
-					phoneState = 1
-					redis.Put(smsCacheCode, fmt.Sprintf(smsExistKey, mobile), 1, 30*24*60*60)
+					phoneState = phoneState + 1
 				}
 			}
-			if !ipE {
-				if id := config.BaseMysql.Insert("useranaly.sms_black_ip", map[string]interface{}{
+			if ipState > 0 {
+				ipQuery := map[string]interface{}{
+					"ip": ip,
+				}
+				ipData := map[string]interface{}{
 					"ip":       ip,
 					"ip_state": ipState,
 					"date":     date.FormatDate(&now, date.Date_Full_Layout),
-				}); id <= 0 {
-					jylog.Info("sms_black_ip 信息保存异常:", mobile, ip)
+				}
+				tableName := "useranaly.sms_black_ip"
+				if ipD := config.BaseMysql.FindOne(tableName, ipQuery, "ip,ip_state", "date desc"); ipD == nil {
+					if id := config.BaseMysql.Insert(tableName, ipData); id <= 0 {
+						jylog.Info("sms_black_ip 信息保存异常:", mobile, ip)
+					}
+				} else {
+					delete(ipData, "ip")
+					if ok := config.BaseMysql.Update(tableName, ipQuery, ipData); !ok {
+						jylog.Info("sms_black_ip 信息更新异常:", mobile, ip)
+					}
 				}
 			}
-			if !phoneE {
-				if id := config.BaseMysql.Insert("useranaly.sms_black_phone", map[string]interface{}{
+			if phoneState > 0 {
+				phoneQuery := map[string]interface{}{
+					"phone": mobile,
+				}
+				phoneData := map[string]interface{}{
 					"phone":       mobile,
 					"phone_state": phoneState,
 					"date":        date.FormatDate(&now, date.Date_Full_Layout),
-				}); id <= 0 {
-					jylog.Info("sms_black_phone 信息保存异常:", mobile, ip)
+				}
+				tableName := "useranaly.sms_black_phone"
+				if phoneD := config.BaseMysql.FindOne(tableName, phoneQuery, "ip,ip_state", "date desc"); phoneD == nil {
+					if id := config.BaseMysql.Insert(tableName, phoneData); id <= 0 {
+						jylog.Info("sms_black_phone 信息保存异常:", mobile, ip)
+					}
+				} else {
+					delete(phoneData, "phone")
+					if ok := config.BaseMysql.Update(tableName, phoneQuery, phoneData); !ok {
+						jylog.Info("sms_black_phone 信息更新异常:", mobile, ip)
+					}
 				}
 			}
 		}(aks, reqData.Ip, reqData.Phones)
-		jylog.Info(reqData.Phones, "---当前用户发送短信验证次数超过最大限制:"+strings.Join(aks, ","))
+		jylog.Info(reqData.Phones, "---发送短信次数过多,规则:"+strings.Join(aks, "###"))
 		return false
 	}
 	return true