feat(通道流量阈值): AUG26-011 运营商通道流量阈值达量停机与周期复机
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 12m59s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 12m59s
This commit is contained in:
29
internal/domain/carrierthreshold/period.go
Normal file
29
internal/domain/carrierthreshold/period.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package carrierthreshold
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/break/junhong_cmp_fiber/pkg/errors"
|
||||
)
|
||||
|
||||
// shanghaiLocation 是计费周期边界的固定时区。
|
||||
// 中国自 1991 年起不实行夏令时,使用固定偏移可避免依赖宿主机 tzdata。
|
||||
var shanghaiLocation = time.FixedZone("Asia/Shanghai", 8*60*60)
|
||||
|
||||
// PeriodStart 计算 now 所属计费周期的起点(上海时区零点)。
|
||||
//
|
||||
// 周期起点 = 本月重置日 0 点,若 now 早于本月重置日 0 点则取上月重置日 0 点。
|
||||
// resetDay 由该卡所属运营商(锁行自身的 carrier)的 data_reset_day 提供,合法范围 1-28,
|
||||
// 因此每个月都有定义。该口径与 isTrafficResetWindow(判断读数回落是否为合法清零的观测窗口)
|
||||
// 是两个独立口径,互不修改。
|
||||
func PeriodStart(now time.Time, resetDay int) (time.Time, error) {
|
||||
if resetDay < MinResetDay || resetDay > MaxResetDay {
|
||||
return time.Time{}, errors.New(errors.CodeInvalidParam, "运营商上游流量重置日必须在 1-28 之间")
|
||||
}
|
||||
local := now.In(shanghaiLocation)
|
||||
current := time.Date(local.Year(), local.Month(), resetDay, 0, 0, 0, 0, shanghaiLocation)
|
||||
if !local.Before(current) {
|
||||
return current, nil
|
||||
}
|
||||
return current.AddDate(0, -1, 0), nil
|
||||
}
|
||||
Reference in New Issue
Block a user