package report
|
|
import (
|
"encoding/json"
|
"io/ioutil"
|
"kingdee-dbapi/logger"
|
|
"kingdee-dbapi/cache"
|
"kingdee-dbapi/config"
|
"kingdee-dbapi/kingdee"
|
"kingdee-dbapi/models"
|
"kingdee-dbapi/nsqclient"
|
)
|
|
const orderLocalStore = "order.tmp"
|
const inventoryLocalStore = "inventory.tmp"
|
|
func SendOrder() {
|
var list []kingdee.SEOrder
|
|
if config.Options.Debug {
|
data, err := ioutil.ReadFile(orderLocalStore)
|
if err != nil {
|
logger.Error("文件读取失败, %s", err.Error())
|
return
|
}
|
err = json.Unmarshal(data, &list)
|
if err != nil {
|
logger.Error("文件内容解析失败, %s", err.Error())
|
return
|
}
|
} else {
|
list = kingdee.SeOrderList()
|
logger.Debug("查询到%d条订单信息", len(list))
|
}
|
|
var completedOrderNo = make(map[string]struct{})
|
|
for i := 0; i < len(list); {
|
if cache.Exists(list[i].FBillNo) {
|
list = append(list[:i], list[i+1:]...)
|
} else {
|
completedOrderNo[list[i].FBillNo] = struct{}{}
|
i++
|
}
|
}
|
|
b, _ := json.Marshal(list)
|
|
if !config.Options.Debug {
|
ioutil.WriteFile(orderLocalStore, b, 0644)
|
}
|
|
// http协议上报, 已修改为TCP
|
//ok := nsqclient.HttpPost(config.Options.OrderTopic, b)
|
|
if len(list) == 0 {
|
logger.Debug("没有新的订单需要上报")
|
return
|
}
|
|
// TCP协议上报
|
ok := nsqclient.Produce(config.Options.OrderTopic, b)
|
if ok {
|
// 写入数据库, 标记已经上报过了,避免重复上报
|
for orderNo, _ := range completedOrderNo {
|
cursor := models.Order{
|
OrderNo: orderNo,
|
}
|
|
cursor.Insert()
|
cache.WriteCache(orderNo)
|
}
|
|
logger.Debug("已上报%d个订单信息", len(list))
|
} else {
|
logger.Warn("订单数据上报失败")
|
}
|
}
|
|
func SendInventory() {
|
var list []kingdee.Inventory
|
|
if config.Options.Debug {
|
data, err := ioutil.ReadFile(inventoryLocalStore)
|
if err != nil {
|
logger.Error("文件读取失败, %s", err.Error())
|
return
|
}
|
|
err = json.Unmarshal(data, &list)
|
if err != nil {
|
logger.Error("文件内容解析失败, %s", err.Error())
|
return
|
}
|
} else {
|
list = kingdee.ICInventory()
|
logger.Debug("查询到%d条库存数据", len(list))
|
}
|
|
// 每次发 100 条
|
successCnt := 0
|
for i := 0; i < len(list); i += 1000 {
|
end := i + 1000
|
if end > len(list) {
|
end = len(list)
|
}
|
|
b, _ := json.Marshal(list[i:end])
|
|
if !config.Options.Debug {
|
ioutil.WriteFile(inventoryLocalStore, b, 0644)
|
}
|
|
// HTTP协议上报,已修改为TCP
|
//nsqclient.HttpPost(config.Options.InventoryTopic, b)
|
|
// TCP协议上报
|
ok := nsqclient.Produce(config.Options.InventoryTopic, b)
|
if !ok {
|
logger.Warn("库存数据上报失败")
|
} else {
|
successCnt = end
|
}
|
}
|
logger.Debug("已上报%d条库存数据", successCnt)
|
}
|