Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
2bf8e42146
1 changed files with 41 additions and 141 deletions
|
@ -433,61 +433,18 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa
|
|||
count := relativeDate.Count
|
||||
unit := relativeDate.Unit
|
||||
direction := relativeDate.Direction
|
||||
valueTime := time.UnixMilli(value.Date.Content)
|
||||
relativeTimeStart, relativeTimeEnd := calcRelativeTimeRegion(count, unit, direction)
|
||||
switch operator {
|
||||
case FilterOperatorIsEqual:
|
||||
return (valueTime.After(relativeTimeStart) || valueTime.Equal(relativeTimeStart)) && (valueTime.Before(relativeTimeEnd) || valueTime.Equal(relativeTimeEnd))
|
||||
case FilterOperatorIsNotEqual:
|
||||
return !(valueTime.After(relativeTimeStart) || valueTime.Equal(relativeTimeStart)) || !(valueTime.Before(relativeTimeEnd) || valueTime.Equal(relativeTimeEnd))
|
||||
case FilterOperatorIsGreater:
|
||||
return valueTime.After(relativeTimeEnd)
|
||||
case FilterOperatorIsGreaterOrEqual:
|
||||
return valueTime.After(relativeTimeStart) || valueTime.Equal(relativeTimeStart)
|
||||
case FilterOperatorIsLess:
|
||||
return valueTime.Before(relativeTimeStart)
|
||||
case FilterOperatorIsLessOrEqual:
|
||||
return valueTime.Before(relativeTimeStart) || valueTime.Equal(relativeTimeStart)
|
||||
case FilterOperatorIsBetween:
|
||||
_, relativeTime2End := calcRelativeTimeRegion(relativeDate2.Count, relativeDate2.Unit, relativeDate2.Direction)
|
||||
return (valueTime.After(relativeTimeStart) || valueTime.Equal(relativeTimeStart)) && (valueTime.Before(relativeTime2End) || valueTime.Equal(relativeTime2End))
|
||||
}
|
||||
_, relativeTimeEnd2 := calcRelativeTimeRegion(relativeDate2.Count, relativeDate2.Unit, relativeDate2.Direction)
|
||||
return filterTime(value.Date.Content, value.Date.IsNotEmpty, relativeTimeStart, relativeTimeEnd, relativeTimeEnd2, operator)
|
||||
} else { // 使用具体时间比较
|
||||
if nil == other.Date {
|
||||
return true
|
||||
}
|
||||
|
||||
switch operator {
|
||||
case FilterOperatorIsEqual:
|
||||
if !other.Date.IsNotEmpty {
|
||||
return true
|
||||
}
|
||||
return value.Date.Content == other.Date.Content
|
||||
case FilterOperatorIsNotEqual:
|
||||
if !other.Date.IsNotEmpty {
|
||||
return true
|
||||
}
|
||||
return value.Date.Content != other.Date.Content
|
||||
case FilterOperatorIsGreater:
|
||||
return value.Date.Content > other.Date.Content
|
||||
case FilterOperatorIsGreaterOrEqual:
|
||||
return value.Date.Content >= other.Date.Content
|
||||
case FilterOperatorIsLess:
|
||||
return value.Date.Content < other.Date.Content
|
||||
case FilterOperatorIsLessOrEqual:
|
||||
return value.Date.Content <= other.Date.Content
|
||||
case FilterOperatorIsBetween:
|
||||
start := value.Date.Content >= other.Date.Content
|
||||
end := value.Date.Content <= other.Date.Content2
|
||||
if value.Date.HasEndDate {
|
||||
end = value.Date.Content2 <= other.Date.Content2
|
||||
}
|
||||
return start && end
|
||||
case FilterOperatorIsEmpty:
|
||||
return !value.Date.IsNotEmpty
|
||||
case FilterOperatorIsNotEmpty:
|
||||
return value.Date.IsNotEmpty
|
||||
}
|
||||
otherTime := time.UnixMilli(other.Date.Content)
|
||||
otherStart := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 0, 0, 0, 0, otherTime.Location())
|
||||
otherEnd := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 23, 59, 59, 999999999, otherTime.Location())
|
||||
return filterTime(value.Date.Content, value.Date.IsNotEmpty, otherStart, otherEnd, time.Now(), operator)
|
||||
}
|
||||
}
|
||||
case KeyTypeCreated:
|
||||
|
@ -498,58 +455,17 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa
|
|||
count := relativeDate.Count
|
||||
unit := relativeDate.Unit
|
||||
direction := relativeDate.Direction
|
||||
valueTime := time.UnixMilli(value.Created.Content)
|
||||
relativeTimeStart, relativeTimeEnd := calcRelativeTimeRegion(count, unit, direction)
|
||||
switch operator {
|
||||
case FilterOperatorIsEqual:
|
||||
return (valueTime.After(relativeTimeStart) || valueTime.Equal(relativeTimeStart)) && (valueTime.Before(relativeTimeEnd) || valueTime.Equal(relativeTimeEnd))
|
||||
case FilterOperatorIsNotEqual:
|
||||
return !(valueTime.After(relativeTimeStart) || valueTime.Equal(relativeTimeStart)) || !(valueTime.Before(relativeTimeEnd) || valueTime.Equal(relativeTimeEnd))
|
||||
case FilterOperatorIsGreater:
|
||||
return valueTime.After(relativeTimeEnd)
|
||||
case FilterOperatorIsGreaterOrEqual:
|
||||
return valueTime.After(relativeTimeStart) || valueTime.Equal(relativeTimeStart)
|
||||
case FilterOperatorIsLess:
|
||||
return valueTime.Before(relativeTimeStart)
|
||||
case FilterOperatorIsLessOrEqual:
|
||||
return valueTime.Before(relativeTimeStart) || valueTime.Equal(relativeTimeStart)
|
||||
case FilterOperatorIsBetween:
|
||||
_, relativeTime2End := calcRelativeTimeRegion(relativeDate2.Count, relativeDate2.Unit, relativeDate2.Direction)
|
||||
return (valueTime.After(relativeTimeStart) || valueTime.Equal(relativeTimeStart)) && (valueTime.Before(relativeTime2End) || valueTime.Equal(relativeTime2End))
|
||||
}
|
||||
return filterTime(value.Created.Content, true, relativeTimeStart, relativeTimeEnd, time.Now(), operator)
|
||||
} else { // 使用具体时间比较
|
||||
if nil == other.Created {
|
||||
return true
|
||||
}
|
||||
|
||||
switch operator {
|
||||
case FilterOperatorIsEqual:
|
||||
if !other.Created.IsNotEmpty {
|
||||
return true
|
||||
}
|
||||
return value.Created.Content == other.Created.Content
|
||||
case FilterOperatorIsNotEqual:
|
||||
if !other.Created.IsNotEmpty {
|
||||
return true
|
||||
}
|
||||
return value.Created.Content != other.Created.Content
|
||||
case FilterOperatorIsGreater:
|
||||
return value.Created.Content > other.Created.Content
|
||||
case FilterOperatorIsGreaterOrEqual:
|
||||
return value.Created.Content >= other.Created.Content
|
||||
case FilterOperatorIsLess:
|
||||
return value.Created.Content < other.Created.Content
|
||||
case FilterOperatorIsLessOrEqual:
|
||||
return value.Created.Content <= other.Created.Content
|
||||
case FilterOperatorIsBetween:
|
||||
start := value.Created.Content >= other.Created.Content
|
||||
end := value.Created.Content <= other.Created.Content2
|
||||
return start && end
|
||||
case FilterOperatorIsEmpty:
|
||||
return !value.Created.IsNotEmpty
|
||||
case FilterOperatorIsNotEmpty:
|
||||
return value.Created.IsNotEmpty
|
||||
}
|
||||
otherTime := time.UnixMilli(other.Created.Content)
|
||||
otherStart := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 0, 0, 0, 0, otherTime.Location())
|
||||
otherEnd := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 23, 59, 59, 999999999, otherTime.Location())
|
||||
return filterTime(value.Created.Content, value.Created.IsNotEmpty, otherStart, otherEnd, time.Now(), operator)
|
||||
}
|
||||
}
|
||||
case KeyTypeUpdated:
|
||||
|
@ -560,58 +476,17 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa
|
|||
count := relativeDate.Count
|
||||
unit := relativeDate.Unit
|
||||
direction := relativeDate.Direction
|
||||
valueTime := time.UnixMilli(value.Updated.Content)
|
||||
relativeTimeStart, relativeTimeEnd := calcRelativeTimeRegion(count, unit, direction)
|
||||
switch operator {
|
||||
case FilterOperatorIsEqual:
|
||||
return (valueTime.After(relativeTimeStart) || valueTime.Equal(relativeTimeStart)) && (valueTime.Before(relativeTimeEnd) || valueTime.Equal(relativeTimeEnd))
|
||||
case FilterOperatorIsNotEqual:
|
||||
return !(valueTime.After(relativeTimeStart) || valueTime.Equal(relativeTimeStart)) || !(valueTime.Before(relativeTimeEnd) || valueTime.Equal(relativeTimeEnd))
|
||||
case FilterOperatorIsGreater:
|
||||
return valueTime.After(relativeTimeEnd)
|
||||
case FilterOperatorIsGreaterOrEqual:
|
||||
return valueTime.After(relativeTimeEnd) || valueTime.Equal(relativeTimeEnd)
|
||||
case FilterOperatorIsLess:
|
||||
return valueTime.Before(relativeTimeStart)
|
||||
case FilterOperatorIsLessOrEqual:
|
||||
return valueTime.Before(relativeTimeStart) || valueTime.Equal(relativeTimeStart)
|
||||
case FilterOperatorIsBetween:
|
||||
_, relativeTime2End := calcRelativeTimeRegion(relativeDate2.Count, relativeDate2.Unit, relativeDate2.Direction)
|
||||
return (valueTime.After(relativeTimeStart) || valueTime.Equal(relativeTimeStart)) && (valueTime.Before(relativeTime2End) || valueTime.Equal(relativeTime2End))
|
||||
}
|
||||
return filterTime(value.Updated.Content, true, relativeTimeStart, relativeTimeEnd, time.Now(), operator)
|
||||
} else { // 使用具体时间比较
|
||||
if nil == other.Updated {
|
||||
return true
|
||||
}
|
||||
|
||||
switch operator {
|
||||
case FilterOperatorIsEqual:
|
||||
if !other.Updated.IsNotEmpty {
|
||||
return true
|
||||
}
|
||||
return value.Updated.Content == other.Updated.Content
|
||||
case FilterOperatorIsNotEqual:
|
||||
if !other.Updated.IsNotEmpty {
|
||||
return true
|
||||
}
|
||||
return value.Updated.Content != other.Updated.Content
|
||||
case FilterOperatorIsGreater:
|
||||
return value.Updated.Content > other.Updated.Content
|
||||
case FilterOperatorIsGreaterOrEqual:
|
||||
return value.Updated.Content >= other.Updated.Content
|
||||
case FilterOperatorIsLess:
|
||||
return value.Updated.Content < other.Updated.Content
|
||||
case FilterOperatorIsLessOrEqual:
|
||||
return value.Updated.Content <= other.Updated.Content
|
||||
case FilterOperatorIsBetween:
|
||||
start := value.Updated.Content >= other.Updated.Content
|
||||
end := value.Updated.Content <= other.Updated.Content2
|
||||
return start && end
|
||||
case FilterOperatorIsEmpty:
|
||||
return !value.Updated.IsNotEmpty
|
||||
case FilterOperatorIsNotEmpty:
|
||||
return value.Updated.IsNotEmpty
|
||||
}
|
||||
otherTime := time.UnixMilli(other.Updated.Content)
|
||||
otherStart := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 0, 0, 0, 0, otherTime.Location())
|
||||
otherEnd := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 23, 59, 59, 999999999, otherTime.Location())
|
||||
return filterTime(value.Updated.Content, value.Updated.IsNotEmpty, otherStart, otherEnd, time.Now(), operator)
|
||||
}
|
||||
}
|
||||
case KeyTypeSelect, KeyTypeMSelect:
|
||||
|
@ -825,6 +700,31 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa
|
|||
return false
|
||||
}
|
||||
|
||||
func filterTime(valueMills int64, valueIsNotEmpty bool, otherValueStart, otherValueEnd, otherValueEnd2 time.Time, operator FilterOperator) bool {
|
||||
valueTime := time.UnixMilli(valueMills)
|
||||
switch operator {
|
||||
case FilterOperatorIsEqual:
|
||||
return (valueTime.After(otherValueStart) || valueTime.Equal(otherValueStart)) && valueTime.Before(otherValueEnd)
|
||||
case FilterOperatorIsNotEqual:
|
||||
return valueTime.Before(otherValueStart) || valueTime.After(otherValueEnd)
|
||||
case FilterOperatorIsGreater:
|
||||
return valueTime.After(otherValueEnd) || valueTime.Equal(otherValueEnd)
|
||||
case FilterOperatorIsGreaterOrEqual:
|
||||
return valueTime.After(otherValueStart) || valueTime.Equal(otherValueStart)
|
||||
case FilterOperatorIsLess:
|
||||
return valueTime.Before(otherValueStart)
|
||||
case FilterOperatorIsLessOrEqual:
|
||||
return valueTime.Before(otherValueEnd) || valueTime.Equal(otherValueEnd)
|
||||
case FilterOperatorIsBetween:
|
||||
return (valueTime.After(otherValueStart) || valueTime.Equal(otherValueStart)) && (valueTime.Before(otherValueEnd2) || valueTime.Equal(otherValueEnd2))
|
||||
case FilterOperatorIsEmpty:
|
||||
return !valueIsNotEmpty
|
||||
case FilterOperatorIsNotEmpty:
|
||||
return valueIsNotEmpty
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// 根据 Count、Unit 和 Direction 计算相对当前时间的开始时间和结束时间
|
||||
func calcRelativeTimeRegion(count int, unit RelativeDateUnit, direction RelativeDateDirection) (start, end time.Time) {
|
||||
now := time.Now()
|
||||
|
|
Loading…
Add table
Reference in a new issue