feat: 忙时定义为一周内话务量最高的四个小时的平均值

This commit is contained in:
TsMask
2025-09-08 18:31:21 +08:00
parent ec02b6cbb3
commit 24fc8115d6
4 changed files with 165 additions and 1 deletions

View File

@@ -419,3 +419,60 @@ func (s IMSController) KPIBusyHour(c *gin.Context) {
data := s.kpiReportService.IMSBusyHour(neInfo.RmUID, query.Timestamp)
c.JSON(200, resp.OkData(data))
}
// KPI 忙时统计 周
//
// GET /kpi/busy-week
//
// @Tags network_data/ims
// @Accept json
// @Produce json
// @Param neId query string true "NE ID" default(001)
// @Param timestamp query int64 false "timestamp"
// @Success 200 {object} object "Response Results"
// @Security TokenAuth
// @Summary Busy week statistics
// @Description Busy week statistics
// @Router /neData/ims/kpi/busy-week [get]
func (s IMSController) KPIBusyWeek(c *gin.Context) {
language := reqctx.AcceptLanguage(c)
var query struct {
NeID string `form:"neId" binding:"required"`
WeekStart int64 `form:"weekStart" binding:"required"` // 时间戳毫秒 年月日
WeekEnd int64 `form:"weekEnd" binding:"required"` // 时间戳毫秒 年月日
}
if err := c.ShouldBindQuery(&query); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
return
}
if query.WeekStart < 1e12 || query.WeekStart > 1e13 {
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "weekStart format is ms"))
return
}
if query.WeekEnd < 1e12 || query.WeekEnd > 1e13 {
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "weekEnd format is ms"))
return
}
if query.WeekEnd < query.WeekStart || query.WeekEnd == query.WeekStart {
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "weekEnd must be greater than weekStart and not equal to weekStart"))
return
}
// 计算周差
weekDiff := query.WeekEnd - query.WeekStart
// 周差是否7天
if weekDiff-7*24*60*60*1000 != -1000 {
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "weekEnd must be 7 days after weekStart"))
return
}
// 查询网元获取IP
neInfo := s.neInfoService.FindByNeTypeAndNeID("IMS", query.NeID)
if neInfo.NeId != query.NeID || neInfo.IP == "" {
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
return
}
data := s.kpiReportService.IMSBusyWeek(neInfo.RmUID, query.WeekStart, query.WeekEnd)
c.JSON(200, resp.OkData(data))
}