diff --git a/core.go b/core.go index ccecd22..3eba7f1 100644 --- a/core.go +++ b/core.go @@ -38,8 +38,8 @@ type TimeArrow struct { ExpandTags []string `json:"expand_tags"` ExpandValue interface{} `json:"expand_value"` Weights float64 `json:"weights"` - - Extension map[string]interface{} `json:"extension"` + + Extension map[string]interface{} `json:"extension"` } type TimeArrows []TimeArrow @@ -295,6 +295,69 @@ type TimeArrowHelper struct { GetData func(group string) (TimeArrows, error) } +func (th *TimeArrowHelper) CallHitTimeArrow(t time.Time, group string, call func(*TimeArrow), expandTags ...string) error { + ta, err := th.GetData(group) + if err != nil { + return err + } + sort.Slice(ta, func(i, j int) bool { + return ta[i].Weights > ta[j].Weights + }) + for e := range ta { + //当天具体时间判断 + if !isInTimeOfDay(t, ta[e]) { + continue + } + + //扩展标签判断 + if !isInExpandTags(ta[e], strings.Join(expandTags, "-")) { + continue + } + + switch ta[e].Type { + case TimeArrowTypeDayOfWeek: + //一周中某一天是否判定 + if isInWeekOfDay(t, ta[e]) { + call(&ta[e]) + } + break + case TimeArrowTypeDayOfMonth: + //一月中某一天是否判定 + if isInDayOfMonth(t, ta[e]) { + call(&ta[e]) + } + break + case TimeArrowTypeDateSlice: + //一月中某一天是否判定 + if isInDateSlice(t, ta[e]) { + call(&ta[e]) + } + break + case TimeArrowTypeAtLastDayHolidays: + //节假日最后一天 + if isInAtLastDayHolidays(t) { + call(&ta[e]) + } + break + case TimeArrowTypePriorToDayHolidays: + //节假日前一天 + if isInPriorToDayHolidays(t) { + call(&ta[e]) + } + break + case TimeArrowTypeInHolidays: + //节假日 + if isInHolidays(t) { + call(&ta[e]) + } + break + default: + log.Println("类型错误:", ta[e].Type) + } + } + return nil +} + func (th *TimeArrowHelper) GetHitTimeArrow(t time.Time, group string, expandTags ...string) (*TimeArrow, error) { ta, err := th.GetData(group) if err != nil {