fix: file export to reset data

This commit is contained in:
simonzhangsz
2025-04-10 10:37:40 +08:00
parent 6329d638a4
commit a1eaaaebd7

View File

@@ -10,10 +10,10 @@ import (
// "path/filepath" // "path/filepath"
"time" "time"
ueService "be.ems/features/ue/service"
"be.ems/lib/dborm" "be.ems/lib/dborm"
"be.ems/lib/log" "be.ems/lib/log"
"be.ems/src/framework/cron" "be.ems/src/framework/cron"
ueService "be.ems/features/ue/service"
neService "be.ems/src/modules/network_data/service" neService "be.ems/src/modules/network_data/service"
) )
@@ -102,20 +102,25 @@ func (s *BarProcessor) exportUEData(param BarParams) (map[string]any, error) {
var fps []string var fps []string
var affectedArr []int64 var affectedArr []int64
for _, neID := range neIDs { for _, neID := range neIDs {
log.Trace("ne_id:", neID)
// 1. 加载最新数据, 如果数据服务存在,则重新加载数据 // 1. 加载最新数据, 如果数据服务存在,则重新加载数据
dataService, err := GetService(param.ServiceName) result := ResetDataWithResult(param.ServiceName, neID)
if err != nil { log.Trace("reset data count=", result.Count)
log.Warn("failed to get data service:", err) // 后续可以等待异步操作返回结果
} else if dataService != nil { if err := <-result.Err; err != nil {
// 重新加载数据 log.Error("failed to reset data: ", err)
data := dataService.ResetData(neID)
if data == 0 {
log.Error("failed to load data:", err)
return nil, err
}
log.Trace("load data:", data)
} }
// dataService, err := GetService(param.ServiceName)
// if err != nil {
// log.Warn("failed to get data service:", err)
// } else if dataService != nil {
// // 重新加载数据
// data := dataService.ResetData(neID)
// if data == 0 {
// log.Error("failed to load data:", err)
// return nil, err
// }
// log.Trace("load data:", data)
// }
// 2. 构造查询语句 // 2. 构造查询语句
var query string var query string
@@ -226,13 +231,40 @@ func (s *BarProcessor) exportData(query, filePath string, fileType string) (int6
return affected, nil return affected, nil
} }
type ResetDataResult struct {
Count int64 // 同步返回的数据长度
Err <-chan error // 异步返回 ClearAndInsert 的执行结果
}
// ResetDataWithResult 重置鉴权用户数据清空数据库重新同步Redis数据
// 立即返回数据量,同时通过 channel 返回 ClearAndInsert 的执行结果
func ResetDataWithResult(serivceName, neID string) ResetDataResult {
dataService, err := GetService(serivceName)
if err != nil {
log.Warn("failed to get data service:", err)
}
authArr := dataService.dataByRedis("*", neID)
resultCh := make(chan error, 1)
go func() {
resultCh <- dataService.ClearAndInsert(neID, authArr)
}()
return ResetDataResult{
Count: int64(len(authArr)),
Err: resultCh,
}
}
// ResettableService 接口定义 // ResettableService 接口定义
type ResettableService interface { type ResettableService interface {
ResetData(neID string) int64 dataByRedis(key, neID string) []map[string]string // 从Redis获取数据
ClearAndInsert(neID string, authArr []map[string]string) error // 清空数据库并插入数据
//ResetData(neID string) int64
} }
// 服务注册表 // 服务注册表
var serviceRegistry = make(map[string]ResettableService) var serviceRegistry = make(map[string]ResettableService)
func RegisterService(name string, service ResettableService) { func RegisterService(name string, service ResettableService) {
serviceRegistry[name] = service serviceRegistry[name] = service
} }