204 lines
4.0 KiB
Go
204 lines
4.0 KiB
Go
package common
|
|
|
|
import (
|
|
"database/sql/driver"
|
|
"fmt"
|
|
"regexp"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// TimeFormat time format
|
|
var TimeFormat = "2006-01-02 15:04:05"
|
|
|
|
//GrayField gray config for each business
|
|
type GrayField struct {
|
|
Name string
|
|
Value string
|
|
}
|
|
|
|
// Pager .
|
|
type Pager struct {
|
|
Total int `json:"total" reflect:"ignore"`
|
|
Pn int `form:"pn" default:"1" json:"pn" reflect:"ignore"`
|
|
Ps int `form:"ps" default:"20" json:"ps" reflect:"ignore"`
|
|
}
|
|
|
|
// BaseOptions 公共参数
|
|
type BaseOptions struct {
|
|
BusinessID int64 `form:"business_id" json:"business_id"`
|
|
NetID int64 `form:"net_id" json:"net_id"`
|
|
FlowID int64 `form:"flow_id" json:"flow_id"`
|
|
UID int64 `form:"uid" json:"uid" submit:"int"`
|
|
OID string `form:"oid" json:"oid" submit:"string"`
|
|
RID int64 `form:"rid" json:"rid"`
|
|
Role int8 `form:"role" json:"role"`
|
|
Debug int8 `form:"debug" json:"debug"`
|
|
Uname string `form:"uname" json:"uname" submit:"string"`
|
|
}
|
|
|
|
// FormatTime .
|
|
type FormatTime string
|
|
|
|
// Scan .
|
|
func (f *FormatTime) Scan(src interface{}) (err error) {
|
|
switch sc := src.(type) {
|
|
case time.Time:
|
|
*f = FormatTime(sc.Format("2006-01-02 15:04:05"))
|
|
case string:
|
|
*f = FormatTime(sc)
|
|
}
|
|
return
|
|
}
|
|
|
|
// WaitTime 计算等待时长
|
|
func WaitTime(ctime time.Time) string {
|
|
wt := time.Since(ctime)
|
|
h := int(wt.Hours())
|
|
m := int(wt.Minutes()) % 60
|
|
s := int(wt.Seconds()) % 60
|
|
return fmt.Sprintf("%.2d:%.2d:%.2d", h, m, s)
|
|
}
|
|
|
|
//ParseWaitTime 。
|
|
func ParseWaitTime(ut int64) string {
|
|
h := ut / 3600
|
|
m := ut % 3600 / 60
|
|
s := ut % 60
|
|
return fmt.Sprintf("%.2d:%.2d:%.2d", h, m, s)
|
|
}
|
|
|
|
// Group .
|
|
type Group struct {
|
|
ID int64 `json:"group_id"`
|
|
Name string `json:"group_name"`
|
|
Note string `json:"group_note"`
|
|
Tag string `json:"group_tag"`
|
|
FontColor string `json:"font_color"`
|
|
BgColor string `json:"bg_color"`
|
|
}
|
|
|
|
// IntTime .
|
|
type IntTime int64
|
|
|
|
// Scan scan time.
|
|
func (jt *IntTime) Scan(src interface{}) (err error) {
|
|
switch sc := src.(type) {
|
|
case time.Time:
|
|
*jt = IntTime(sc.Unix())
|
|
case string:
|
|
var i int64
|
|
i, err = strconv.ParseInt(sc, 10, 64)
|
|
*jt = IntTime(i)
|
|
}
|
|
return
|
|
}
|
|
|
|
// Value get time value.
|
|
func (jt IntTime) Value() (driver.Value, error) {
|
|
return time.Unix(int64(jt), 0), nil
|
|
}
|
|
|
|
// Time get time.
|
|
func (jt IntTime) Time() time.Time {
|
|
return time.Unix(int64(jt), 0)
|
|
}
|
|
|
|
// UnmarshalJSON implement Unmarshaler
|
|
func (jt *IntTime) UnmarshalJSON(data []byte) error {
|
|
if data == nil || len(data) <= 1 {
|
|
*jt = 0
|
|
return nil
|
|
}
|
|
if data[0] != '"' {
|
|
// 1.直接判断数字
|
|
sti, err := strconv.Atoi(string(data))
|
|
if err == nil {
|
|
*jt = IntTime(sti)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
str := string(data[1 : len(data)-1])
|
|
|
|
// 2.标准格式判断
|
|
st, err := time.ParseInLocation("2006-01-02 15:04:05", str, time.Local)
|
|
if err == nil {
|
|
*jt = IntTime(st.Unix())
|
|
return nil
|
|
}
|
|
|
|
*jt = IntTime(0)
|
|
|
|
return nil
|
|
}
|
|
|
|
// FilterName .
|
|
func FilterName(s string) (res string) {
|
|
exp := "[^a-zA-Z0-9_]+"
|
|
reg, err := regexp.Compile(exp)
|
|
if err != nil {
|
|
res = s
|
|
return
|
|
}
|
|
|
|
res = reg.ReplaceAllString(s, "")
|
|
return
|
|
}
|
|
|
|
// FilterChname .
|
|
func FilterChname(s string) (res string) {
|
|
exp := "[^0-9_\u4e00-\u9fa5]+"
|
|
reg, err := regexp.Compile(exp)
|
|
if err != nil {
|
|
res = s
|
|
return
|
|
}
|
|
|
|
res = reg.ReplaceAllString(s, "")
|
|
return
|
|
}
|
|
|
|
// FilterBusinessName .
|
|
func FilterBusinessName(s string) (res string) {
|
|
exp := "[^a-zA-Z\u4e00-\u9fa5]+"
|
|
reg, err := regexp.Compile(exp)
|
|
if err != nil {
|
|
res = s
|
|
return
|
|
}
|
|
|
|
res = reg.ReplaceAllString(s, "")
|
|
return
|
|
}
|
|
|
|
//Unique remove duplicated value from slice
|
|
func Unique(ids []int64, gthan0 bool) (res []int64) {
|
|
res = []int64{}
|
|
mm := map[int64]int64{}
|
|
for _, id := range ids {
|
|
if mm[id] == id || (gthan0 && id <= 0) {
|
|
continue
|
|
}
|
|
|
|
res = append(res, id)
|
|
mm[id] = id
|
|
}
|
|
return
|
|
}
|
|
|
|
//CopyMap copy src to dest
|
|
func CopyMap(src, dest map[int64][]int64, gthan0 bool) (res map[int64][]int64) {
|
|
if dest == nil {
|
|
dest = map[int64][]int64{}
|
|
}
|
|
|
|
for k, v := range src {
|
|
dest[k] = append(dest[k], v...)
|
|
dest[k] = Unique(dest[k], gthan0)
|
|
}
|
|
|
|
res = dest
|
|
return
|
|
}
|