1 Star 0 Fork 0

h79/goutils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
range.go 2.33 KB
一键复制 编辑 原始数据 按行查看 历史
huqiuyun 提交于 2024-04-03 15:06 . dao
package wrapper
import (
"gitee.com/h79/goutils/common"
"strings"
)
// Range 时间范围
type Range[T common.IntegerType] struct {
Column string `form:"col" json:"col"`
Operator string `form:"operator" json:"operator"`
Min T `form:"begin" json:"begin"`
Max T `form:"end" json:"end"`
}
func (rg *Range[T]) Adjust() {
if rg.Min > rg.Max {
rg.Min, rg.Max = rg.Max, rg.Min
}
}
func (rg *Range[T]) RangeLegal(legal T) {
rg.Adjust()
if rg.Max-rg.Min <= legal {
return
}
rg.Min = rg.Max - legal
if rg.Min < 0 {
rg.Min = 0
}
}
func (rg *Range[T]) HasValid() bool {
// 时间有效,操作符长度不能太长(wrapper.Gt,wrapper.Between...),太长就是无效,在进行ToUpper时,造成时间消耗
return len(rg.Operator) > 0 && len(rg.Operator) < 8 && len(rg.Column) > 0
}
func (rg *Range[T]) Cond(cond *Condition) {
if !rg.HasValid() {
return
}
operator := strings.ToUpper(rg.Operator)
if operator == ">" {
cond.Gt(rg.Column, rg.Min)
} else if operator == ">=" {
cond.GtEq(rg.Column, rg.Min)
} else if operator == "<" {
cond.Lt(rg.Column, rg.Max)
} else if operator == "<=" {
cond.LtEq(rg.Column, rg.Max)
} else if operator == "BETWEEN" {
cond.Between(rg.Column, rg.Min, rg.Max)
}
}
// RangeV2 时间范围
type RangeV2[T common.IntegerType] struct {
Column string `form:"col" json:"col"`
Op string `form:"op" json:"op"`
Min T `form:"start" json:"start"`
Max T `form:"end" json:"end"`
}
func (rg *RangeV2[T]) HasValid() bool {
// 时间有效,操作符长度不能太长,太长就是无效,在进行ToUpper时,造成时间消耗
return len(rg.Op) > 0 && len(rg.Op) < 5 && len(rg.Column) > 0
}
func (rg *RangeV2[T]) Cond(cond *Condition) {
if !rg.HasValid() {
return
}
operator := strings.ToUpper(rg.Op)
if operator == "GT" {
cond.Gt(rg.Column, rg.Min)
} else if operator == "GTE" {
cond.GtEq(rg.Column, rg.Min)
} else if operator == "LT" {
cond.Lt(rg.Column, rg.Max)
} else if operator == "LTE" {
cond.LtEq(rg.Column, rg.Max)
} else if operator == "BET" {
cond.Between(rg.Column, rg.Min, rg.Max)
}
}
func (rg *RangeV2[T]) Adjust() {
if rg.Max > rg.Min {
rg.Min, rg.Max = rg.Max, rg.Min
}
}
func (rg *RangeV2[T]) RangeLegal(legal T) {
rg.Adjust()
if rg.Max-rg.Min <= legal {
return
}
rg.Min = rg.Max - legal
if rg.Min < 0 {
rg.Min = 0
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/h79/goutils.git
git@gitee.com:h79/goutils.git
h79
goutils
goutils
v1.20.83

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385