| | |
| | | |
| | | import ( |
| | | "encoding/json" |
| | | "io/ioutil" |
| | | "time" |
| | | |
| | | "kingdee-dbapi/cache" |
| | |
| | | |
| | | // 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 { |
| | | // 将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 _, bom := range bomList { |
| | | bom.Component = bomChildMap[bom.FInterID] |
| | | } |
| | | |
| | | // 每次发 1000 条 |
| | | successCnt := 0 |
| | | for i := 0; i < len(bomList); i += 1000 { |
| | |
| | | } |
| | | |
| | | b, _ := json.Marshal(bomList[i:end]) |
| | | |
| | | ioutil.WriteFile("bomList.tmp", b, 0644) |
| | | |
| | | ok := nsqclient.Produce(config.Options.BomTopic, b) |
| | | if !ok { |
| | |
| | | |
| | | 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) |
| | | // |
| | | //// 上报bom子项 |
| | | // |
| | | //// 如果请求全量数据, 直接查询所有的数据并发送. 增量上报, 先判断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) |
| | | } |