zhangzengfei
2023-08-17 d9bc2c9e991b2fe925565dfd7d0ec667b64bb52f
report/send.go
@@ -143,31 +143,52 @@
// bom数据分bom和bomChild两个表
func SendBom(fData bool) {
   var bomList []kingdee.ICBom
   var bomChildList []kingdee.ICBomChild
   // 上报bom
   bomList := kingdee.BomList(fData)
   bomList = kingdee.BomList(fData)
   logger.Debug("查询到%d条BOM数据", 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 {
      // 每次发 1000 条
      // 将bom组件按bomId整理
      var bomChildMap = make(map[int][]kingdee.ICBomChild, 0)
      for idx, bomChild := range bomChildList {
         bomChildMap[bomChild.FInterID] = append(bomChildMap[bomChild.FInterID], bomChildList[idx])
      }
      // 给bom添加组件
      for idx, bom := range bomList {
         bomList[idx].Component = bomChildMap[bom.FInterID]
      }
      // 每次发 200 条
      successCnt := 0
      for i := 0; i < len(bomList); i += 1000 {
         end := i + 1000
      for i := 0; i < len(bomList); i += 200 {
         end := i + 200
         if end > len(bomList) {
            end = len(bomList)
         }
@@ -190,49 +211,4 @@
      logger.Debug("已上报%d条BOM数据", successCnt)
   }
   // 上报bom子项
   var bomChildList []kingdee.ICBomChild
   // 如果请求全量数据, 直接查询所有的数据并发送. 增量上报, 先判断bom是否有更新,然后按bom编码查询子项
   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条BOM子项数据", 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条BOM子项数据", successCnt)
}