From 3bbcdae17bd49743737df19df201ec56e48260de Mon Sep 17 00:00:00 2001 From: gigibox <gigibox@163.com> Date: 星期三, 21 六月 2023 18:11:26 +0800 Subject: [PATCH] 添加相同编号相同批次并且同一个仓库的库存数据过滤 --- report/tasks.go | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 51 insertions(+), 1 deletions(-) diff --git a/report/tasks.go b/report/tasks.go index de930dc..a79046a 100644 --- a/report/tasks.go +++ b/report/tasks.go @@ -4,6 +4,7 @@ "encoding/json" "io/ioutil" "kingdee-dbapi/logger" + "time" "kingdee-dbapi/cache" "kingdee-dbapi/config" @@ -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