service/bizcommon/util/util.go

86 lines
1.9 KiB
Go
Raw Normal View History

2023-12-21 22:17:40 +08:00
package util
import (
"crypto/md5"
"encoding/json"
"fmt"
"io"
"reflect"
"service/library/logger"
"strings"
"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")
2024-01-10 00:18:57 +08:00
if name != "" {
field := pVal.Field(i)
if name != "_id" && !field.IsNil() {
value := field.Elem().Interface()
set[name] = value
}
2023-12-21 22:17:40 +08:00
}
}
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)
}
// 获取整点时间戳
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()
}
2024-01-08 22:38:18 +08:00
// 获取今天0点
func GetTodayZeroTime() time.Time {
currentTime := time.Now()
zeroTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 0, 0, 0, 0, currentTime.Location())
return zeroTime
}