From 1a6fa89e9ffc8ade73afbeda3e6c791bad1d4cd9 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期二, 15 八月 2023 17:30:57 +0800 Subject: [PATCH] 添加bom子项的上报 --- report/send.go | 53 +++++++++++++++-- kingdee/bom.go | 73 +++++++++++++++++++++++- 2 files changed, 117 insertions(+), 9 deletions(-) diff --git a/kingdee/bom.go b/kingdee/bom.go index 2177773..2a3003c 100644 --- a/kingdee/bom.go +++ b/kingdee/bom.go @@ -1,5 +1,10 @@ package kingdee +import ( + "fmt" + "strings" +) + type ICBom struct { FInterID int `gorm:"column:FInterID" json:"FInterID"` // 鍐呯爜 FBOMNumber string `gorm:"column:FBOMNumber" json:"FBOMNumber"` // BOM鍗曠紪鍙� @@ -42,7 +47,7 @@ ICBom.FAudDate, ICBom.FPDMImportDate, ICBom.FStatus - FROM ICBom + 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 @@ -51,13 +56,75 @@ // 濡傛灉涓嶆槸璇锋眰鍏ㄩ儴鏁版嵁, 浠呮煡璇㈠綋澶╂洿鏂扮殑, 榛樿鏌ュ綋澶� if !fData { - sql = sql + " Where DateDiff(dd,FAudDate,getdate())=1" + sql = sql + " WHERE DateDiff(dd, ICBom.FAudDate, getdate())=1" } var result []ICBom db.Raw(sql).Scan(&result) - //db.Raw(sql).Debug().Scan(&result) + + return result +} + +type ICBomChild struct { + FInterID int `gorm:"column:FInterID" json:"FInterID"` // 鎵�灞濨OM鍐呯爜 + FBOMNumber string `gorm:"column:FBOMNumber" json:"FBOMNumber"` // 鎵�灞濨OM鍗曠紪鍙� + FEntryID int `gorm:"column:FEntryID" json:"FEntryID"` // 椤哄簭鍙� + FItemIDNumber string `gorm:"column:FItemIDNumber" json:"FItemIDNumber"` // 鐗╂枡浠g爜 + FItemIDName string `gorm:"column:FItemIDName" json:"FItemIDName"` // 鐗╂枡鍚嶇О + FModel string `gorm:"column:FModel" json:"FModel"` // 瑙勬牸鍨嬪彿 + FErpClsID string `gorm:"column:FErpClsID" json:"FErpClsID"` // 鐗╂枡灞炴�� + FMaterielTypeName string `gorm:"column:FMaterielTypeName" json:"FMaterielTypeName"` // 瀛愰」绫诲瀷 + FMarshalTypeName string `gorm:"column:FMarshalTypeName" json:"FMarshalTypeName"` // 閰嶇疆灞炴�� + FQty float64 `gorm:"column:FQty" json:"FQty"` // 鏁伴噺 + FUnitName string `gorm:"column:FUnitName" json:"FUnitName"` // 鍗曚綅 + FPercent float64 `gorm:"column:FPercent" json:"FPercent"` // 璁″垝鐧惧垎姣� + FBackFlushNumber string `gorm:"column:FBackFlushNumber" json:"FBackFlushNumber"` // 鏄惁鍊掑啿浠g爜 + FBackFlushName string `gorm:"column:FBackFlushName" json:"FBackFlushName"` // 鏄惁鍊� + FUseState string `gorm:"column:FUseState" json:"FUseState"` // 浣跨敤鐘舵�� + FStockIDNumber string `gorm:"column:FStockIDNumber" json:"FStockIDNumber"` // 浠撳簱浠g爜 + FStockIDName string `gorm:"column:FStockIDName" json:"FStockIDName"` // 浠撳簱鍚嶇О + FPDMImportDate string `gorm:"column:FPDMImportDate" json:"FPDMImportDate"` // 瀵煎叆鏃堕棿 +} + +func BomChild(bomNumber []string) []ICBomChild { + sql := ` + SELECT ICBomChild.FInterID, + ICBOM.FBOMNumber, + ICBomChild.FEntryID, + t_ICItem.FNumber as FItemIDNumber, + t_ICItem.FName as FItemName, + t_ICItem.FModel as FModel, + (SELECT FName FROM t_SubMessage WHERE t_ICItem.FErpClsID=FInterID) as FErpCls, + t010.FName as FMaterielTypeName, + t011.FName as FMarshalTypeName, + ICBomChild.FQty, + t_MeasureUnit.FName as FUnitName, + ICBomChild.FPercent, + t012.FID as FBackFlushNumber, + t012.FName as FBackFlushName, + (SELECT FName FROM t_SubMessage WHERE t_ICItem.FUseState=FInterID) as FUseState, + t_Stock.FNumber as FStockIDNumber, + t_Stock.FName as FStockIDName, + ICBomChild.FPDMImportDate + FROM ICBomChild + join t_ICItem on t_ICItem.FItemID = ICBomChild.FItemID AND t_ICItem.FItemID <>0 + left join ICBOM on ICBOM.FInterID = ICBomChild.FInterID AND ICBOM.FInterID<>0 + left join t_MeasureUnit on t_MeasureUnit.FItemID = t_ICItem.FUnitID AND t_MeasureUnit.FItemID<>0 + left join t_SubMessage t010 on t010.FInterID = ICBomChild.FMaterielType AND t010.FInterID <>0 + left join t_SubMessage t011 on t011.FInterID = ICBomChild.FMarshalType AND t011.FInterID <>0 + left join t_SubMessage t012 on t012.FInterID = ICBomChild.FBackFlush AND t012.FInterID <>0 + left join t_Stock on t_Stock.FItemID = ICBomChild.FStockID AND t_Stock.FItemID <>0 + ` + + // 鎸塨om鏌ヨ + if bomNumber != nil { + sql = fmt.Sprintf("%s WHERE ICBOM.FBOMNumber in('%s')", sql, strings.Join(bomNumber, "','")) + } + + var result []ICBomChild + + db.Raw(sql).Scan(&result) return result } diff --git a/report/send.go b/report/send.go index 6df988f..c51e58d 100644 --- a/report/send.go +++ b/report/send.go @@ -130,7 +130,10 @@ logger.Warn("搴撳瓨鏁版嵁涓婃姤澶辫触") //涓婃姤澶辫触, 缂撳瓨娓呯┖ - invReportedCache = make(map[string]float64, 0) + for _, v := range list[i:end] { + key := v.FNumber + v.FBatchNo + v.FStockNo + delete(invReportedCache, key) + } } else { successCnt = end } @@ -139,17 +142,17 @@ logger.Debug("宸蹭笂鎶�%d鏉″簱瀛樻暟鎹�", successCnt) } +// bom鏁版嵁鍒哹om鍜宐omChild涓や釜琛� func SendBom(fData bool) { // 涓婃姤bom bomList := kingdee.BomList(fData) logger.Debug("鏌ヨ鍒�%d鏉om鏁版嵁", len(bomList)) b, _ := json.Marshal(bomList) - ioutil.WriteFile("bomList.tmp", b, 0644) // 杩囨护鏁版嵁, 鍒ゆ柇鏄惁宸茬粡涓婃姤杩�, 璇锋眰鍏ㄩ噺鏁版嵁涓嶈繃婊�, 鐩存帴涓婃姤 - if fData { + if !fData { for i := 0; i < len(bomList); { cacheKey := bomList[i].FBOMNumber + bomList[i].FAudDate if _, ok := bomReportedCache[cacheKey]; ok { @@ -161,8 +164,9 @@ } } + // 鍒嗙粍涓婁紶bom鏁版嵁 if len(bomList) == 0 { - logger.Debug("娌℃湁瑕佹洿鏂扮殑Bom鏁版嵁.") + logger.Debug("娌℃湁瑕佹洿鏂扮殑BOM鏁版嵁.") } else { // 姣忔鍙� 1000 鏉� successCnt := 0 @@ -174,13 +178,15 @@ 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) + for _, v := range bomList[i:end] { + key := v.FBOMNumber + v.FAudDate + delete(bomReportedCache, key) + } } else { successCnt = end } @@ -189,4 +195,39 @@ } // 涓婃姤bom瀛愰」 + var bomChildList []kingdee.ICBomChild + + // 濡傛灉璇锋眰鍏ㄩ噺鏁版嵁, 鐩存帴鏌ヨ鎵�鏈夌殑鏁版嵁骞跺彂閫�. 澧為噺涓婃姤, 鍏堝垽鏂璪om鏄惁鏈夋洿鏂�,鐒跺悗鎸塨om缂栫爜鏌ヨ瀛愰」 + if fData { + bomChildList = kingdee.BomChild(nil) + b, _ := json.Marshal(bomChildList) + ioutil.WriteFile("bomChdList.tmp", b, 0644) + } else { + if len(bomList) <= 0 { + return + } + } + + if len(bomChildList) == 0 { + logger.Debug("娌℃湁瑕佹洿鏂扮殑BOM瀛愰」鏁版嵁.") + } else { + // 姣忔鍙� 1000 鏉� + successCnt := 0 + for i := 0; i < len(bomChildList); i += 1000 { + end := i + 1000 + if end > len(bomChildList) { + end = len(bomChildList) + } + + b, _ := json.Marshal(bomChildList[i:end]) + + ok := nsqclient.Produce(config.Options.BomChildTopic, b) + if !ok { + logger.Warn("BOM鏁版嵁涓婃姤澶辫触") + } else { + successCnt = end + } + } + logger.Debug("宸蹭笂鎶�%d鏉OM瀛愰」鏁版嵁", successCnt) + } } -- Gitblit v1.8.0