feat: 定时导出文件路径统一前缀,导出无分页检查

This commit is contained in:
TsMask
2025-09-18 11:10:24 +08:00
parent 023dc114e0
commit 11e884174c
6 changed files with 99 additions and 97 deletions

View File

@@ -31,6 +31,13 @@ type Oauth2ClientController struct {
// GET /list
func (s Oauth2ClientController) List(c *gin.Context) {
query := reqctx.QueryMap(c)
// 分页检查
pageNum := parse.Number(query["pageNum"])
pageSize := parse.Number(query["pageSize"])
if pageNum == 0 || pageSize == 0 {
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: pageNum or pageSize not is empty"))
return
}
rows, total := s.oauth2ClientService.FindByPage(query)
c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total}))
}

View File

@@ -61,26 +61,49 @@ func (s *BackupExportCDRProcessor) Execute(data any) (any, error) {
}
for _, v := range params.DataType {
// 前 hour 小时
now := time.Now()
end := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location())
start := end.Add(-time.Duration(params.Hour) * time.Hour)
query := map[string]string{
"neType": "",
"neId": "",
"rmUID": "",
"beginTime": fmt.Sprint(start.UnixMilli()),
"endTime": fmt.Sprint(end.UnixMilli()),
}
switch v {
case "ims":
neList := s.neInfoService.Find(neModel.NeInfo{NeType: "IMS"}, false, false)
for _, ne := range neList {
result[ne.NeName] = s.exportIMS(params.Hour, ne.RmUID, params.FileType)
query["neType"] = "IMS"
query["neId"] = ne.NeId
query["rmUID"] = ne.RmUID
result[ne.NeName] = s.exportIMS(query, params.FileType)
}
case "smsc":
neList := s.neInfoService.Find(neModel.NeInfo{NeType: "SMSC"}, false, false)
for _, ne := range neList {
result[ne.NeName] = s.exportSMSC(params.Hour, ne.RmUID, params.FileType)
query["neType"] = "SMSC"
query["neId"] = ne.NeId
query["rmUID"] = ne.RmUID
result[ne.NeName] = s.exportSMSC(query, params.FileType)
}
case "smf":
neList := s.neInfoService.Find(neModel.NeInfo{NeType: "SMF"}, false, false)
for _, ne := range neList {
result[ne.NeName] = s.exportSMF(params.Hour, ne.RmUID, params.FileType)
query["neType"] = "SMF"
query["neId"] = ne.NeId
query["rmUID"] = ne.RmUID
result[ne.NeName] = s.exportSMF(query, params.FileType)
}
case "sgwc":
neList := s.neInfoService.Find(neModel.NeInfo{NeType: "SGWC"}, false, false)
for _, ne := range neList {
result[ne.NeName] = s.exportSGWC(params.Hour, ne.RmUID, params.FileType)
query["neType"] = "SGWC"
query["neId"] = ne.NeId
query["rmUID"] = ne.RmUID
result[ne.NeName] = s.exportSGWC(query, params.FileType)
}
}
}
@@ -90,30 +113,21 @@ func (s *BackupExportCDRProcessor) Execute(data any) (any, error) {
}
// exportIMS 导出IMS-CDR会话事件数据
func (s BackupExportCDRProcessor) exportIMS(hour int, rmUID, fileType string) string {
// 前 hour 小时
now := time.Now()
end := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location())
start := end.Add(-time.Duration(hour) * time.Hour)
func (s BackupExportCDRProcessor) exportIMS(query map[string]string, fileType string) string {
language := "en"
query := map[string]string{
"sortField": "timestamp",
"sortOrder": "asc",
"rmUID": rmUID,
"beginTime": fmt.Sprint(start.UnixMilli()),
"endTime": fmt.Sprint(end.UnixMilli()),
"pageNum": fmt.Sprint(1),
"pageSize": fmt.Sprint(30000),
}
rows, total := s.cdrEventService.FindByPage("IMS", query)
neType := query["neType"]
neTypeLower := strings.ToLower(neType)
neId := query["neId"]
endTime := parse.Number(query["endTime"])
rows, total := s.cdrEventService.FindByPage(neType, query)
if total == 0 {
return "no data"
}
// 导出文件名称
fileName := fmt.Sprintf("ims_cdr_event_export_%d_%s.%s", len(rows), date.ParseDateToStr(end, date.YYYYMMDDHHMMSS), fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, "/cdr/ims_cdr_event", fileName)
dateStr := date.ParseDateToStr(endTime, date.YYYYMMDDHHMMSS)
fileName := fmt.Sprintf("%s_%s_cdr_export_%d_%s.%s", neTypeLower, neId, len(rows), dateStr, fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, fmt.Sprintf("/cdr/%s", neTypeLower), fileName)
if runtime.GOOS == "windows" {
filePath = fmt.Sprintf("C:%s", filePath)
}
@@ -379,30 +393,21 @@ func (s BackupExportCDRProcessor) exportIMS(hour int, rmUID, fileType string) st
}
// exportSMSC 导出SMSC-CDR会话事件数据
func (s BackupExportCDRProcessor) exportSMSC(hour int, rmUID, fileType string) string {
// 前 hour 小时
now := time.Now()
end := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location())
start := end.Add(-time.Duration(hour) * time.Hour)
func (s BackupExportCDRProcessor) exportSMSC(query map[string]string, fileType string) string {
language := "en"
query := map[string]string{
"sortField": "timestamp",
"sortOrder": "asc",
"rmUID": rmUID,
"beginTime": fmt.Sprint(start.UnixMilli()),
"endTime": fmt.Sprint(end.UnixMilli()),
"pageNum": fmt.Sprint(1),
"pageSize": fmt.Sprint(30000),
}
rows, total := s.cdrEventService.FindByPage("SMSC", query)
neType := query["neType"]
neTypeLower := strings.ToLower(neType)
neId := query["neId"]
endTime := parse.Number(query["endTime"])
rows, total := s.cdrEventService.FindByPage(neType, query)
if total == 0 {
return "no data"
}
// 导出文件名称
fileName := fmt.Sprintf("smsc_cdr_event_export_%d_%s.%s", len(rows), date.ParseDateToStr(end, date.YYYYMMDDHHMMSS), fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, "/cdr/smsc_cdr_event", fileName)
dateStr := date.ParseDateToStr(endTime, date.YYYYMMDDHHMMSS)
fileName := fmt.Sprintf("%s_%s_cdr_export_%d_%s.%s", neTypeLower, neId, len(rows), dateStr, fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, fmt.Sprintf("/cdr/%s", neTypeLower), fileName)
if runtime.GOOS == "windows" {
filePath = fmt.Sprintf("C:%s", filePath)
}
@@ -596,29 +601,20 @@ func (s BackupExportCDRProcessor) exportSMSC(hour int, rmUID, fileType string) s
}
// exportSMF 导出SMF-CDR会话事件数据
func (s BackupExportCDRProcessor) exportSMF(hour int, rmUID, fileType string) string {
// 前 hour 小时
now := time.Now()
end := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location())
start := end.Add(-time.Duration(hour) * time.Hour)
query := map[string]string{
"sortField": "timestamp",
"sortOrder": "asc",
"rmUID": rmUID,
"beginTime": fmt.Sprint(start.UnixMilli()),
"endTime": fmt.Sprint(end.UnixMilli()),
"pageNum": fmt.Sprint(1),
"pageSize": fmt.Sprint(30000),
}
rows, total := s.cdrEventService.FindByPage("SMF", query)
func (s BackupExportCDRProcessor) exportSMF(query map[string]string, fileType string) string {
neType := query["neType"]
neTypeLower := strings.ToLower(neType)
neId := query["neId"]
endTime := parse.Number(query["endTime"])
rows, total := s.cdrEventService.FindByPage(neType, query)
if total == 0 {
return "no data"
}
// 导出文件名称
fileName := fmt.Sprintf("smf_cdr_event_export_%d_%s.%s", len(rows), date.ParseDateToStr(end, date.YYYYMMDDHHMMSS), fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, "/cdr/smf_cdr_event", fileName)
dateStr := date.ParseDateToStr(endTime, date.YYYYMMDDHHMMSS)
fileName := fmt.Sprintf("%s_%s_cdr_export_%d_%s.%s", neTypeLower, neId, len(rows), dateStr, fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, fmt.Sprintf("/cdr/%s", neTypeLower), fileName)
if runtime.GOOS == "windows" {
filePath = fmt.Sprintf("C:%s", filePath)
}
@@ -1004,29 +1000,20 @@ func (s BackupExportCDRProcessor) exportSMF(hour int, rmUID, fileType string) st
}
// exportSGWC 导出SGWC-CDR会话事件数据
func (s BackupExportCDRProcessor) exportSGWC(hour int, rmUID, fileType string) string {
// 前 hour 小时
now := time.Now()
end := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location())
start := end.Add(-time.Duration(hour) * time.Hour)
query := map[string]string{
"sortField": "timestamp",
"sortOrder": "asc",
"rmUID": rmUID,
"beginTime": fmt.Sprint(start.UnixMilli()),
"endTime": fmt.Sprint(end.UnixMilli()),
"pageNum": fmt.Sprint(1),
"pageSize": fmt.Sprint(30000),
}
rows, total := s.cdrEventService.FindByPage("SGWC", query)
func (s BackupExportCDRProcessor) exportSGWC(query map[string]string, fileType string) string {
neType := query["neType"]
neTypeLower := strings.ToLower(neType)
neId := query["neId"]
endTime := parse.Number(query["endTime"])
rows, total := s.cdrEventService.FindByPage(neType, query)
if total == 0 {
return "no data"
}
// 导出文件名称
fileName := fmt.Sprintf("sgwc_cdr_event_export_%d_%s.%s", len(rows), date.ParseDateToStr(end, date.YYYYMMDDHHMMSS), fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, "/cdr/sgwc_cdr_event", fileName)
dateStr := date.ParseDateToStr(endTime, date.YYYYMMDDHHMMSS)
fileName := fmt.Sprintf("%s_%s_cdr_export_%d_%s.%s", neTypeLower, neId, len(rows), dateStr, fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, fmt.Sprintf("/cdr/%s", neTypeLower), fileName)
if runtime.GOOS == "windows" {
filePath = fmt.Sprintf("C:%s", filePath)
}

View File

@@ -118,7 +118,7 @@ func (s *BackupExportKPIProcessor) exportKPI(query neDataModel.KPIQuery, fileTyp
// 导出文件名称
dateStr := date.ParseDateToStr(parse.Number(query.EndTime), date.YYYYMMDDHHMMSS)
fileName := fmt.Sprintf("%s_%s_kpi_export_%d_%s.%s", strings.ToLower(query.NeType), query.NeID, len(rows), dateStr, fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, fmt.Sprintf("/%s_kpi", strings.ToLower(query.NeType)), fileName)
filePath := filepath.Join(s.backupService.BACKUP_DIR, fmt.Sprintf("/kpi/%s", strings.ToLower(query.NeType)), fileName)
if runtime.GOOS == "windows" {
filePath = fmt.Sprintf("C:%s", filePath)
}
@@ -275,7 +275,7 @@ func (s *BackupExportKPIProcessor) exportKPIC(query neDataModel.KPICQuery, fileT
// 导出文件名称
dateStr := date.ParseDateToStr(parse.Number(query.EndTime), date.YYYYMMDDHHMMSS)
fileName := fmt.Sprintf("%s_%s_kpic_export_%d_%s.%s", strings.ToLower(query.NeType), query.NeID, len(rows), dateStr, fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, fmt.Sprintf("/%s_kpi", strings.ToLower(query.NeType)), fileName)
filePath := filepath.Join(s.backupService.BACKUP_DIR, fmt.Sprintf("/kpi/%s", strings.ToLower(query.NeType)), fileName)
if runtime.GOOS == "windows" {
filePath = fmt.Sprintf("C:%s", filePath)
}

View File

@@ -79,8 +79,6 @@ func (s BackupExportLogProcessor) exportOperate(hour int, fileType string) strin
query := map[string]string{
"beginTime": fmt.Sprint(start.UnixMilli()),
"endTime": fmt.Sprint(end.UnixMilli()),
"pageNum": "1",
"pageSize": "30000",
}
rows, total := s.sysOperateService.FindByPage(query, "")
if total == 0 {
@@ -97,7 +95,8 @@ func (s BackupExportLogProcessor) exportOperate(hour int, fileType string) strin
converI18n(language, &rows)
// 导出文件名称
fileName := fmt.Sprintf("sys_log_operate_export_%d_%s.%s", len(rows), date.ParseDateToStr(end, date.YYYYMMDDHHMMSS), fileType)
dateStr := date.ParseDateToStr(end.UnixMilli(), date.YYYYMMDDHHMMSS)
fileName := fmt.Sprintf("sys_log_operate_export_%d_%s.%s", len(rows), dateStr, fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, "/log/sys_log_operate", fileName)
if runtime.GOOS == "windows" {
filePath = fmt.Sprintf("C:%s", filePath)
@@ -243,8 +242,6 @@ func (s BackupExportLogProcessor) exportLogin(hour int, fileType string) string
query := map[string]string{
"beginTime": fmt.Sprint(start.UnixMilli()),
"endTime": fmt.Sprint(end.UnixMilli()),
"pageNum": "1",
"pageSize": "30000",
}
rows, total := s.sysLogLoginService.FindByPage(query, "")
if total == 0 {
@@ -263,7 +260,8 @@ func (s BackupExportLogProcessor) exportLogin(hour int, fileType string) string
converI18n(language, &rows)
// 导出文件名称
fileName := fmt.Sprintf("sys_log_login_export_%d_%s.%s", len(rows), date.ParseDateToStr(end, date.YYYYMMDDHHMMSS), fileType)
dateStr := date.ParseDateToStr(end.UnixMilli(), date.YYYYMMDDHHMMSS)
fileName := fmt.Sprintf("sys_log_login_export_%d_%s.%s", len(rows), dateStr, fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, "/log/sys_log_login", fileName)
if runtime.GOOS == "windows" {
filePath = fmt.Sprintf("C:%s", filePath)

View File

@@ -85,9 +85,10 @@ func (s BackupExportUDMProcessor) exportAuth(neId, fileType string) string {
return "no data"
}
// 文件名
fileName := fmt.Sprintf("auth_%s_export_%s.%s", neId, time.Now().Format("20060102150405"), fileType)
filePath := filepath.Join("/usr/local/omc/backup/udm_data/auth", fileName)
// 导出文件名
dateStr := time.Now().Format("20060102150405")
fileName := fmt.Sprintf("auth_%s_export_%d_%s.%s", neId, len(rows), dateStr, fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, "/udm/auth", fileName)
if runtime.GOOS == "windows" {
filePath = fmt.Sprintf("C:%s", filePath)
}
@@ -139,9 +140,10 @@ func (s BackupExportUDMProcessor) exportSub(neId, fileType string) string {
return "no data"
}
// 文件名
fileName := fmt.Sprintf("sub_%s_export_%s.%s", neId, time.Now().Format("20060102150405"), fileType)
filePath := filepath.Join("/usr/local/omc/backup/udm_data/sub", fileName)
// 导出文件名
dateStr := time.Now().Format("20060102150405")
fileName := fmt.Sprintf("sub_%s_export_%d_%s.%s", neId, len(rows), dateStr, fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, "/udm/sub", fileName)
if runtime.GOOS == "windows" {
filePath = fmt.Sprintf("C:%s", filePath)
}
@@ -187,9 +189,10 @@ func (s BackupExportUDMProcessor) exportVOIP(neId, fileType string) string {
return "no data"
}
// 文件名
fileName := fmt.Sprintf("voip_%s_export_%s.%s", neId, time.Now().Format("20060102150405"), fileType)
filePath := filepath.Join("/usr/local/omc/backup/udm_data/voip", fileName)
// 导出文件名
dateStr := time.Now().Format("20060102150405")
fileName := fmt.Sprintf("voip_%s_export_%d_%s.%s", neId, len(rows), dateStr, fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, "/udm/voip", fileName)
if runtime.GOOS == "windows" {
filePath = fmt.Sprintf("C:%s", filePath)
}
@@ -233,9 +236,10 @@ func (s BackupExportUDMProcessor) exportVolte(neId, fileType string) string {
return "no data"
}
// 文件名
fileName := fmt.Sprintf("volte_%s_export_%s.%s", neId, time.Now().Format("20060102150405"), fileType)
filePath := filepath.Join("/usr/local/omc/backup/udm_data/volte", fileName)
// 导出文件名
dateStr := time.Now().Format("20060102150405")
fileName := fmt.Sprintf("volte_%s_export_%d_%s.%s", neId, len(rows), dateStr, fileType)
filePath := filepath.Join(s.backupService.BACKUP_DIR, "/udm/volte", fileName)
if runtime.GOOS == "windows" {
filePath = fmt.Sprintf("C:%s", filePath)
}

View File

@@ -6,6 +6,7 @@ import (
"be.ems/src/framework/logger"
"be.ems/src/framework/resp"
"be.ems/src/framework/utils/parse"
neDataService "be.ems/src/modules/network_data/service"
neInfoService "be.ems/src/modules/network_element/service"
)
@@ -21,7 +22,12 @@ func GetCDRConnect(requestID string, data any) ([]byte, error) {
for k, v := range dataMap {
query[k] = fmt.Sprintf("%v", v)
}
// 分页检查
pageNum := parse.Number(query["pageNum"])
pageSize := parse.Number(query["pageSize"])
if pageNum == 0 || pageSize == 0 {
return nil, fmt.Errorf("pageNum or pageSize not is empty")
}
// 查询网元信息 rmUID
neInfo := neInfoService.NewNeInfo.FindByNeTypeAndNeID(query["neType"], query["neId"])
if neInfo.NeType == "" {