Pārlūkot izejas kodu

fix:
1. single中为类型增加别名
2. 增加multi功能(当前只支持多点位 and 逻辑)

gaoyagang 1 gadu atpakaļ
vecāks
revīzija
b01f5add5b
4 mainītis faili ar 70 papildinājumiem un 13 dzēšanām
  1. 44 5
      envitem/func.go
  2. 20 5
      envitem/func_test.go
  3. 2 0
      envitem/types.go
  4. 4 3
      envitem/vars.go

+ 44 - 5
envitem/func.go

@@ -9,6 +9,7 @@ import (
 	"metawant.greentech.com.cn/gaoyagang/gt-common/httplib"
 	"strconv"
 	"strings"
+	"sync"
 	"time"
 )
 
@@ -19,6 +20,8 @@ func SetOptions(options Options) {
 	if options.Cache != nil {
 		cache = options.Cache
 	}
+
+	fetchMultiItem = options.FetchMultiItem
 }
 
 func (m MultiEnvItem) GetProjectId() int64 {
@@ -37,7 +40,14 @@ func (m MultiEnvItem) getItemNames() []string {
 }
 
 func (m MultiEnvItem) FillCurrentValue() error {
-	datas, err := m.getCurrentData()
+	datas := make([]*ItemValueResp, 0)
+	var err error
+	if fetchMultiItem {
+		datas, err = m.getCurrentData()
+	} else {
+		datas, err = m.getCurrentDataByOne()
+	}
+
 	if err != nil {
 		return err
 	}
@@ -48,10 +58,12 @@ func (m MultiEnvItem) FillCurrentValue() error {
 	}
 
 	for _, data := range datas {
-		if k, ok := ikm[data.ItemName]; ok {
-			m[k].Value = data.Val
-			m[k].Htime = data.HTime
-			_ = m[k].setPrevValue()
+		if data != nil {
+			if k, ok := ikm[data.ItemName]; ok {
+				m[k].Value = data.Val
+				m[k].Htime = data.HTime
+				_ = m[k].setPrevValue()
+			}
 		}
 	}
 	return nil
@@ -103,6 +115,28 @@ func (m MultiEnvItem) FindPrevString() map[string]string {
 	return a
 }
 
+func (m MultiEnvItem) ClearValues() {
+	for _, item := range m {
+		item.clearValue()
+	}
+}
+
+func (m MultiEnvItem) getCurrentDataByOne() ([]*ItemValueResp, error) {
+	datas := make([]*ItemValueResp, len(m))
+	i := 0
+	var wg sync.WaitGroup
+	wg.Add(len(m))
+	for _, item := range m {
+		go func(index int, one *EnvItem) {
+			defer wg.Done()
+			datas[index], _ = one.getCurrentData()
+		}(i, item)
+		i++
+	}
+	wg.Wait()
+	return datas, nil
+}
+
 func (m MultiEnvItem) getCurrentData() ([]*ItemValueResp, error) {
 	req := httplib.Post(snapUrl)
 	data := make([]*ItemValueReq, 1)
@@ -325,6 +359,11 @@ func (e *EnvItem) GetItemPrevHtime() *time.Time {
 	return nil
 }
 
+func (e *EnvItem) clearValue() {
+	e.Value = nil
+	e.Htime = ""
+}
+
 // Scan 实现方法
 func (d *MultiEnvItem) Scan(input interface{}) error {
 	_ = json.Unmarshal(input.([]byte), &d)

+ 20 - 5
envitem/func_test.go

@@ -20,7 +20,7 @@ func TestEnvItem_GetCurrentData(t *testing.T) {
 }
 
 func TestMultiEnvItem_FillCurrentValue(t *testing.T) {
-	SetOptions(Options{GtServerIp: "47.96.12.136:8788"})
+	SetOptions(Options{GtServerIp: "47.96.12.136:8788", FetchMultiItem: false})
 	m := make(MultiEnvItem, 2)
 	m["C.M.LT_CIP@out"] = &EnvItem{
 		ProjectId: 92,
@@ -40,7 +40,7 @@ func TestMultiEnvItem_FillCurrentValue(t *testing.T) {
 }
 
 func TestMultiEnvItem_FillCurrentValue2(t *testing.T) {
-	SetOptions(Options{GtServerIp: "47.96.12.136:8788"})
+	SetOptions(Options{GtServerIp: "47.96.12.136:8788", FetchMultiItem: false})
 	js := `{"tmp":{"project_id":92,"device_code":"UF-4001A","plc_device_id":"0","item":"C.M.UF1_DB@press_PV","default_val":0},"feed_flow":{"project_id":92,"device_code":"UF-4001A","plc_device_id":"0","item":"C.M.UF1_FT_JS@out","default_val":0},"feed_pressure":{"project_id":92,"device_code":"UF-4001A","plc_device_id":"0","item":"C.M.UF1_PT_JS@out","default_val":0},"product_pressure":{"project_id":92,"device_code":"UF-4001A","plc_device_id":"0","item":"C.M.UF1_PT_CS@out","default_val":0},"feed_wq_turbidity":{"project_id":92,"device_code":"AIT-94061","plc_device_id":"0","item":"C.M.UF_Tur_ZJS@out","default_val":0},"water_temperature":{"project_id":92,"device_code":"TIT-34061","plc_device_id":"0","item":"C.M.RO_TT_ZJS@out","default_val":0},"product_wq_ph":{"project_id":92,"device_code":"AIT-95065b","plc_device_id":"0","item":"C.M.UF_PH_ZCS@out","default_val":0},"step":{"project_id":92,"device_code":"HB","plc_device_id":"0","item":"C.M.UF1_DB@word_control","default_val":0}}`
 	var multiEnvItems MultiEnvItem
 
@@ -48,15 +48,30 @@ func TestMultiEnvItem_FillCurrentValue2(t *testing.T) {
 
 	t.Log(multiEnvItems)
 
+	_ = multiEnvItems.FillCurrentValue()
+
 	for {
-		_ = multiEnvItems.FillCurrentValue()
+		//_ = multiEnvItems.FillCurrentValue()
+		multiEnvItems.ClearValues()
+		v := multiEnvItems.GetItemFloat64Value("feed_flow")
+		t.Logf("item: %s, %f", "feed_flow", v)
+
+		//for s, item := range multiEnvItems {
+		//	if item != nil {
+		//		t.Logf("item: %s value: %f htime: %v", s, item.GetItemFloat64Val(), item.GetItemHtime())
+		//	} else {
+		//		t.Logf("item: %s fetch failure", s)
+		//	}
+		//
+		//}
+
 		time.Sleep(2 * time.Second)
 
 		//ms := multiEnvItems.FindString()
 
-		t.Logf("%+v", multiEnvItems)
+		//t.Logf("%+v", multiEnvItems)
 
-		t.Logf("step: %d", multiEnvItems.GetItemInt64Value("step"))
+		//t.Logf("step: %d", multiEnvItems.GetItemInt64Value("step"))
 		//early := checkEarly(multiEnvItems.GetItemFloat64Value("Display_Time"), multiEnvItems.GetItemFloat64Value("Filter_Time_Set"), multiEnvItems.GetItemStringValue("Step"))
 		//advanced := checkAdvanced(multiEnvItems.GetItemFloat64Value("Display_Time"), multiEnvItems.GetItemFloat64Value("Filter_Time_Set"), multiEnvItems.GetItemStringValue("Step"))
 		//

+ 2 - 0
envitem/types.go

@@ -6,6 +6,8 @@ type (
 	Options struct {
 		GtServerIp string
 		Cache      *redis.Client
+		// 批量获取点位值
+		FetchMultiItem bool
 	}
 
 	EnvItem struct {

+ 4 - 3
envitem/vars.go

@@ -11,7 +11,8 @@ const (
 )
 
 var (
-	snapUrl = ""
-	ctlUrl  = ""
-	cache   *redis.Client
+	snapUrl        = ""
+	ctlUrl         = ""
+	cache          *redis.Client
+	fetchMultiItem = false
 )