From 35a3ee126aa0e3372d332714ca9adba2a3261031 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期五, 11 十月 2019 14:03:02 +0800
Subject: [PATCH] 删除错误的引用logger以及为定时器加入锁机制

---
 ruleserver/ruleToformula.go |   73 ++++++------------------------------
 1 files changed, 12 insertions(+), 61 deletions(-)

diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index 8b429a6..8f01087 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -1,19 +1,19 @@
 package ruleserver
 
 import (
+	"basic.com/pubsub/protomsg.git"
 	"basic.com/valib/logger.git"
+	"github.com/knetic/govaluate"
 	"plugin"
 	"ruleprocess/cache"
 	"ruleprocess/structure"
 	"sort"
 	"strconv"
 	"strings"
-	"time"
-
-	"basic.com/pubsub/protomsg.git"
-	"github.com/knetic/govaluate"
+	"sync"
 )
 
+var rw sync.RWMutex // 璇诲啓閿�
 // 瀵瑰崟甯у浘鍍忕殑鍒ゆ柇 thisSdkDatas  褰撳墠浼犲叆鐨勮繖甯ф暟鎹紝cacheSdkData 瀹氭椂鍣ㄩ噷缂撳瓨鐨勪竴甯ф暟鎹� 娌℃湁灏辫繑鍥瀗il  (thisSdkDatas SdkDatas, cacheSdkDatas SdkDatas)
 func Judge(args *structure.SdkDatas, message *protomsg.SdkMessage) {
 	defer func() {
@@ -249,6 +249,7 @@
 	logger.Info("------------------------------------------褰撳墠鏄仈鍔ㄤ换鍔★紝瑙勫垯鏄細", groupRule.GroupText)
 	var flag bool = true
 	var timeEle = TimeElement{N: 2, InitN: 2, GroupId: groupRule.GroupId}
+	rw.Lock()
 	for k, timeEle1 := range TimeEleList {
 		if k == groupRule.GroupId {
 			flag = false // 宸茬粡鏈変簡杩欎釜瀹氭椂鍣ㄥ氨缃负false 涓嶅啀鏂板
@@ -273,6 +274,7 @@
 			}
 		}
 	}
+	rw.Unlock()
 	// 寰�鏁扮粍閲岃祴鍊�
 	isOk,labelTypes := RunRule(args, groupRule, taskId, message, label)
 	if isOk {
@@ -324,6 +326,7 @@
 				result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
 				if result.(bool) {
 					logger.Info("___________________________________________________________________鑱斿姩浠诲姟鎶ヨ")
+					rw.RLock()
 					if TimeEleList[groupRule.GroupId] != nil { // 鏋佸伓灏旀湁鎯呭喌浼氱瓑浜巒il锛屼笉鐭ラ亾涓哄暐锛屽仛涓垽鏂互闃插畷鏈�
 						// 鎶婃暟缁勯噷缂撳瓨鐨勬暟鎹彇鍑烘潵涓�璧锋姤璀�
 						label.LinkCache = []structure.ResultMsg{}
@@ -342,6 +345,7 @@
 							}
 						}
 					}
+					rw.RUnlock()
 				}
 			}
 		} else {
@@ -370,14 +374,15 @@
 		//		va.Result = strconv.FormatBool(isOk)
 		//	}
 		//}
+		rw.Lock()
 		for k, _ := range TimeEleList {
 			if k == groupRule.GroupId {
 				delete(TimeEleList, k)
 				logger.Debug("鍥犱负瀹氭椂鍣ㄧ殑涓�甯ф暟鎹粨鏋滀负false锛屽共鎺夊畾鏃跺櫒")
 			}
 		}
+		rw.Unlock()
 		// 鍥犱负鏈抚鏁版嵁涓嶇鍚堣鍒欙紝鎵�浠ヤ篃涓嶇敤缁熻缁撴灉鏁扮粍閲岀殑涓滆タ
-
 	}
 }
 
@@ -387,6 +392,7 @@
 		if rule.SdkArgAlias == "duration" { //
 			logger.Info("褰撳墠灏忚鍒欐槸锛�---------", rule)
 			// 鍏堢湅鐪嬪畾鏃跺櫒鍏冪礌闃熷垪涓槸鍚︽湁杩欐潯瑙勫垯鐨勫畾鏃跺櫒,濡傛灉鏈夊氨涓嶈兘鍐嶆鍒涘缓浜�
+			rw.Lock()
 			var flag bool = true
 			for k, _ := range TimeEleList {
 				if k == groupId+"+"+rule.Id {
@@ -402,63 +408,8 @@
 				TimeEleList[groupId+"+"+rule.Id] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互褰撳墠鎸佺画鏃堕棿灏忚鍒檌d涓洪敭
 				logger.Info("鍒涘缓浜嗚鏁板櫒")
 			}
+			rw.Unlock()
 		}
 	}
 }
 
-func timeRuleResult(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
-	if rule.PolygonId == am.AreaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
-		if rule.SdkArgAlias == "time_rule" { // 鍒ゆ柇鏄惁绗﹀悎鏃堕棿瑙�
-			//logger.Info("----------褰撳墠鏃堕棿瑙勫垯锛�---------", rule)
-			// 鏍规嵁鏀惧�煎瓧娈甸噷瀛樼殑鏃堕棿瑙勫垯鐨刬d鍘诲彟涓�涓〃閲屾煡闇�瑕佹瘮瀵圭殑鏃堕棿娈碉紙姣斿褰撳墠鏃堕棿鏄懆涓夛紝搴旀牴鎹尯鍩焛d鏌ュ嚭鍏跺懆涓夌殑鍑犱釜甯冮槻鏃堕棿娈碉紝鏁扮粍锛�
-			//logger.Info("鏃堕棿瑙勫垯鐨勬祴璇�")
-			now := time.Now()
-			index := getIndexOfWeek(now.Weekday().String())
-			timeList := GetTimeById(rule.SdkArgValue, index)
-			//logger.Info("褰撳ぉ鐨勬椂闂存闆嗗悎锛�----------", timeList)
-			//logger.Info("浠庢暟鎹簱涓煡鍑虹殑鏃堕棿瑙勫垯锛�", timeList)
-			// 鍒ゆ柇鍥剧墖鏁版嵁鐨勬椂闂存槸鍚︾鍚堝綋鍓嶈鍒� 鍦ㄤ竴涓嵆涓簍rue锛屽叏涓嶅湪涓篺alse
-
-			if rule.Operator == "satisfy" || rule.Operator == "==" { // 婊¤冻鎵�閫夌殑鏃堕棿瑙勫垯
-				flag := "false"
-				for _, timeSlot := range timeList {
-					formula := "'" + timeSlot.Start + "'" + "<" + "'" + am.Time + "'"
-					expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
-					result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
-
-					formula1 := "'" + timeSlot.End + "'" + ">" + "'" + am.Time + "'"
-					expression1, _ := govaluate.NewEvaluableExpression(formula1) // 寰楀埌鏁板鍏紡
-					result1, _ := expression1.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
-					//logger.Info("鐪嬬湅杩欎袱灏婂ぇ绁�", result, result1)
-					if result.(bool) && result1.(bool) {
-						flag = "true"
-						break
-					}
-				}
-				return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort}
-			}
-
-			if rule.Operator == "unsatisfy" || rule.Operator == "!=" { // 涓嶆弧瓒虫墍閫夌殑鏃堕棿瑙勫垯
-				flag := "true"
-				for _, timeSlot := range timeList {
-					formula := "'" + timeSlot.Start + "'" + " < " + "'" + am.Time + "'"
-					//logger.Info("-----------------鏃堕棿瑙勫垯涓嶆弧瓒崇殑鍏紡start锛�", formula)
-					expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
-					result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
-
-					formula1 := "'" + timeSlot.End + "'" + " > " + "'" + am.Time + "'"
-					//logger.Info("-----------------鏃堕棿瑙勫垯涓嶆弧瓒崇殑鍏紡end锛�", formula1)
-					expression1, _ := govaluate.NewEvaluableExpression(formula1) // 寰楀埌鏁板鍏紡
-					result1, _ := expression1.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
-					if result.(bool) && result1.(bool) {
-						flag = "false"
-						break
-					}
-				}
-				return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort}
-			}
-
-		}
-	}
-	return structure.LittleRuleResult{}
-}

--
Gitblit v1.8.0