zhangzengfei
2023-08-15 1a6fa89e9ffc8ade73afbeda3e6c791bad1d4cd9
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数据分bom和bomChild两个表
func SendBom(fData bool) {
   // 上报bom
   bomList := kingdee.BomList(fData)
   logger.Debug("查询到%d条Bom数据", 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
   // 如果请求全量数据, 直接查询所有的数据并发送. 增量上报, 先判断bom是否有更新,然后按bom编码查询子项
   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条BOM子项数据", successCnt)
   }
}