Pārlūkot izejas kodu

增加一个不使用redis记录"上一个值的版本"

gaoyagang 11 mēneši atpakaļ
vecāks
revīzija
67cb974c40
3 mainītis faili ar 27 papildinājumiem un 41 dzēšanām
  1. 11 34
      envitem/func.go
  2. 13 7
      envitem/func_test.go
  3. 3 0
      envitem/vars.go

+ 11 - 34
envitem/func.go

@@ -259,33 +259,16 @@ func (e *EnvItem) getCurrentValue() (string, string, error) {
 	return resp.Val, resp.HTime, nil
 }
 
-func (e *EnvItem) getPrevValue() (string, string, error) {
-	if cache == nil {
-		return "", "", errors.New("not cache")
-	}
-	key := fmt.Sprintf(CACHE_PREV_VALUE_KEY, e.ProjectId, e.Item)
-	if cmd := cache.Get(context.Background(), key); cmd != nil {
-		n := strings.Split(cmd.Val(), "|")
-		if len(n) != 2 {
-			return "", "", errors.New("getPrevValue cache length error")
-		}
-		return n[0], n[1], nil
-	} else {
-		return "", "", cmd.Err()
+func (e *EnvItem) getPrevValue() (string, error) {
+	if v, ok := itemPrevValues.Load(e.Item); ok {
+		return v.(string), nil
 	}
+	return "", errors.New("not found prev envitem's value")
 }
 
 func (e *EnvItem) setPrevValue() error {
-	if cache == nil {
-		return errors.New("not cache")
-	}
-	key := fmt.Sprintf(CACHE_PREV_VALUE_KEY, e.ProjectId, e.Item)
-	value := fmt.Sprintf("%s|%s", e.Value, e.Htime)
-	if statusCmd := cache.Set(context.Background(), key, value, CACHE_PREV_VALUE_KEY_EXPIRE); statusCmd != nil {
-		return nil
-	} else {
-		return errors.New("setPrevValue error")
-	}
+	itemPrevValues.Store(e.Item, e.Value)
+	return nil
 }
 
 func (e *EnvItem) GetItemFloat64Val() float64 {
@@ -342,7 +325,7 @@ func (e *EnvItem) GetItemHtime() *time.Time {
 }
 
 func (e *EnvItem) GetItemPrevFloat64Val() float64 {
-	ov, _, err := e.getPrevValue()
+	ov, err := e.getPrevValue()
 	if err != nil {
 		return 0
 	}
@@ -355,7 +338,7 @@ func (e *EnvItem) GetItemPrevFloat64Val() float64 {
 }
 
 func (e *EnvItem) GetItemPrevInt64Val() int64 {
-	ov, _, err := e.getPrevValue()
+	ov, err := e.getPrevValue()
 	if err != nil {
 		return 0
 	}
@@ -368,16 +351,10 @@ func (e *EnvItem) GetItemPrevInt64Val() int64 {
 }
 
 func (e *EnvItem) GetItemPrevStringVal() string {
-	ov, _, _ := e.getPrevValue()
-	return ov
-}
-
-func (e *EnvItem) GetItemPrevHtime() *time.Time {
-	_, ht, _ := e.getPrevValue()
-	if t, err := time.ParseInLocation("2006-01-02 15:04:05", ht, time.Local); err == nil {
-		return &t
+	if ov, err := e.getPrevValue(); err == nil {
+		return ov
 	}
-	return nil
+	return ""
 }
 
 func (e *EnvItem) GetAdjustInt64Val() (int64, error) {

+ 13 - 7
envitem/func_test.go

@@ -37,8 +37,7 @@ func TestGetVirtualPlcItems(t *testing.T) {
 }
 
 func TestMultiEnvItem_FillCurrentValue(t *testing.T) {
-	cache := redis.NewClient(&redis.Options{Addr: "47.96.12.136:6379", Password: "", MaxRetries: 5})
-	SetOptions(Options{GtServerIp: "47.96.12.136:8788", FetchMultiItem: false, Cache: cache, AdjustValue: true})
+	SetOptions(Options{GtServerIp: "120.55.44.4:8900", FetchMultiItem: false})
 	m := make(MultiEnvItem, 2)
 	m["C.M.LT_CIP@out"] = &EnvItem{
 		ProjectId: 92,
@@ -54,14 +53,16 @@ func TestMultiEnvItem_FillCurrentValue(t *testing.T) {
 		Item:      "C.M.LT_QSC@out",
 	}
 
-	err := m.FillCurrentValue()
-	t.Log(err)
+	for {
+		ovmap := m.FindPrevString()
+		err := m.FillCurrentValue()
+		t.Log(err)
+		println("ovmap: ", ToString(ovmap))
+		println("nvmap: ", ToString(m.FindString()))
 
-	for s, item := range m {
-		t.Logf("item: %s value: %s htime: %s", s, item.Value, item.Htime)
+		time.Sleep(1 * time.Second)
 	}
 
-	m["C.M.LT_QSC@out"].ClearAdjust()
 }
 
 func TestMultiEnvItem_FillCurrentValue2(t *testing.T) {
@@ -166,3 +167,8 @@ func TestEnvItem_WaitEqValue(t *testing.T) {
 		t.Log(<-c)
 	}
 }
+
+func ToString(data interface{}) string {
+	bs, _ := json.Marshal(data)
+	return string(bs)
+}

+ 3 - 0
envitem/vars.go

@@ -2,6 +2,7 @@ package envitem
 
 import (
 	"github.com/go-redis/redis/v8"
+	"sync"
 	"time"
 )
 
@@ -14,6 +15,8 @@ const (
 )
 
 var (
+	itemPrevValues sync.Map
+
 	snapUrl        = ""
 	ctlUrl         = ""
 	cache          *redis.Client