From dc40143800edd914d0f721b06f90c8b4d307b979 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期四, 17 八月 2023 15:46:19 +0800 Subject: [PATCH] 调整bom --- report/send.go | 115 +++++++++++++++++++++++--------------- kingdee/bom.go | 37 ++++++------ 2 files changed, 88 insertions(+), 64 deletions(-) diff --git a/kingdee/bom.go b/kingdee/bom.go index 2a3003c..8426c84 100644 --- a/kingdee/bom.go +++ b/kingdee/bom.go @@ -6,24 +6,25 @@ ) type ICBom struct { - FInterID int `gorm:"column:FInterID" json:"FInterID"` // 鍐呯爜 - FBOMNumber string `gorm:"column:FBOMNumber" json:"FBOMNumber"` // BOM鍗曠紪鍙� - FUseStatus int `gorm:"column:FUseStatus" json:"FUseStatus"` // 浣跨敤鐘舵�佺爜 - FUseStatusName string `gorm:"column:FUseStatusName" json:"FUseStatusName"` // 浣跨敤鐘舵�� - 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"` // 鐗╂枡灞炴�� - FQty float64 `gorm:"column:FQty" json:"FQty"` // 鏁伴噺 - FUnitName string `gorm:"column:FUnitName" json:"FUnitName"` // 鍗曚綅 - FYield float64 `gorm:"column:FYield" json:"FYield"` // 鎴愬搧鐜� - FRoutingIDNumber string `gorm:"column:FRoutingIDNumber" json:"FRoutingIDNumber"` // 宸ヨ壓璺嚎浠g爜 - FRoutingIDName string `gorm:"column:FRoutingIDName" json:"FRoutingIDName"` // 宸ヨ壓璺嚎鍚嶇О - FNote string `gorm:"column:FNote" json:"FNote"` // 澶囨敞 - FBomType int `gorm:"column:FBomType" json:"FBomType"` // BOM绫诲瀷 - FAudDate string `gorm:"column:FAudDate" json:"FAudDate"` // 鏇存柊鏃堕棿 - FPDMImportDate string `gorm:"column:FPDMImportDate" json:"FPDMImportDate"` // 瀵煎叆鏃堕棿 - FStatus int `gorm:"column:FStatus" json:"FStatus"` // 鐘舵�� + FInterID int `gorm:"column:FInterID" json:"FInterID"` // 鍐呯爜 + FBOMNumber string `gorm:"column:FBOMNumber" json:"FBOMNumber"` // BOM鍗曠紪鍙� + FUseStatus int `gorm:"column:FUseStatus" json:"FUseStatus"` // 浣跨敤鐘舵�佺爜 + FUseStatusName string `gorm:"column:FUseStatusName" json:"FUseStatusName"` // 浣跨敤鐘舵�� + 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"` // 鐗╂枡灞炴�� + FQty float64 `gorm:"column:FQty" json:"FQty"` // 鏁伴噺 + FUnitName string `gorm:"column:FUnitName" json:"FUnitName"` // 鍗曚綅 + FYield float64 `gorm:"column:FYield" json:"FYield"` // 鎴愬搧鐜� + FRoutingIDNumber string `gorm:"column:FRoutingIDNumber" json:"FRoutingIDNumber"` // 宸ヨ壓璺嚎浠g爜 + FRoutingIDName string `gorm:"column:FRoutingIDName" json:"FRoutingIDName"` // 宸ヨ壓璺嚎鍚嶇О + FNote string `gorm:"column:FNote" json:"FNote"` // 澶囨敞 + FBomType int `gorm:"column:FBomType" json:"FBomType"` // BOM绫诲瀷 + FAudDate string `gorm:"column:FAudDate" json:"FAudDate"` // 鏇存柊鏃堕棿 + FPDMImportDate string `gorm:"column:FPDMImportDate" json:"FPDMImportDate"` // 瀵煎叆鏃堕棿 + FStatus int `gorm:"column:FStatus" json:"FStatus"` // 鐘舵�� + Component []ICBomChild `json:"Component"` // BOM缁勪欢 } func BomList(fData bool) []ICBom { diff --git a/report/send.go b/report/send.go index f495445..35a6311 100644 --- a/report/send.go +++ b/report/send.go @@ -2,6 +2,7 @@ import ( "encoding/json" + "io/ioutil" "time" "kingdee-dbapi/cache" @@ -143,27 +144,48 @@ // bom鏁版嵁鍒哹om鍜宐omChild涓や釜琛� func SendBom(fData bool) { + var bomList []kingdee.ICBom + var bomChildList []kingdee.ICBomChild + // 涓婃姤bom - bomList := kingdee.BomList(fData) + bomList = kingdee.BomList(fData) logger.Debug("鏌ヨ鍒�%d鏉OM鏁版嵁", len(bomList)) // 杩囨护鏁版嵁, 鍒ゆ柇鏄惁宸茬粡涓婃姤杩�, 璇锋眰鍏ㄩ噺鏁版嵁涓嶈繃婊�, 鐩存帴涓婃姤 if !fData { + var bomNumbers []string 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{}{} + bomNumbers = append(bomNumbers, bomList[i].FBOMNumber) i++ } } + if len(bomNumbers) > 0 { + bomChildList = kingdee.BomChild(bomNumbers) + } + } else { + bomChildList = kingdee.BomChild(nil) } // 鍒嗙粍涓婁紶bom鏁版嵁 if len(bomList) == 0 { logger.Debug("娌℃湁瑕佹洿鏂扮殑BOM鏁版嵁.") } else { + // 灏哹om缁勪欢鎸塨omId鏁寸悊 + var bomChildMap = make(map[int][]kingdee.ICBomChild, 0) + for idx, bomChild := range bomChildList { + bomChildMap[bomChild.FInterID] = append(bomChildMap[bomChild.FInterID], bomChildList[idx]) + } + + // 缁檅om娣诲姞缁勪欢 + for _, bom := range bomList { + bom.Component = bomChildMap[bom.FInterID] + } + // 姣忔鍙� 1000 鏉� successCnt := 0 for i := 0; i < len(bomList); i += 1000 { @@ -173,6 +195,8 @@ } b, _ := json.Marshal(bomList[i:end]) + + ioutil.WriteFile("bomList.tmp", b, 0644) ok := nsqclient.Produce(config.Options.BomTopic, b) if !ok { @@ -190,49 +214,48 @@ logger.Debug("宸蹭笂鎶�%d鏉OM鏁版嵁", successCnt) } - - // 涓婃姤bom瀛愰」 - var bomChildList []kingdee.ICBomChild - - // 濡傛灉璇锋眰鍏ㄩ噺鏁版嵁, 鐩存帴鏌ヨ鎵�鏈夌殑鏁版嵁骞跺彂閫�. 澧為噺涓婃姤, 鍏堝垽鏂璪om鏄惁鏈夋洿鏂�,鐒跺悗鎸塨om缂栫爜鏌ヨ瀛愰」 - if fData { - bomChildList = kingdee.BomChild(nil) - } else { - if len(bomList) <= 0 { - return - } - - var bomIds []string - for _, v := range bomList { - bomIds = append(bomIds, v.FBOMNumber) - } - - bomChildList = kingdee.BomChild(bomIds) - } - - logger.Debug("鏌ヨ鍒�%d鏉OM瀛愰」鏁版嵁", len(bomList)) - - if len(bomChildList) == 0 { - logger.Debug("娌℃湁瑕佹洿鏂扮殑BOM瀛愰」鏁版嵁.") - return - } - - // 姣忔鍙� 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) + // + //// 涓婃姤bom瀛愰」 + // + //// 濡傛灉璇锋眰鍏ㄩ噺鏁版嵁, 鐩存帴鏌ヨ鎵�鏈夌殑鏁版嵁骞跺彂閫�. 澧為噺涓婃姤, 鍏堝垽鏂璪om鏄惁鏈夋洿鏂�,鐒跺悗鎸塨om缂栫爜鏌ヨ瀛愰」 + //if fData { + // bomChildList = kingdee.BomChild(nil) + //} else { + // if len(bomList) <= 0 { + // return + // } + // + // var bomIds []string + // for _, v := range bomList { + // bomIds = append(bomIds, v.FBOMNumber) + // } + // + // bomChildList = kingdee.BomChild(bomIds) + //} + // + //logger.Debug("鏌ヨ鍒�%d鏉OM瀛愰」鏁版嵁", len(bomList)) + // + //if len(bomChildList) == 0 { + // logger.Debug("娌℃湁瑕佹洿鏂扮殑BOM瀛愰」鏁版嵁.") + // return + //} + // + //// 姣忔鍙� 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