123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- 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
- }
|