From aed40b946f0e5de5aa82d4be47595905065770b0 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期五, 30 六月 2023 15:52:29 +0800
Subject: [PATCH] 调整代码

---
 report/tasks.go |   56 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 53 insertions(+), 3 deletions(-)

diff --git a/report/tasks.go b/report/tasks.go
index de930dc..f735c2d 100644
--- a/report/tasks.go
+++ b/report/tasks.go
@@ -3,11 +3,12 @@
 import (
 	"encoding/json"
 	"io/ioutil"
-	"kingdee-dbapi/logger"
+	"time"
 
 	"kingdee-dbapi/cache"
 	"kingdee-dbapi/config"
 	"kingdee-dbapi/kingdee"
+	"kingdee-dbapi/logger"
 	"kingdee-dbapi/models"
 	"kingdee-dbapi/nsqclient"
 )
@@ -55,7 +56,7 @@
 	//ok := nsqclient.HttpPost(config.Options.OrderTopic, b)
 
 	if len(list) == 0 {
-		logger.Debug("娌℃湁鏂扮殑璁㈠崟闇�瑕佷笂鎶�")
+		logger.Debug("娌℃湁鏂扮殑璁㈠崟鏁版嵁")
 		return
 	}
 
@@ -78,8 +79,22 @@
 	}
 }
 
+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)
@@ -95,10 +110,41 @@
 		}
 	} 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
+		}
 	}
 
-	// 姣忔鍙� 100 鏉�
+	// 姣忔鍙� 1000 鏉�
 	successCnt := 0
 	for i := 0; i < len(list); i += 1000 {
 		end := i + 1000
@@ -119,9 +165,13 @@
 		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