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