From 8f750b461a4f442825e516016bf78d05ed66afcb Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期一, 14 八月 2023 18:14:50 +0800
Subject: [PATCH] 添加bom查询

---
 config.json            |    6 
 /dev/null              |  177 ----------------------
 config/config.go       |    8 
 kingdee/icInventory.go |    2 
 report/send.go         |  185 +++++++++++++++++++++++
 report/task.go         |   24 +-
 kingdee/bom.go         |   63 +++++++
 gui/gui.go             |    6 
 kingdee/query.go       |    2 
 main.go                |    2 
 kingdee/cst.go         |    4 
 11 files changed, 282 insertions(+), 197 deletions(-)

diff --git a/config.json b/config.json
index 36ab7dc..c3c3482 100644
--- a/config.json
+++ b/config.json
@@ -7,12 +7,14 @@
     "nsq_server": "121.31.232.83:4150",
     "nsq_webapi": "http://121.31.232.83:9080/api/nsq/pub?topic=your_topic",
     "order_topic": "aps.wangpengfei.erp.seorder",
+    "bom_topic": "aps.wangpengfei.erp.icBom",
+    "bom_query_topic": "",
+    "bom_child_topic": "",
     "inventory_topic": "aps.wangpengfei.erp.inventory",
     "query_topic": "aps.wangpengfei.erp.k3resource",
     "reply_topic": "aps.wangpengfei.erp.k3reply",
     "cst_webapi": "http://192.168.20.249/cst/local_post.ashx",
     "cst_query_topic": "aps.wangpengfei.erp.cstApply",
     "cst_reply_topic": "aps.wangpengfei.erp.cstReply",
-    "interval": 60,
-    "debug": false
+    "interval": 60
 }
\ No newline at end of file
diff --git a/config/config.go b/config/config.go
index fbeb267..3994d37 100644
--- a/config/config.go
+++ b/config/config.go
@@ -17,6 +17,9 @@
 	NsqServer      string `json:"nsq_server"`      // nsq TCP鏈嶅姟绔湴鍧�
 	NsqWebApi      string `json:"nsq_webapi"`      // nsq HTTP鎺ュ彛鍦板潃
 	OrderTopic     string `json:"order_topic"`     // 璁㈠崟涓婃姤鐨則opic
+	BomTopic       string `json:"bom_topic"`       // bom涓婃姤鐨則opic
+	BomQueryTopic  string `json:"bom_query_topic"` // bom涓婃姤鐨則opic
+	BomChildTopic  string `json:"bom_child_topic"` // bom瀛愰」涓婃姤鐨則opic
 	InventoryTopic string `json:"inventory_topic"` // 搴撳瓨涓婃姤鐨則opic
 	SqlQueryTopic  string `json:"query_topic"`     // 閲戣澏鏌ヨ鎺ュ彛鐨則opic
 	SqlReplyTopic  string `json:"reply_topic"`     // 閲戣澏鍝嶅簲鏌ヨ鎺ュ彛鐨則opic
@@ -24,7 +27,6 @@
 	CSTQueryTopic  string `json:"cst_query_topic"` // 鎻愪氦鐢熶骇浠诲姟鍗曚富棰�
 	CSTReplyTopic  string `json:"cst_reply_topic"` // 鍝嶅簲鐢熶骇浠诲姟鍗曚富棰�
 	SyncInterval   int    `json:"interval"`        // 鍚屾鐨勬椂闂撮棿闅�, 鍗曚綅/绉�
-	Debug          bool   `json:"debug"`           // 鏈湴璋冭瘯, 鍙栨湰鍦版暟鎹�
 }
 
 const configPath = "config.json"
@@ -40,13 +42,15 @@
 	Options.NsqServer = "fai365.com:4150"
 	Options.NsqWebApi = "http://121.31.232.83:9080/api/nsq/pub?topic=your_topic"
 	Options.OrderTopic = "aps.factory.erp.seorder"
+	Options.BomTopic = "aps.factory.erp.icBom"
+	Options.BomChildTopic = "aps.factory.erp.icBomChild"
+	Options.BomQueryTopic = "aps.factory.erp.icBomQuery"
 	Options.InventoryTopic = "aps.factory.erp.inventory"
 	Options.SqlQueryTopic = "aps.factory.erp.k3resource"
 	Options.SqlReplyTopic = "aps.factory.erp.k3reply"
 	Options.CSTQueryTopic = "aps.factory.erp.cstApply"
 	Options.CSTReplyTopic = "aps.factory.erp.cstReply"
 	Options.SyncInterval = 60
-	Options.Debug = false
 }
 
 func Load() {
diff --git a/gui/gui.go b/gui/gui.go
index fcaa3b5..94048e8 100644
--- a/gui/gui.go
+++ b/gui/gui.go
@@ -81,17 +81,13 @@
 		if err != nil {
 			logger.Error("db init error:%s", err.Error())
 			dialog.ShowError(err, w)
-
-			if !config.Options.Debug {
-				return
-			}
 		}
 
 		form.Disable()
 		submitBtn.Text = "宸插惎鍔�"
 		submitBtn.Disable()
 
-		report.StartReport()
+		report.Start()
 
 		// 寮�鍚闃匰QL鏌ヨ
 		go nsqclient.InitNsqConsumer(config.Options.SqlQueryTopic, "sensor01", kingdee.SqlQueryHandle)
diff --git a/kingdee/bom.go b/kingdee/bom.go
new file mode 100644
index 0000000..9b276bf
--- /dev/null
+++ b/kingdee/bom.go
@@ -0,0 +1,63 @@
+package kingdee
+
+type ICBom struct {
+	FInterID         int     // 鍐呯爜
+	FBOMNumber       string  // BOM鍗曠紪鍙�
+	FUseStatus       int     // 浣跨敤鐘舵�佺爜
+	FUseStatusName   string  // 浣跨敤鐘舵��
+	FItemIDNumber    string  // 鐗╂枡浠g爜
+	FItemIDName      string  // 鐗╂枡鍚嶇О
+	FModel           string  // 瑙勬牸鍨嬪彿
+	FErpClsID        string  // 鐗╂枡灞炴��
+	FQty             float64 // 鏁伴噺
+	FUnitName        string  // 鍗曚綅
+	FYield           float64 // 鎴愬搧鐜�
+	FRoutingIDNumber string  // 宸ヨ壓璺嚎浠g爜
+	FRoutingIDName   string  // 宸ヨ壓璺嚎鍚嶇О
+	FNote            string  // 澶囨敞
+	FBomType         int     // BOM绫诲瀷
+	FAudDate         string  // 鏇存柊鏃堕棿
+	FPDMImportDate   string  // 瀵煎叆鏃堕棿
+	FStatus          int     // 鐘舵��
+}
+
+func BomList(fData bool) []ICBom {
+	sql := `
+	SELECT 
+		ICBom.FInterID, 
+		ICBom.FBOMNumber, 
+		ICBom.FUseStatus, 
+		t_SubMessage.FName as FUseStatusName, 
+		t_ICItem.FNumber as FItemIDNumber, 
+		t_ICItem.FName as FItemIDName, 
+		t_ICItem.FModel as FModel,
+		(SELECT FName FROM t_SubMessage WHERE t_ICItem.FErpClsID=FInterID) as FErpClsID, 
+		ICBom.FQty,
+		t_MeasureUnit.FName as FUnitName, 
+		ICBom.FYield, 
+		t_Routing.FBillNO as FRoutingIDNumber, 
+		t_Routing.FRoutingName as FRoutingIDName, 		
+		ICBom.FNote, 		
+		ICBom.FBomType, 
+		ICBom.FAudDate, 
+		ICBom.FPDMImportDate, 
+		ICBom.FStatus
+	 FROM ICBom 
+		left join t_SubMessage on ICBom.FUseStatus = t_SubMessage.FInterID AND t_SubMessage.FInterID <> 0  
+		join t_ICItem on ICBom.FItemID= t_ICItem.FItemID  AND t_ICItem.FItemID <> 0  
+		left join t_MeasureUnit on ICBom.FUnitID = t_MeasureUnit.FItemID AND t_MeasureUnit.FItemID <> 0  
+		left join t_Routing on ICBom.FRoutingID = t_Routing.FInterID AND t_Routing.FInterID <> 0
+	`
+
+	// 濡傛灉涓嶆槸璇锋眰鍏ㄩ儴鏁版嵁, 浠呮煡璇㈠綋澶╂洿鏂扮殑, 榛樿鏌ュ綋澶�
+	if !fData {
+		sql = sql + " Where DateDiff(dd,FAudDate,getdate())=1"
+	}
+
+	var result []ICBom
+
+	db.Raw(sql).Scan(&result)
+	//db.Raw(sql).Debug().Scan(&result)
+
+	return result
+}
diff --git a/kingdee/cst.go b/kingdee/cst.go
index 9d9e1ab..17621bb 100644
--- a/kingdee/cst.go
+++ b/kingdee/cst.go
@@ -1,5 +1,9 @@
 package kingdee
 
+/*
+璇锋眰鍐欏叆鐢熶骇浠诲姟鍗曠殑鎺ュ彛
+鎺ユ敹aps鐨勮姹�, 璋冪敤鏈湴鐨勭敓浜т换鍔″崟鏈嶅姟, 骞跺搷搴旂粨鏋�
+*/
 import (
 	"bytes"
 	"encoding/json"
diff --git a/kingdee/icInventory.go b/kingdee/icInventory.go
index eb1129b..14f35cf 100644
--- a/kingdee/icInventory.go
+++ b/kingdee/icInventory.go
@@ -1,5 +1,7 @@
 package kingdee
 
+// 搴撳瓨鏌ヨ
+
 type Inventory struct {
 	FNumber    string  `gorm:"column:FNumber" json:"FNumber"`       // 鐗╂枡浠g爜
 	FName      string  `gorm:"column:FName" json:"FName"`           // 鐗╂枡鍚嶇О
diff --git a/kingdee/query.go b/kingdee/query.go
index 37e75c0..e905a4a 100644
--- a/kingdee/query.go
+++ b/kingdee/query.go
@@ -10,6 +10,8 @@
 	"kingdee-dbapi/nsqclient"
 )
 
+// 閫氱敤sql鏌ヨ鎺ュ彛
+
 type SqlQueryMsg struct {
 	Key     string // 璇锋眰
 	Command string
diff --git a/main.go b/main.go
index a98858d..8e31c56 100644
--- a/main.go
+++ b/main.go
@@ -16,7 +16,7 @@
 )
 
 func main() {
-	logger.InitLog("kingdee-dbapi.log", "debug", 15, false)
+	logger.InitLog("log/kingdee-dbapi.log", "debug", 15, false)
 	logger.Info("kingdee-dbapi start!")
 
 	config.Load()
diff --git a/report/send.go b/report/send.go
new file mode 100644
index 0000000..770f53c
--- /dev/null
+++ b/report/send.go
@@ -0,0 +1,185 @@
+package report
+
+import (
+	"encoding/json"
+	"time"
+
+	"kingdee-dbapi/cache"
+	"kingdee-dbapi/config"
+	"kingdee-dbapi/kingdee"
+	"kingdee-dbapi/logger"
+	"kingdee-dbapi/models"
+	"kingdee-dbapi/nsqclient"
+)
+
+// 涓婃姤閿�鍞鍗�, 澧為噺, 鏈湴浼氬瓨鍌ㄥ凡缁忎笂鎶ヨ繃鐨�. 璁㈠崟涓嶅瓨鍦ㄤ慨鏀�
+func SendOrder() {
+	list := kingdee.SeOrderList()
+	logger.Debug("鏌ヨ鍒�%d鏉¤鍗曚俊鎭�", len(list))
+
+	var completedOrderNo = make(map[string]struct{})
+
+	for i := 0; i < len(list); {
+		if cache.Exists(list[i].FBillNo) {
+			list = append(list[:i], list[i+1:]...)
+		} else {
+			completedOrderNo[list[i].FBillNo] = struct{}{}
+			i++
+		}
+	}
+
+	b, _ := json.Marshal(list)
+
+	// http鍗忚涓婃姤, 宸蹭慨鏀逛负TCP
+	//ok := nsqclient.HttpPost(config.Options.OrderTopic, b)
+
+	if len(list) == 0 {
+		logger.Debug("娌℃湁鏂扮殑璁㈠崟鏁版嵁")
+		return
+	}
+
+	// TCP鍗忚涓婃姤
+	ok := nsqclient.Produce(config.Options.OrderTopic, b)
+	if ok {
+		// 鍐欏叆鏁版嵁搴�, 鏍囪宸茬粡涓婃姤杩囦簡,閬垮厤閲嶅涓婃姤
+		for orderNo, _ := range completedOrderNo {
+			cursor := models.Order{
+				OrderNo: orderNo,
+			}
+
+			cursor.Insert()
+			cache.WriteCache(orderNo)
+		}
+
+		logger.Debug("宸蹭笂鎶�%d涓鍗曚俊鎭�", len(list))
+	} else {
+		logger.Warn("璁㈠崟鏁版嵁涓婃姤澶辫触")
+	}
+}
+
+var invReportedCache = make(map[string]float64, 0)
+var bomReportedCache = make(map[string]struct{}, 0)
+var fullInvData bool
+
+// 涓婃姤搴撳瓨
+func SendInventory() {
+	// 璁剧疆姣忓ぉ鍑屾櫒1鐐逛笂鎶ヤ竴娆″叏閲忔暟鎹�
+	hour := time.Now().Hour()
+	if hour == 1 {
+		if fullInvData == false {
+			invReportedCache = make(map[string]float64, 0)
+			// 椤轰究娓呯悊涓媌om鐨勫綋澶╃紦瀛�
+			bomReportedCache = make(map[string]struct{})
+			fullInvData = true
+		}
+	} else {
+		fullInvData = false
+	}
+
+	list := kingdee.ICInventory()
+
+	logger.Debug("鏌ヨ鍒�%d鏉″簱瀛樻暟鎹�", len(list))
+
+	// 鍏堣繃婊や竴閬嶆暟鎹�, 鏍肩憺绫冲彂鐜版湁鍚屼竴涓骇鍝佸悓鎵瑰彿鍚屼粨搴�, 鏈夊鏉″簱瀛樿褰曠殑鎯呭喌
+	// 灏嗙被浼肩殑鏁版嵁搴撳瓨鏁扮疮璁″埌涓�璧�
+	var filterMap = make(map[string]float64, 0)
+	for i := 0; i < len(list); {
+		cacheKey := list[i].FNumber + list[i].FBatchNo + list[i].FStockNo
+		if qty, ok := filterMap[cacheKey]; ok {
+			filterMap[cacheKey] = list[i].FUnitQty + qty
+			list = append(list[:i], list[i+1:]...)
+		} else {
+			filterMap[cacheKey] = list[i].FUnitQty
+			i++
+		}
+	}
+
+	// 杩囨护鏁版嵁, 鍒ゆ柇鏄惁宸茬粡涓婃姤杩�
+	for i := 0; i < len(list); {
+		cacheKey := list[i].FNumber + list[i].FBatchNo + list[i].FStockNo
+		if qty, ok := invReportedCache[cacheKey]; ok && qty == list[i].FUnitQty {
+			list = append(list[:i], list[i+1:]...)
+		} else {
+			invReportedCache[cacheKey] = list[i].FUnitQty
+			i++
+		}
+	}
+
+	if len(list) == 0 {
+		logger.Debug("娌℃湁瑕佹洿鏂扮殑搴撳瓨鏁版嵁.")
+		return
+	}
+
+	// 姣忔鍙� 1000 鏉�
+	successCnt := 0
+	for i := 0; i < len(list); i += 1000 {
+		end := i + 1000
+		if end > len(list) {
+			end = len(list)
+		}
+
+		b, _ := json.Marshal(list[i:end])
+
+		// HTTP鍗忚涓婃姤,宸蹭慨鏀逛负TCP
+		//nsqclient.HttpPost(config.Options.InventoryTopic, b)
+
+		// TCP鍗忚涓婃姤
+		ok := nsqclient.Produce(config.Options.InventoryTopic, b)
+		if !ok {
+			logger.Warn("搴撳瓨鏁版嵁涓婃姤澶辫触")
+
+			//涓婃姤澶辫触, 缂撳瓨娓呯┖
+			invReportedCache = make(map[string]float64, 0)
+		} else {
+			successCnt = end
+		}
+	}
+
+	logger.Debug("宸蹭笂鎶�%d鏉″簱瀛樻暟鎹�", successCnt)
+}
+
+func SendBom(fData bool) {
+	// 涓婃姤bom
+	bomList := kingdee.BomList(fData)
+	// 杩囨护鏁版嵁, 鍒ゆ柇鏄惁宸茬粡涓婃姤杩�, 璇锋眰鍏ㄩ噺鏁版嵁涓嶈繃婊�, 鐩存帴涓婃姤
+	if fData {
+		for i := 0; i < len(bomList); {
+			cacheKey := bomList[i].FBOMNumber + bomList[i].FAudDate
+			if _, ok := bomReportedCache[cacheKey]; ok {
+				bomList = append(bomList[:i], bomList[i+1:]...)
+			} else {
+				bomReportedCache[cacheKey] = struct{}{}
+				i++
+			}
+		}
+	}
+
+	if len(bomList) == 0 {
+		logger.Debug("娌℃湁瑕佹洿鏂扮殑Bom鏁版嵁.")
+	} else {
+		// 姣忔鍙� 1000 鏉�
+		successCnt := 0
+		for i := 0; i < len(bomList); i += 1000 {
+			end := i + 1000
+			if end > len(bomList) {
+				end = len(bomList)
+			}
+
+			b, _ := json.Marshal(bomList[i:end])
+
+			// TCP鍗忚涓婃姤
+			ok := nsqclient.Produce(config.Options.BomTopic, b)
+			if !ok {
+				logger.Warn("BOM鏁版嵁涓婃姤澶辫触")
+
+				//涓婃姤澶辫触, 缂撳瓨娓呯┖
+				bomReportedCache = make(map[string]struct{}, 0)
+			} else {
+				successCnt = end
+			}
+		}
+		logger.Debug("宸蹭笂鎶�%d鏉OM鏁版嵁", successCnt)
+	}
+
+	// 涓婃姤bom瀛愰」
+}
diff --git a/report/loop.go b/report/task.go
similarity index 61%
rename from report/loop.go
rename to report/task.go
index 4fddf91..f0011d1 100644
--- a/report/loop.go
+++ b/report/task.go
@@ -11,18 +11,18 @@
 var ctx context.Context
 var cancel context.CancelFunc
 
-func StartReport() {
+func Start() {
 	ctx, cancel = context.WithCancel(context.Background())
-	go Loop(ctx)
+	go queryTasks(ctx)
 }
 
 func RestartReport() {
 	cancel()
 
-	StartReport()
+	Start()
 }
 
-func Loop(c context.Context) {
+func queryTasks(c context.Context) {
 	logger.Debug("鍚姩鏁版嵁涓婃姤浠诲姟")
 	for {
 		select {
@@ -31,15 +31,19 @@
 			return
 		default:
 			// 涓婃姤璁㈠崟
-			SendOrder()
+			if config.Options.OrderTopic != "" {
+				SendOrder()
+			}
 
 			// 涓婃姤鍗虫椂搴撳瓨
-			SendInventory()
+			if config.Options.InventoryTopic != "" {
+				SendInventory()
+			}
 
-			// 娴嬭瘯鏌ヨ璇锋眰
-			//sql := []byte("select * from t_icitem where FItemID=3316")
-			//ok := nsqclient.Produce(config.Options.SqlQueryTopic, sql)
-			//logger.Debug("娴嬭瘯璇锋眰鎺ュ彛, %v", ok)
+			// 涓婃姤bom
+			if config.Options.BomTopic != "" {
+				SendBom(true)
+			}
 
 			time.Sleep(time.Duration(config.Options.SyncInterval) * time.Second)
 		}
diff --git a/report/tasks.go b/report/tasks.go
deleted file mode 100644
index f735c2d..0000000
--- a/report/tasks.go
+++ /dev/null
@@ -1,177 +0,0 @@
-package report
-
-import (
-	"encoding/json"
-	"io/ioutil"
-	"time"
-
-	"kingdee-dbapi/cache"
-	"kingdee-dbapi/config"
-	"kingdee-dbapi/kingdee"
-	"kingdee-dbapi/logger"
-	"kingdee-dbapi/models"
-	"kingdee-dbapi/nsqclient"
-)
-
-const orderLocalStore = "order.tmp"
-const inventoryLocalStore = "inventory.tmp"
-
-func SendOrder() {
-	var list []kingdee.SEOrder
-
-	if config.Options.Debug {
-		data, err := ioutil.ReadFile(orderLocalStore)
-		if err != nil {
-			logger.Error("鏂囦欢璇诲彇澶辫触, %s", err.Error())
-			return
-		}
-		err = json.Unmarshal(data, &list)
-		if err != nil {
-			logger.Error("鏂囦欢鍐呭瑙f瀽澶辫触, %s", err.Error())
-			return
-		}
-	} else {
-		list = kingdee.SeOrderList()
-		logger.Debug("鏌ヨ鍒�%d鏉¤鍗曚俊鎭�", len(list))
-	}
-
-	var completedOrderNo = make(map[string]struct{})
-
-	for i := 0; i < len(list); {
-		if cache.Exists(list[i].FBillNo) {
-			list = append(list[:i], list[i+1:]...)
-		} else {
-			completedOrderNo[list[i].FBillNo] = struct{}{}
-			i++
-		}
-	}
-
-	b, _ := json.Marshal(list)
-
-	if !config.Options.Debug {
-		ioutil.WriteFile(orderLocalStore, b, 0644)
-	}
-
-	// http鍗忚涓婃姤, 宸蹭慨鏀逛负TCP
-	//ok := nsqclient.HttpPost(config.Options.OrderTopic, b)
-
-	if len(list) == 0 {
-		logger.Debug("娌℃湁鏂扮殑璁㈠崟鏁版嵁")
-		return
-	}
-
-	// TCP鍗忚涓婃姤
-	ok := nsqclient.Produce(config.Options.OrderTopic, b)
-	if ok {
-		// 鍐欏叆鏁版嵁搴�, 鏍囪宸茬粡涓婃姤杩囦簡,閬垮厤閲嶅涓婃姤
-		for orderNo, _ := range completedOrderNo {
-			cursor := models.Order{
-				OrderNo: orderNo,
-			}
-
-			cursor.Insert()
-			cache.WriteCache(orderNo)
-		}
-
-		logger.Debug("宸蹭笂鎶�%d涓鍗曚俊鎭�", len(list))
-	} else {
-		logger.Warn("璁㈠崟鏁版嵁涓婃姤澶辫触")
-	}
-}
-
-var invReportedCache = make(map[string]float64, 0)
-var fullLoad bool
-
-func SendInventory() {
-	var list []kingdee.Inventory
-
-	// 璁剧疆姣忓ぉ鍑屾櫒1鐐逛笂鎶ヤ竴娆″叏閲忔暟鎹�
-	hour := time.Now().Hour()
-	if hour == 1 {
-		if fullLoad == false {
-			invReportedCache = make(map[string]float64, 0)
-			fullLoad = true
-		}
-	} else {
-		fullLoad = false
-	}
-
-	if config.Options.Debug {
-		data, err := ioutil.ReadFile(inventoryLocalStore)
-		if err != nil {
-			logger.Error("鏂囦欢璇诲彇澶辫触, %s", err.Error())
-			return
-		}
-
-		err = json.Unmarshal(data, &list)
-		if err != nil {
-			logger.Error("鏂囦欢鍐呭瑙f瀽澶辫触, %s", err.Error())
-			return
-		}
-	} else {
-		list = kingdee.ICInventory()
-
-		logger.Debug("鏌ヨ鍒�%d鏉″簱瀛樻暟鎹�", len(list))
-
-		// 鍏堣繃婊や竴閬嶆暟鎹�, 鏍肩憺绫冲彂鐜版湁鍚屼竴涓骇鍝佸悓鎵瑰彿鍚屼粨搴�, 鏈夊鏉″簱瀛樿褰曠殑鎯呭喌
-		// 灏嗙被浼肩殑鏁版嵁搴撳瓨鏁扮疮璁″埌涓�璧�
-		var filterMap = make(map[string]float64, 0)
-		for i := 0; i < len(list); {
-			cacheKey := list[i].FNumber + list[i].FBatchNo + list[i].FStockNo
-			if qty, ok := filterMap[cacheKey]; ok {
-				filterMap[cacheKey] = list[i].FUnitQty + qty
-				list = append(list[:i], list[i+1:]...)
-			} else {
-				filterMap[cacheKey] = list[i].FUnitQty
-				i++
-			}
-		}
-
-		// 杩囨护鏁版嵁, 鍒ゆ柇鏄惁宸茬粡涓婃姤杩�
-		for i := 0; i < len(list); {
-			cacheKey := list[i].FNumber + list[i].FBatchNo + list[i].FStockNo
-			if qty, ok := invReportedCache[cacheKey]; ok && qty == list[i].FUnitQty {
-				list = append(list[:i], list[i+1:]...)
-			} else {
-				invReportedCache[cacheKey] = list[i].FUnitQty
-				i++
-			}
-		}
-
-		if len(list) == 0 {
-			logger.Debug("娌℃湁瑕佹洿鏂扮殑搴撳瓨鏁版嵁.")
-			return
-		}
-	}
-
-	// 姣忔鍙� 1000 鏉�
-	successCnt := 0
-	for i := 0; i < len(list); i += 1000 {
-		end := i + 1000
-		if end > len(list) {
-			end = len(list)
-		}
-
-		b, _ := json.Marshal(list[i:end])
-
-		if !config.Options.Debug {
-			ioutil.WriteFile(inventoryLocalStore, b, 0644)
-		}
-
-		// HTTP鍗忚涓婃姤,宸蹭慨鏀逛负TCP
-		//nsqclient.HttpPost(config.Options.InventoryTopic, b)
-
-		// TCP鍗忚涓婃姤
-		ok := nsqclient.Produce(config.Options.InventoryTopic, b)
-		if !ok {
-			logger.Warn("搴撳瓨鏁版嵁涓婃姤澶辫触")
-
-			//涓婃姤澶辫触, 缂撳瓨娓呯┖
-			invReportedCache = make(map[string]float64, 0)
-		} else {
-			successCnt = end
-		}
-	}
-
-	logger.Debug("宸蹭笂鎶�%d鏉″簱瀛樻暟鎹�", successCnt)
-}

--
Gitblit v1.8.0