diff --git a/src/modules/network_data/controller/all_kpi.go b/src/modules/network_data/controller/all_kpi.go index 6ba91898..e82bb9b4 100644 --- a/src/modules/network_data/controller/all_kpi.go +++ b/src/modules/network_data/controller/all_kpi.go @@ -6,6 +6,7 @@ import ( "be.ems/src/framework/i18n" "be.ems/src/framework/reqctx" "be.ems/src/framework/resp" + "be.ems/src/framework/utils/parse" "be.ems/src/modules/network_data/model" neDataService "be.ems/src/modules/network_data/service" neService "be.ems/src/modules/network_element/service" @@ -88,3 +89,88 @@ func (s KPIController) KPITitle(c *gin.Context) { kpiTitles := s.kpiReportService.FindTitle(neType) c.JSON(200, resp.OkData(kpiTitles)) } + +// 统计标题列表 +// +// GET /title/list +func (s KPIController) ListTitle(c *gin.Context) { + query := reqctx.QueryMap(c) + rows, total := s.kpiReportService.TitleFindByPage(query) + c.JSON(200, resp.OkData(map[string]any{"total": total, "rows": rows})) +} + +// 统计标题新增 +// +// POST /title +func (s KPIController) AddTitle(c *gin.Context) { + var body model.KpiTitle + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs)) + return + } + + // 校验指标是否存在 + kpicTitles := s.kpiReportService.TitleFind(model.KpiTitle{ + NeType: body.NeType, + KpiId: body.KpiId, + }) + if len(kpicTitles) > 0 { + c.JSON(200, resp.ErrMsg("indicator already exist")) + return + } + + insertId := s.kpiReportService.TitleInsert(body) + if insertId > 0 { + c.JSON(200, resp.Ok(nil)) + return + } + c.JSON(200, resp.Err(nil)) +} + +// 统计标题修改 +// +// PUT /title +func (s KPIController) EditTitle(c *gin.Context) { + var body model.KpiTitle + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs)) + return + } + + rows := s.kpiReportService.TitleUpdate(body) + if rows > 0 { + c.JSON(200, resp.Ok(nil)) + return + } + c.JSON(200, resp.Err(nil)) +} + +// 统计标题删除 +// +// DELETE /title?id=1,2,3 +func (s KPIController) RemoveTitle(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + id := c.Query("id") + if id == "" { + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: id is empty")) + return + } + + // 处理字符转id数组后去重 + uniqueIDs := parse.RemoveDuplicatesToArray(id, ",") + // 转换成int64数组类型 + ids := make([]int64, 0) + for _, v := range uniqueIDs { + ids = append(ids, parse.Number(v)) + } + + rows, err := s.kpiReportService.TitleDeleteByIds(ids) + if err != nil { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) + c.JSON(200, resp.OkMsg(msg)) +} diff --git a/src/modules/network_data/controller/all_kpi_c.go b/src/modules/network_data/controller/all_kpi_c.go index 0952e250..3fc061b4 100644 --- a/src/modules/network_data/controller/all_kpi_c.go +++ b/src/modules/network_data/controller/all_kpi_c.go @@ -71,7 +71,7 @@ func (s KPICController) KPIData(c *gin.Context) { // 自定义标题列表 // -// GET /titlelist +// GET /title/list func (s KPICController) ListTitle(c *gin.Context) { query := reqctx.QueryMap(c) if v, ok := query["status"]; ok && v == "" { @@ -156,7 +156,7 @@ func (s KPICController) EditTitle(c *gin.Context) { // 自定义标题删除 // -// DELETE /title/:id +// DELETE /title func (s KPICController) RemoveTitle(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Query("id") diff --git a/src/modules/network_data/model/kpi_report.go b/src/modules/network_data/model/kpi_report.go index 7b71b65d..0e75cf7e 100644 --- a/src/modules/network_data/model/kpi_report.go +++ b/src/modules/network_data/model/kpi_report.go @@ -2,12 +2,13 @@ package model // KpiTitle 指标标题信息对象 kpi_title type KpiTitle struct { - ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` - NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型 - KpiId string `json:"kpiId" gorm:"column:kpi_id"` // KPI标识 - TitleJson string `json:"titleJson" gorm:"column:title_json"` - CnTitle string `json:"cnTitle" gorm:"column:cn_title"` // 中文名 - EnTitle string `json:"enTitle" gorm:"column:en_title"` // 英文名 + ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` + NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型 + KpiId string `json:"kpiId" gorm:"column:kpi_id"` // KPI标识 + TitleJson string `json:"titleJson" gorm:"column:title_json"` + CnTitle string `json:"cnTitle" gorm:"column:cn_title"` // 中文名 + EnTitle string `json:"enTitle" gorm:"column:en_title"` // 英文名 + StatusFlag string `json:"statusFlag" gorm:"column:status_flag"` // 状态标识 1:启用 0:禁用 } // TableName 表名称 diff --git a/src/modules/network_data/network_data.go b/src/modules/network_data/network_data.go index e41d1683..61681b1b 100644 --- a/src/modules/network_data/network_data.go +++ b/src/modules/network_data/network_data.go @@ -27,6 +27,22 @@ func Setup(router *gin.Engine) { middleware.AuthorizeUser(nil), controller.NewKPI.KPITitle, ) + kpiGroup.GET("/title/list", + middleware.AuthorizeUser(nil), + controller.NewKPI.ListTitle, + ) + kpiGroup.POST("/title", + middleware.AuthorizeUser(nil), + controller.NewKPI.AddTitle, + ) + kpiGroup.PUT("/title", + middleware.AuthorizeUser(nil), + controller.NewKPI.EditTitle, + ) + kpiGroup.DELETE("/title", + middleware.AuthorizeUser(nil), + controller.NewKPI.RemoveTitle, + ) kpiGroup.GET("/data", middleware.AuthorizeUser(nil), controller.NewKPI.KPIData, diff --git a/src/modules/network_data/repository/kpi_report.go b/src/modules/network_data/repository/kpi_report.go index 202b395f..e451e7fc 100644 --- a/src/modules/network_data/repository/kpi_report.go +++ b/src/modules/network_data/repository/kpi_report.go @@ -71,23 +71,6 @@ func (r KpiReport) Insert(param model.KpiReport) int64 { return param.ID } -// SelectKPITitle 网元对应的指标名称 -func (r KpiReport) SelectKPITitle(neType string) []model.KpiTitle { - rows := []model.KpiTitle{} - if neType == "" { - return rows - } - tx := db.DB("").Model(&model.KpiTitle{}) - // 构建查询条件 - tx = tx.Where("ne_type =?", neType) - // 查询数据 - if err := tx.Find(&rows).Error; err != nil { - logger.Errorf("query find err => %v", err.Error()) - return rows - } - return rows -} - // SelectUPF 查询UPF数据 N3上行,N6下行 func (r KpiReport) SelectUPF(rmUID string, beginTime, endTime int64) []model.KpiReport { tx := db.DB("").Model(&model.KpiReport{}) @@ -104,3 +87,132 @@ func (r KpiReport) SelectUPF(rmUID string, beginTime, endTime int64) []model.Kpi } return rows } + +// SelectKPITitle 网元对应的指标名称 +func (r KpiReport) SelectKPITitle(neType string) []model.KpiTitle { + rows := []model.KpiTitle{} + if neType == "" { + return rows + } + tx := db.DB("").Model(&model.KpiTitle{}) + // 构建查询条件 + tx = tx.Where("ne_type = ? and status_flag = ?", neType, "1") + // 查询数据 + if err := tx.Find(&rows).Error; err != nil { + logger.Errorf("query find err => %v", err.Error()) + return rows + } + return rows +} + +// SelectByPageTitle 分页查询集合 +func (r KpiReport) TitleSelectByPage(query map[string]string) ([]model.KpiTitle, int64) { + tx := db.DB("").Model(&model.KpiTitle{}) + // 查询条件拼接 + if v, ok := query["neType"]; ok && v != "" { + tx = tx.Where("ne_type = ?", v) + } + if v, ok := query["kpiId"]; ok && v != "" { + tx = tx.Where("kpi_id like ?", fmt.Sprintf("%s%%", v)) + } + if v, ok := query["title"]; ok && v != "" { + tx = tx.Where("cn_title like ? or en_title like ?", fmt.Sprintf("%%%s%%", v), fmt.Sprintf("%%%s%%", v)) + } + if v, ok := query["statusFlag"]; ok && v != "" { + tx = tx.Where("status_flag = ?", v) + } + + // 查询结果 + var total int64 = 0 + rows := []model.KpiTitle{} + + // 查询数量 长度为0直接返回 + if err := tx.Count(&total).Error; err != nil || total <= 0 { + return rows, total + } + + // 分页 + pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"]) + tx = tx.Offset(int(pageNum * pageSize)).Limit(int(pageSize)) + + // 排序 + if v, ok := query["sortField"]; ok && v != "" { + sortSql := v + if o, ok := query["sortOrder"]; ok && o != "" { + if o == "desc" { + sortSql += " desc " + } else { + sortSql += " asc " + } + } + tx = tx.Order(sortSql) + } + + // 查询数据 + if err := tx.Find(&rows).Error; err != nil { + logger.Errorf("query err => %v", err) + } + + return rows, total +} + +// TitleSelect 网元对应的指标名称 +func (r KpiReport) TitleSelect(param model.KpiTitle) []model.KpiTitle { + tx := db.DB("").Model(&model.KpiTitle{}) + // 构建查询条件 + if param.NeType != "" { + tx = tx.Where("ne_type =?", param.NeType) + } + if param.KpiId != "" { + tx = tx.Where("kpi_id = ?", param.KpiId) + } + if param.StatusFlag != "" { + tx = tx.Where("status_flag = ?", param.StatusFlag) + } + // 查询数据 + rows := []model.KpiTitle{} + if err := tx.Find(&rows).Error; err != nil { + logger.Errorf("query find err => %v", err.Error()) + return rows + } + return rows +} + +// TitleInsert 新增信息 +func (r KpiReport) TitleInsert(param model.KpiTitle) int64 { + tx := db.DB("").Create(¶m) + if err := tx.Error; err != nil { + logger.Errorf("Create err => %v", err) + } + return param.ID +} + +// TitleUpdate 修改信息 +func (r KpiReport) TitleUpdate(param model.KpiTitle) int64 { + if param.ID <= 0 { + return 0 + } + tx := db.DB("").Model(&model.KpiTitle{}) + // 构建查询条件 + tx = tx.Where("id = ?", param.ID) + tx = tx.Omit("id", "title_json") + // 执行更新 + if err := tx.Updates(param).Error; err != nil { + logger.Errorf("update err => %v", err.Error()) + return 0 + } + return tx.RowsAffected +} + +// TitleDeleteByIds 批量删除信息 +func (r KpiReport) TitleDeleteByIds(ids []int64) int64 { + if len(ids) <= 0 { + return 0 + } + tx := db.DB("").Where("id in ?", ids) + if err := tx.Delete(&model.KpiTitle{}).Error; err != nil { + logger.Errorf("delete err => %v", err.Error()) + return 0 + } + return tx.RowsAffected +} diff --git a/src/modules/network_data/service/kpi_report.go b/src/modules/network_data/service/kpi_report.go index 6dea301f..10e96e10 100644 --- a/src/modules/network_data/service/kpi_report.go +++ b/src/modules/network_data/service/kpi_report.go @@ -141,6 +141,36 @@ func (r KpiReport) FindTitle(neType string) []model.KpiTitle { return r.kpiReportRepository.SelectKPITitle(neType) } +// FindByPage 根据条件分页查询 +func (r KpiReport) TitleFindByPage(query map[string]string) ([]model.KpiTitle, int64) { + return r.kpiReportRepository.TitleSelectByPage(query) +} + +// TitleFind 查询信息 +func (r KpiReport) TitleFind(param model.KpiTitle) []model.KpiTitle { + return r.kpiReportRepository.TitleSelect(param) +} + +// TitleUpdate 更新信息 +func (r KpiReport) TitleUpdate(param model.KpiTitle) int64 { + return r.kpiReportRepository.TitleUpdate(param) +} + +// TitleDeleteByIds 批量删除信息 +func (r KpiReport) TitleDeleteByIds(ids []int64) (int64, error) { + rows := r.kpiReportRepository.TitleDeleteByIds(ids) + if rows > 0 { + return rows, nil + } + // 删除信息失败! + return 0, fmt.Errorf("delete fail") +} + +// TitleInsert 新增信息 +func (r KpiReport) TitleInsert(param model.KpiTitle) int64 { + return r.kpiReportRepository.TitleInsert(param) +} + // UPFTodayFlowFind 查询UPF总流量 N3上行 N6下行 // day 统计天数 // down * 8 / 1000 / 1000 单位M