123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- package utils
-
- import (
- "encoding/base64"
- "math/rand"
- "net/http"
- "os"
- "path/filepath"
- "runtime"
- "strconv"
- "strings"
- "time"
- )
-
- // 客户端类型
- const (
- ClientAdmin = "client-admin"
- ClientWechat = "client-wechat"
- ClientMini = "client-mini"
- )
-
- // 一些 UA 列表
- const (
- UAWechat = "micromessenger"
- UAMiniProgram = "miniprogram"
- )
-
- // GetClientType 获取客户端类型
- // 默认返回是 管理端
- func GetClientType(r *http.Request) string {
- ua := strings.ToLower(r.Header.Get("User-Agent"))
-
- if strings.Index(ua, UAWechat) > -1 {
- // if strings.Index(ua, UAMiniProgram) > -1 {
- // return ClientMini
- // }
-
- return ClientWechat
- }
-
- return ClientAdmin
- }
-
- // StrSliceIndexOf slice indexof
- func StrSliceIndexOf(s []string, t string) int64 {
- if s == nil || len(s) == 0 {
- return -1
- }
-
- for k, v := range s {
- if v == t {
- return int64(k)
- }
- }
-
- return -1
- }
-
- // GUIID2IntString guid 转 int 字符串
- func GUIID2IntString(id string) []string {
- if id == "" {
- return nil
- }
-
- res := make([]string, 0)
- for _, part := range strings.Split(id, "-") {
- sum := 0
- for _, r := range []rune(part) {
- sum += int(r)
- }
-
- res = append(res, strconv.Itoa(sum))
- }
-
- return res
- }
-
- // EncodeBase64TrimTail base64 加密, 去除末尾 =
- func EncodeBase64TrimTail(src string) string {
- if src == "" {
- return ""
- }
-
- enStr := base64.StdEncoding.EncodeToString([]byte(src))
-
- return strings.TrimRight(enStr, "=")
- }
-
- // DecodeBase64NoTail base64解密, 位数不够的, 自动补全
- func DecodeBase64NoTail(src string) string {
- if src == "" {
- return ""
- }
-
- pd := 4 - len(src)%4
- if pd > 0 && pd != 4 {
- src += strings.Repeat("=", pd)
- }
-
- res, err := base64.StdEncoding.DecodeString(src)
- if err != nil {
- LogError("解密 Base64 字串失败: " + err.Error())
- return ""
- }
-
- return string(res)
- }
-
- // GetPageNaviLimit 获取 mysql limit 限定
- func GetPageNaviLimit(params ...int) []int {
- page := 1
- pagesize := 10
-
- if params != nil {
- pl := len(params)
-
- if pl > 0 {
- page = params[0]
- if page < 1 {
- page = 1
- }
- }
-
- if pl > 1 {
- pagesize = params[1]
- }
- }
-
- return []int{
- pagesize,
- (page - 1) * pagesize,
- }
- }
-
- // GenerateQRCode 生成二维码数字
- func GenerateQRCode() string {
- var temp1 int = rand.Intn(9)*87 + 11
- var temp2 int = rand.Intn(9)*89 + 13
- nano := time.Now().UnixNano()
- var nanostr string = strconv.FormatInt(nano, 10)
- var temp3 string = nanostr[11:]
- var temp4 string = "6"
- var temp5 int = rand.Intn(9)*7 + 17
- var code string = "66" + strconv.Itoa(temp1) + temp4 + strconv.Itoa(temp2) + temp3 + strconv.Itoa(temp5)
- return code
- }
-
- // GetFiveSeconds 获取 5 秒钟的时间
- func GetFiveSeconds(t time.Time) string {
- str := t.Format("20060102150405")
- strLen := len(str)
-
- lastNum, _ := strconv.Atoi(str[strLen-1:])
- if lastNum < 5 {
- lastNum = 0
- } else {
- lastNum = 5
- }
-
- return str[:strLen-1] + strconv.Itoa(lastNum)
- }
-
- // 当前运行环境
- var processEnv string
- var appRoot string
-
- // GetAppRoot 获取系统根目录
- func GetAppRoot() string {
- if appRoot != "" {
- return appRoot
- }
-
- if processEnv == "" {
- for _, arg := range os.Args {
- if strings.Index(arg, "-test.run") > -1 {
- processEnv = "test"
- break
- }
- }
-
- if processEnv == "" {
- processEnv = "production"
- }
- }
-
- if processEnv == "test" {
- _, file, _, _ := runtime.Caller(1)
- appRoot, _ = filepath.Abs(filepath.Dir(filepath.Join(file, ".."+string(filepath.Separator))))
- } else {
- appRoot, _ = filepath.Abs(filepath.Dir(os.Args[0]))
- }
-
- return appRoot
- }
|