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