From e2d124a5e6eeee90d568a8e078561ac319240994 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 5 Mar 2024 16:11:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=20=E7=BD=91=E5=85=83=E6=95=B0=E6=8D=AE?= =?UTF-8?q?CDR=E5=92=8CUE=E4=BA=8B=E4=BB=B6=E6=8E=A5=E5=8F=A3=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=9F=A5=E8=AF=A2=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_data/controller/amf.go | 33 ++++++++++++++- src/modules/network_data/controller/ims.go | 33 ++++++++++++++- src/modules/network_data/model/cdr_event.go | 8 ++-- src/modules/network_data/model/ue_event.go | 7 ++-- src/modules/network_data/network_data.go | 24 ++++++++--- .../network_data/repository/cdr_event.go | 6 +++ .../network_data/repository/cdr_event.impl.go | 41 +++++++++++++++++-- .../network_data/repository/ue_event.go | 6 +++ .../network_data/repository/ue_event.impl.go | 37 ++++++++++++++++- src/modules/network_data/service/cdr_event.go | 3 ++ .../network_data/service/cdr_event.impl.go | 18 ++++++++ src/modules/network_data/service/ue_event.go | 3 ++ .../network_data/service/ue_event.impl.go | 18 ++++++++ 13 files changed, 217 insertions(+), 20 deletions(-) diff --git a/src/modules/network_data/controller/amf.go b/src/modules/network_data/controller/amf.go index 1c92fb44..7940138d 100644 --- a/src/modules/network_data/controller/amf.go +++ b/src/modules/network_data/controller/amf.go @@ -1,8 +1,11 @@ package controller import ( + "strings" + "ems.agt/src/framework/i18n" "ems.agt/src/framework/utils/ctx" + "ems.agt/src/framework/utils/parse" "ems.agt/src/framework/vo/result" "ems.agt/src/modules/network_data/model" neDataService "ems.agt/src/modules/network_data/service" @@ -28,8 +31,8 @@ type AMFController struct { // UE会话列表 // -// GET /ues -func (s *AMFController) UEs(c *gin.Context) { +// GET /ue/list +func (s *AMFController) UEList(c *gin.Context) { language := ctx.AcceptLanguage(c) var querys model.UEEventQuery if err := c.ShouldBindQuery(&querys); err != nil { @@ -49,3 +52,29 @@ func (s *AMFController) UEs(c *gin.Context) { data := s.ueEventService.SelectPage(querys) c.JSON(200, result.Ok(data)) } + +// UE会话删除 +// +// DELETE /ue/:ueIds +func (s *AMFController) UERemove(c *gin.Context) { + language := ctx.AcceptLanguage(c) + ueIds := c.Param("ueIds") + if ueIds == "" { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + // 处理字符转id数组后去重 + ids := strings.Split(ueIds, ",") + uniqueIDs := parse.RemoveDuplicates(ids) + if len(uniqueIDs) <= 0 { + c.JSON(200, result.Err(nil)) + return + } + rows, err := s.ueEventService.DeleteByIds(uniqueIDs) + if err != nil { + c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) + c.JSON(200, result.OkMsg(msg)) +} diff --git a/src/modules/network_data/controller/ims.go b/src/modules/network_data/controller/ims.go index dfd49885..fc4a6a85 100644 --- a/src/modules/network_data/controller/ims.go +++ b/src/modules/network_data/controller/ims.go @@ -1,8 +1,11 @@ package controller import ( + "strings" + "ems.agt/src/framework/i18n" "ems.agt/src/framework/utils/ctx" + "ems.agt/src/framework/utils/parse" "ems.agt/src/framework/vo/result" "ems.agt/src/modules/network_data/model" neDataService "ems.agt/src/modules/network_data/service" @@ -28,8 +31,8 @@ type IMSController struct { // CDR会话列表 // -// GET /cdrs -func (s *IMSController) CDRs(c *gin.Context) { +// GET /cdr/list +func (s *IMSController) CDRList(c *gin.Context) { language := ctx.AcceptLanguage(c) var querys model.CDREventQuery if err := c.ShouldBindQuery(&querys); err != nil { @@ -49,3 +52,29 @@ func (s *IMSController) CDRs(c *gin.Context) { data := s.cdrEventService.SelectPage(querys) c.JSON(200, result.Ok(data)) } + +// CDR会话删除 +// +// DELETE /cdr/:cdrIds +func (s *IMSController) CDRRemove(c *gin.Context) { + language := ctx.AcceptLanguage(c) + cdrIds := c.Param("cdrIds") + if cdrIds == "" { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + // 处理字符转id数组后去重 + ids := strings.Split(cdrIds, ",") + uniqueIDs := parse.RemoveDuplicates(ids) + if len(uniqueIDs) <= 0 { + c.JSON(200, result.Err(nil)) + return + } + rows, err := s.cdrEventService.DeleteByIds(uniqueIDs) + if err != nil { + c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) + c.JSON(200, result.OkMsg(msg)) +} diff --git a/src/modules/network_data/model/cdr_event.go b/src/modules/network_data/model/cdr_event.go index 96896c26..a4721d34 100644 --- a/src/modules/network_data/model/cdr_event.go +++ b/src/modules/network_data/model/cdr_event.go @@ -15,14 +15,14 @@ type CDREvent struct { // CDREventQuery CDR会话对象查询参数结构体 type CDREventQuery struct { - NeType string `json:"neType" form:"neType" binding:"required"` + NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型, 暂时支持IMS NeID string `json:"neId" form:"neId" binding:"required"` RmUID string `json:"rmUID" form:"rmUID"` - RecordType string `json:"recordType" form:"recordType"` + RecordType string `json:"recordType" form:"recordType"` // 记录行为 MOC MTC MOSM MTSM StartTime string `json:"startTime" form:"startTime"` EndTime string `json:"endTime" form:"endTime"` - SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` - SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` + SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段 + SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"` PageSize int64 `json:"pageSize" form:"pageSize" binding:"required"` } diff --git a/src/modules/network_data/model/ue_event.go b/src/modules/network_data/model/ue_event.go index eed904f5..d39dd637 100644 --- a/src/modules/network_data/model/ue_event.go +++ b/src/modules/network_data/model/ue_event.go @@ -16,13 +16,14 @@ type UEEvent struct { // UEEventQuery UE会话对象查询参数结构体 type UEEventQuery struct { - NeType string `json:"neType" form:"neType" binding:"required"` + NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型, 暂时支持AMF NeID string `json:"neId" form:"neId" binding:"required"` RmUID string `json:"rmUID" form:"rmUID"` + EventType string `json:"eventType" form:"eventType"` // 事件类型 auth-result detach cm-state StartTime string `json:"startTime" form:"startTime"` EndTime string `json:"endTime" form:"endTime"` - SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` - SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` + SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段 + SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"` PageSize int64 `json:"pageSize" form:"pageSize" binding:"required"` } diff --git a/src/modules/network_data/network_data.go b/src/modules/network_data/network_data.go index 41f83b0d..60822419 100644 --- a/src/modules/network_data/network_data.go +++ b/src/modules/network_data/network_data.go @@ -3,6 +3,7 @@ package networkdata import ( "ems.agt/src/framework/logger" "ems.agt/src/framework/middleware" + "ems.agt/src/framework/middleware/collectlogs" "ems.agt/src/modules/network_data/controller" "github.com/gin-gonic/gin" @@ -30,19 +31,32 @@ func Setup(router *gin.Engine) { // 网元IMS imsGroup := neDataGroup.Group("/ims") { - // CDR会话事件信息 - imsGroup.GET("/cdrs", + // CDR会话事件列表 + imsGroup.GET("/cdr/list", middleware.PreAuthorize(nil), - controller.NewIMSController.CDRs, + controller.NewIMSController.CDRList, + ) + // CDR会话删除 + imsGroup.DELETE("/cdr/:cdrIds", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.imsCDR", collectlogs.BUSINESS_TYPE_DELETE)), + controller.NewIMSController.CDRRemove, ) } // 网元AMF amfGroup := neDataGroup.Group("/amf") { - amfGroup.GET("/ues", + // UE会话事件 + amfGroup.GET("/ue/list", middleware.PreAuthorize(nil), - controller.NewAMFController.UEs, + controller.NewAMFController.UEList, + ) + // UE会话删除 + amfGroup.DELETE("/ue/:ueIds", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.amfUE", collectlogs.BUSINESS_TYPE_DELETE)), + controller.NewAMFController.UERemove, ) } diff --git a/src/modules/network_data/repository/cdr_event.go b/src/modules/network_data/repository/cdr_event.go index 0df96d95..a76f2d3c 100644 --- a/src/modules/network_data/repository/cdr_event.go +++ b/src/modules/network_data/repository/cdr_event.go @@ -6,4 +6,10 @@ import "ems.agt/src/modules/network_data/model" type ICDREvent interface { // SelectPage 根据条件分页查询 SelectPage(querys model.CDREventQuery) map[string]any + + // SelectByIds 通过ID查询 + SelectByIds(cdrIds []string) []model.CDREvent + + // DeleteByIds 批量删除信息 + DeleteByIds(cdrIds []string) int64 } diff --git a/src/modules/network_data/repository/cdr_event.impl.go b/src/modules/network_data/repository/cdr_event.impl.go index b8cf5df9..68f7b3dc 100644 --- a/src/modules/network_data/repository/cdr_event.impl.go +++ b/src/modules/network_data/repository/cdr_event.impl.go @@ -63,6 +63,10 @@ func (r *CDREventImpl) SelectPage(querys model.CDREventQuery) map[string]any { conditions = append(conditions, "rm_uid = ?") params = append(params, querys.RmUID) } + if querys.RmUID != "" { + conditions = append(conditions, "rm_uid = ?") + params = append(params, querys.RmUID) + } if querys.StartTime != "" { conditions = append(conditions, "timestamp >= ?") beginDate := date.ParseStrToDate(querys.StartTime, date.YYYY_MM_DD_HH_MM_SS) @@ -74,8 +78,12 @@ func (r *CDREventImpl) SelectPage(querys model.CDREventQuery) map[string]any { params = append(params, endDate.Unix()) } if querys.RecordType != "" { - conditions = append(conditions, "JSON_EXTRACT(cdr_json, '$.recordType') = ?") - params = append(params, querys.RecordType) + recordTypes := strings.Split(querys.RecordType, ",") + placeholder := repo.KeyPlaceholderByQuery(len(recordTypes)) + conditions = append(conditions, fmt.Sprintf("JSON_EXTRACT(cdr_json, '$.recordType') in (%s)", placeholder)) + for _, recordType := range recordTypes { + params = append(params, recordType) + } } // 构建查询条件语句 @@ -120,7 +128,7 @@ func (r *CDREventImpl) SelectPage(querys model.CDREventQuery) map[string]any { sortSql += " asc " } } - orderSql = fmt.Sprintf(" order by %s ", sortSql) + orderSql = fmt.Sprintf(" order by id desc, %s ", sortSql) } // 查询数据 @@ -134,3 +142,30 @@ func (r *CDREventImpl) SelectPage(querys model.CDREventQuery) map[string]any { result["rows"] = r.convertResultRows(results) return result } + +// SelectByIds 通过ID查询 +func (r *CDREventImpl) SelectByIds(cdrIds []string) []model.CDREvent { + placeholder := repo.KeyPlaceholderByQuery(len(cdrIds)) + querySql := r.selectSql + " where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(cdrIds) + results, err := datasource.RawDB("", querySql, parameters) + if err != nil { + logger.Errorf("query err => %v", err) + return []model.CDREvent{} + } + // 转换实体 + return r.convertResultRows(results) +} + +// DeleteByIds 批量删除信息 +func (r *CDREventImpl) DeleteByIds(cdrIds []string) int64 { + placeholder := repo.KeyPlaceholderByQuery(len(cdrIds)) + sql := "delete from cdr_event where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(cdrIds) + results, err := datasource.ExecDB("", sql, parameters) + if err != nil { + logger.Errorf("delete err => %v", err) + return 0 + } + return results +} diff --git a/src/modules/network_data/repository/ue_event.go b/src/modules/network_data/repository/ue_event.go index 42c520ca..cb36df58 100644 --- a/src/modules/network_data/repository/ue_event.go +++ b/src/modules/network_data/repository/ue_event.go @@ -6,4 +6,10 @@ import "ems.agt/src/modules/network_data/model" type IUEEvent interface { // SelectPage 根据条件分页查询 SelectPage(querys model.UEEventQuery) map[string]any + + // SelectByIds 通过ID查询 + SelectByIds(ueIds []string) []model.UEEvent + + // DeleteByIds 批量删除信息 + DeleteByIds(ueIds []string) int64 } diff --git a/src/modules/network_data/repository/ue_event.impl.go b/src/modules/network_data/repository/ue_event.impl.go index 66e104c3..72613ea0 100644 --- a/src/modules/network_data/repository/ue_event.impl.go +++ b/src/modules/network_data/repository/ue_event.impl.go @@ -74,6 +74,14 @@ func (r *UEEventImpl) SelectPage(querys model.UEEventQuery) map[string]any { endDate := date.ParseStrToDate(querys.EndTime, date.YYYY_MM_DD_HH_MM_SS) params = append(params, endDate.Unix()) } + if querys.EventType != "" { + eventTypes := strings.Split(querys.EventType, ",") + placeholder := repo.KeyPlaceholderByQuery(len(eventTypes)) + conditions = append(conditions, fmt.Sprintf("event_type in (%s)", placeholder)) + for _, eventType := range eventTypes { + params = append(params, eventType) + } + } // 构建查询条件语句 whereSql := "" @@ -117,7 +125,7 @@ func (r *UEEventImpl) SelectPage(querys model.UEEventQuery) map[string]any { sortSql += " asc " } } - orderSql = fmt.Sprintf(" order by %s ", sortSql) + orderSql = fmt.Sprintf(" order by id desc, %s ", sortSql) } // 查询数据 @@ -131,3 +139,30 @@ func (r *UEEventImpl) SelectPage(querys model.UEEventQuery) map[string]any { result["rows"] = r.convertResultRows(results) return result } + +// SelectByIds 通过ID查询 +func (r *UEEventImpl) SelectByIds(ueIds []string) []model.UEEvent { + placeholder := repo.KeyPlaceholderByQuery(len(ueIds)) + querySql := r.selectSql + " where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(ueIds) + results, err := datasource.RawDB("", querySql, parameters) + if err != nil { + logger.Errorf("query err => %v", err) + return []model.UEEvent{} + } + // 转换实体 + return r.convertResultRows(results) +} + +// DeleteByIds 批量删除信息 +func (r *UEEventImpl) DeleteByIds(ueIds []string) int64 { + placeholder := repo.KeyPlaceholderByQuery(len(ueIds)) + sql := "delete from ue_event where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(ueIds) + results, err := datasource.ExecDB("", sql, parameters) + if err != nil { + logger.Errorf("delete err => %v", err) + return 0 + } + return results +} diff --git a/src/modules/network_data/service/cdr_event.go b/src/modules/network_data/service/cdr_event.go index 8efc2232..0476df7b 100644 --- a/src/modules/network_data/service/cdr_event.go +++ b/src/modules/network_data/service/cdr_event.go @@ -6,4 +6,7 @@ import "ems.agt/src/modules/network_data/model" type ICDREvent interface { // SelectPage 根据条件分页查询 SelectPage(querys model.CDREventQuery) map[string]any + + // DeleteByIds 批量删除信息 + DeleteByIds(cdrIds []string) (int64, error) } diff --git a/src/modules/network_data/service/cdr_event.impl.go b/src/modules/network_data/service/cdr_event.impl.go index e6a950c7..ecb70c0b 100644 --- a/src/modules/network_data/service/cdr_event.impl.go +++ b/src/modules/network_data/service/cdr_event.impl.go @@ -1,6 +1,8 @@ package service import ( + "fmt" + "ems.agt/src/modules/network_data/model" "ems.agt/src/modules/network_data/repository" ) @@ -20,3 +22,19 @@ type CDREventImpl struct { func (r *CDREventImpl) SelectPage(querys model.CDREventQuery) map[string]any { return r.cdrEventRepository.SelectPage(querys) } + +// DeleteByIds 批量删除信息 +func (r *CDREventImpl) DeleteByIds(cdrIds []string) (int64, error) { + // 检查是否存在 + ids := r.cdrEventRepository.SelectByIds(cdrIds) + if len(ids) <= 0 { + return 0, fmt.Errorf("not data") + } + + if len(ids) == len(cdrIds) { + rows := r.cdrEventRepository.DeleteByIds(cdrIds) + return rows, nil + } + // 删除信息失败! + return 0, fmt.Errorf("delete fail") +} diff --git a/src/modules/network_data/service/ue_event.go b/src/modules/network_data/service/ue_event.go index e85c689a..dc104a78 100644 --- a/src/modules/network_data/service/ue_event.go +++ b/src/modules/network_data/service/ue_event.go @@ -6,4 +6,7 @@ import "ems.agt/src/modules/network_data/model" type IUEEvent interface { // SelectPage 根据条件分页查询 SelectPage(querys model.UEEventQuery) map[string]any + + // DeleteByIds 批量删除信息 + DeleteByIds(ueIds []string) (int64, error) } diff --git a/src/modules/network_data/service/ue_event.impl.go b/src/modules/network_data/service/ue_event.impl.go index 46e7354b..d60ea952 100644 --- a/src/modules/network_data/service/ue_event.impl.go +++ b/src/modules/network_data/service/ue_event.impl.go @@ -1,6 +1,8 @@ package service import ( + "fmt" + "ems.agt/src/modules/network_data/model" "ems.agt/src/modules/network_data/repository" ) @@ -20,3 +22,19 @@ type UEEventImpl struct { func (r *UEEventImpl) SelectPage(querys model.UEEventQuery) map[string]any { return r.ueEventRepository.SelectPage(querys) } + +// DeleteByIds 批量删除信息 +func (r *UEEventImpl) DeleteByIds(ueIds []string) (int64, error) { + // 检查是否存在 + ids := r.ueEventRepository.SelectByIds(ueIds) + if len(ids) <= 0 { + return 0, fmt.Errorf("no data") + } + + if len(ids) == len(ueIds) { + rows := r.ueEventRepository.DeleteByIds(ueIds) + return rows, nil + } + // 删除信息失败! + return 0, fmt.Errorf("delete fail") +}