135 lines
2.6 KiB
Go
135 lines
2.6 KiB
Go
package model
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// ModelWhere
|
|
type ModelWhere struct {
|
|
Condition string `json:"condition"` // 条件
|
|
Value interface{} `json:"value"` // 内容
|
|
}
|
|
|
|
// ModelOrder
|
|
type ModelOrder struct {
|
|
Field string `json:"field"` // 字段值
|
|
Mode OrderMode `json:"mode"` // 排序模式
|
|
}
|
|
|
|
// ModelWhereOrder
|
|
type ModelWhereOrder struct {
|
|
Where *ModelWhere
|
|
Order *ModelOrder
|
|
}
|
|
|
|
// OrderMode
|
|
type OrderMode string
|
|
|
|
const (
|
|
// OrderModeToAsc asc
|
|
OrderModeToAsc = "asc"
|
|
// OrderModeToDesc desc
|
|
OrderModeToDesc = "desc"
|
|
)
|
|
|
|
// NewWhere where
|
|
func NewWhere(filed string, value interface{}) *ModelWhere {
|
|
return &ModelWhere{
|
|
Condition: filed + " = ?",
|
|
Value: value,
|
|
}
|
|
}
|
|
|
|
// NewWhereLike like where
|
|
func NewWhereLike(filed string, value interface{}) *ModelWhere {
|
|
return &ModelWhere{
|
|
Condition: filed + " LIKE ?",
|
|
Value: "%" + fmt.Sprintf("%v", value) + "%",
|
|
}
|
|
}
|
|
|
|
func NewWhereIn(filed string, value interface{}) *ModelWhere {
|
|
return &ModelWhere{
|
|
Condition: filed + " IN ?",
|
|
Value: value,
|
|
}
|
|
}
|
|
|
|
func NewWhereNotIn(filed string, value interface{}) *ModelWhere {
|
|
return &ModelWhere{
|
|
Condition: filed + " NOT IN ?",
|
|
Value: value,
|
|
}
|
|
}
|
|
|
|
func NewWhereCondition(filed, condition string, value interface{}) *ModelWhere {
|
|
return &ModelWhere{
|
|
Condition: filed + " " + condition + " ?",
|
|
Value: value,
|
|
}
|
|
}
|
|
|
|
func NewWhereValue(value interface{}) *ModelWhere {
|
|
return &ModelWhere{
|
|
Condition: "",
|
|
Value: value,
|
|
}
|
|
}
|
|
|
|
func NewWhereFindInSet(filed string, value interface{}) *ModelWhere {
|
|
return &ModelWhere{
|
|
Condition: fmt.Sprintf("FIND_IN_SET(?, %s)", filed),
|
|
Value: value,
|
|
}
|
|
}
|
|
|
|
func NewWhereSectionAt(filed string, value []string) []*ModelWhere {
|
|
return []*ModelWhere{
|
|
&ModelWhere{
|
|
Condition: filed + " >= ?",
|
|
Value: value[0],
|
|
},
|
|
&ModelWhere{
|
|
Condition: filed + " <= ?",
|
|
Value: value[1],
|
|
},
|
|
}
|
|
}
|
|
|
|
func NewWhereSectionTime(filed string, value []string) []*ModelWhere {
|
|
return []*ModelWhere{
|
|
&ModelWhere{
|
|
Condition: filed + " >= ?",
|
|
Value: value[0] + " 00:00:00",
|
|
},
|
|
&ModelWhere{
|
|
Condition: filed + " <= ?",
|
|
Value: value[1] + " 23:59:59",
|
|
},
|
|
}
|
|
}
|
|
|
|
// NewOrder order Asc Or Desc
|
|
func NewOrder(filed string, order OrderMode) *ModelOrder {
|
|
return &ModelOrder{Field: filed, Mode: order}
|
|
}
|
|
|
|
// NewOrderSplit param to split for order Asc Or Desc
|
|
func NewOrderSplit(param string) *ModelOrder {
|
|
params := strings.Split(param, "-")
|
|
|
|
if len(params) <= 1 {
|
|
return nil
|
|
}
|
|
order := new(ModelOrder)
|
|
|
|
order.Field = params[0]
|
|
order.Mode = OrderModeToAsc
|
|
|
|
if params[1] == OrderModeToDesc {
|
|
order.Mode = OrderModeToDesc
|
|
}
|
|
return order
|
|
}
|