2023-12-21 22:17:40 +08:00
|
|
|
|
package util
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"crypto/md5"
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"fmt"
|
|
|
|
|
"io"
|
|
|
|
|
"reflect"
|
|
|
|
|
"service/library/logger"
|
|
|
|
|
"strings"
|
2024-01-03 16:16:41 +08:00
|
|
|
|
"time"
|
2023-12-21 22:17:40 +08:00
|
|
|
|
|
|
|
|
|
"github.com/qiniu/qmgo"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func ToJson(v any) string {
|
|
|
|
|
str, err := json.Marshal(v)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Info("%v marsha failed, err: %v", v, err)
|
|
|
|
|
}
|
|
|
|
|
return string(str)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func StringToMd5(s string) string {
|
|
|
|
|
m := md5.New()
|
|
|
|
|
_, _ = io.WriteString(m, s)
|
|
|
|
|
return fmt.Sprintf("%x", m.Sum(nil))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 将实体类结构体指针转为bson.M,采用反射
|
|
|
|
|
func EntityToM(p any) qmgo.M {
|
|
|
|
|
set := qmgo.M{}
|
|
|
|
|
pType := reflect.TypeOf(p).Elem()
|
|
|
|
|
pVal := reflect.ValueOf(p).Elem()
|
|
|
|
|
for i := 0; i < pType.NumField(); i++ {
|
|
|
|
|
name := pType.Field(i).Tag.Get("bson")
|
|
|
|
|
field := pVal.Field(i)
|
|
|
|
|
if name != "_id" && !field.IsNil() {
|
|
|
|
|
value := field.Elem().Interface()
|
|
|
|
|
set[name] = value
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return set
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func StringsContains(elems []string, v string) bool {
|
|
|
|
|
for _, s := range elems {
|
|
|
|
|
if s == v {
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 下划线转大写驼峰
|
|
|
|
|
func UderscoreToUpperCamelCase(s string) string {
|
|
|
|
|
s = strings.Replace(s, "_", " ", -1)
|
|
|
|
|
s = strings.Title(s)
|
|
|
|
|
return strings.Replace(s, " ", "", -1)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 数组转sql数组 []int{1, 2, 3) --> 1,2,3
|
|
|
|
|
func Convert2SqlArr(a ...any) string {
|
|
|
|
|
return strings.Replace(strings.Trim(fmt.Sprint(a), "[]"), " ", ",", -1)
|
|
|
|
|
}
|
2024-01-03 16:16:41 +08:00
|
|
|
|
|
|
|
|
|
// 获取整点时间戳
|
|
|
|
|
func GetHourStartTimeStamp(t time.Time) int64 {
|
|
|
|
|
loc, _ := time.LoadLocation("Asia/Shanghai")
|
|
|
|
|
timeStr := fmt.Sprintf("%02d-%02d-%02d %02d:00:00", t.Year(), t.Month(), t.Day(), t.Hour())
|
|
|
|
|
duetimecst, err := time.ParseInLocation("2006-1-2 15:04:05", timeStr, loc)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Error("parse error : %v", err)
|
|
|
|
|
}
|
|
|
|
|
return duetimecst.Unix()
|
|
|
|
|
}
|