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