123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442 |
- package lib
- import (
- "encoding/json"
- "fmt"
- "go.mongodb.org/mongo-driver/bson"
- "math/rand"
- "reflect"
- "strconv"
- "strings"
- "time"
- )
- func init() {
- }
- const Success = 200
- const Error = 201
- type JSONR struct {
- //必须的大写开头
- Code int16
- Msg string
- Data interface{} // 泛型
- }
- type JSONS struct {
- //必须的大写开头
- Code int16
- Msg string
- List interface{}
- Total int16
- PageIndex int
- PageSize int
- }
- func C_Page(list interface{}, PageIndex, PageSize int, Total int64) (Jsons JSONS) {
- Jsons.List = list
- Jsons.Total = int16(Total)
- Jsons.PageIndex = PageIndex
- Jsons.PageSize = PageSize
- //Jsons.PageSize = int16(math.Ceil(float64(Total) / float64(PageSize)))
- return Jsons
- }
- func Strval(value interface{}) string {
- var key string
- if value == nil {
- return key
- }
- switch value.(type) {
- case float64:
- ft := value.(float64)
- key = strconv.FormatFloat(ft, 'f', -1, 64)
- case float32:
- ft := value.(float32)
- key = strconv.FormatFloat(float64(ft), 'f', -1, 64)
- case int:
- it := value.(int)
- key = strconv.Itoa(it)
- case uint:
- it := value.(uint)
- key = strconv.Itoa(int(it))
- case int8:
- it := value.(int8)
- key = strconv.Itoa(int(it))
- case uint8:
- it := value.(uint8)
- key = strconv.Itoa(int(it))
- case int16:
- it := value.(int16)
- key = strconv.Itoa(int(it))
- case uint16:
- it := value.(uint16)
- key = strconv.Itoa(int(it))
- case int32:
- it := value.(int32)
- key = strconv.Itoa(int(it))
- case uint32:
- it := value.(uint32)
- key = strconv.Itoa(int(it))
- case int64:
- it := value.(int64)
- key = strconv.FormatInt(it, 10)
- case uint64:
- it := value.(uint64)
- key = strconv.FormatUint(it, 10)
- case string:
- key = value.(string)
- case []byte:
- key = string(value.([]byte))
- default:
- newValue, _ := json.Marshal(value)
- key = string(newValue)
- }
- return key
- }
- // 取一个
- func Take_one(a, b string) string {
- if len(a) == 0 {
- return b
- }
- return a
- }
- func To_int(value interface{}) int {
- var key int
- if value == nil {
- return key
- }
- switch value.(type) {
- case float64:
- key = int(value.(float64))
- case float32:
- key = int(value.(float32))
- case int:
- key = int(value.(int))
- case uint:
- key = int(value.(uint))
- case int8:
- key = int(value.(int8))
- case uint8:
- key = int(value.(uint8))
- case int16:
- key = int(value.(int16))
- case uint16:
- key = int(value.(uint16))
- case int32:
- key = int(value.(int32))
- case uint32:
- key = int(value.(uint32))
- case int64:
- key = int(value.(int64))
- case uint64:
- key = int(value.(uint64))
- case string:
- key, _ = strconv.Atoi(value.(string))
- case []byte:
- key, _ = strconv.Atoi(string(value.([]byte)))
- default:
- newValue, _ := json.Marshal(value)
- key, _ = strconv.Atoi(string(newValue))
- }
- return key
- }
- func To_int64(value interface{}) int64 {
- var key int64
- if value == nil {
- return key
- }
- switch value.(type) {
- case float64:
- key = int64(value.(float64))
- case float32:
- key = int64(value.(float32))
- case int:
- key = int64(value.(int))
- case uint:
- key = int64(value.(uint))
- case int8:
- key = int64(value.(int8))
- case uint8:
- key = int64(value.(uint8))
- case int16:
- key = int64(value.(int16))
- case uint16:
- key = int64(value.(uint16))
- case int32:
- key = int64(value.(int32))
- case uint32:
- key = int64(value.(uint32))
- case int64:
- key = int64(value.(int64))
- case uint64:
- key = int64(value.(uint64))
- case string:
- key, _ = strconv.ParseInt(value.(string), 10, 64)
- case []byte:
- key, _ = strconv.ParseInt(string(value.([]byte)), 10, 64)
- default:
- newValue, _ := json.Marshal(value)
- key, _ = strconv.ParseInt(string(newValue), 10, 64)
- }
- return key
- }
- func To_float32(value interface{}) float32 {
- var key float32
- if value == nil {
- return key
- }
- switch value.(type) {
- case float64:
- key = float32(value.(float64))
- case float32:
- key = float32(value.(float32))
- case int:
- key = float32(value.(int))
- case uint:
- key = float32(value.(uint))
- case int8:
- key = float32(value.(int8))
- case uint8:
- key = float32(value.(uint8))
- case int16:
- key = float32(value.(int16))
- case uint16:
- key = float32(value.(uint16))
- case int32:
- key = float32(value.(int32))
- case uint32:
- key = float32(value.(uint32))
- case int64:
- key = float32(value.(int64))
- case uint64:
- key = float32(value.(uint64))
- case string:
- key_float64, _ := strconv.ParseFloat(value.(string), 32/64)
- key = float32(key_float64)
- case []byte:
- key_float64, _ := strconv.ParseFloat(string(value.([]byte)), 32/64)
- key = float32(key_float64)
- default:
- newValue, _ := json.Marshal(value)
- key_float64, _ := strconv.ParseFloat(string(newValue), 32/64)
- key = float32(key_float64)
- }
- key_float64, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", key), 32/64)
- key = float32(key_float64)
- return key
- }
- func To_string(value interface{}) string {
- var key string
- if value == nil {
- return key
- }
- switch value.(type) {
- case float64:
- ft := value.(float64)
- key = strconv.FormatFloat(ft, 'f', -1, 64)
- case float32:
- ft := value.(float32)
- key = strconv.FormatFloat(float64(ft), 'f', -1, 64)
- case int:
- it := value.(int)
- key = strconv.Itoa(it)
- case uint:
- it := value.(uint)
- key = strconv.Itoa(int(it))
- case int8:
- it := value.(int8)
- key = strconv.Itoa(int(it))
- case uint8:
- it := value.(uint8)
- key = strconv.Itoa(int(it))
- case int16:
- it := value.(int16)
- key = strconv.Itoa(int(it))
- case uint16:
- it := value.(uint16)
- key = strconv.Itoa(int(it))
- case int32:
- it := value.(int32)
- key = strconv.Itoa(int(it))
- case uint32:
- it := value.(uint32)
- key = strconv.Itoa(int(it))
- case int64:
- it := value.(int64)
- key = strconv.FormatInt(it, 10)
- case uint64:
- it := value.(uint64)
- key = strconv.FormatUint(it, 10)
- case string:
- key = value.(string)
- case []byte:
- key = string(value.([]byte))
- default:
- newValue, _ := json.Marshal(value)
- key = string(newValue)
- }
- return key
- }
- func Random(min, max int) int {
- rand.Seed(time.Now().Unix()) //Seed生成的随机数
- return rand.Intn(max-min) + min
- }
- // #取得随机字符串:通过打乱slice来操作
- func GetRandstring(length int, char string, rand_x int64) string {
- if length < 1 {
- return ""
- }
- if len(char) <= 6 || len(char) <= length {
- char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
- }
- charArr := strings.Split(char, "")
- ran := rand.New(rand.NewSource(time.Now().Unix() + rand_x))
- l := len(charArr)
- for i := l - 1; i > 0; i-- {
- r := ran.Intn(i)
- charArr[r], charArr[i] = charArr[i], charArr[r]
- }
- rchar := charArr[:length]
- return strings.Join(rchar, "")
- }
- // 判断时间是当年的第几周
- func WeekByDate() string {
- t := time.Now()
- yearDay := t.YearDay()
- yearFirstDay := t.AddDate(0, 0, -yearDay+1)
- firstDayInWeek := int(yearFirstDay.Weekday())
- //今年第一周有几天
- firstWeekDays := 1
- if firstDayInWeek != 0 {
- firstWeekDays = 7 - firstDayInWeek + 1
- }
- var week int
- if yearDay <= firstWeekDays {
- week = 1
- } else {
- week = (yearDay-firstWeekDays)/7 + 2
- }
- return fmt.Sprintf("%d%02d", t.Year()%100, week) // 2253
- }
- // 将 时间格式为 bson.M 时间格式
- func MongdbJsonHtime(ArticleSlide bson.M) bson.M {
- bson_M := bson.M{}
- for key, value := range ArticleSlide {
- //logs.Println(reflect.TypeOf(value).String())
- switch reflect.TypeOf(value).String() {
- case "map[string]interface {}":
- jsonFind_M := bson.M{}
- data, _ := json.Marshal(value.(map[string]interface{}))
- err := json.Unmarshal(data, &jsonFind_M)
- if err == nil {
- bson_M[key] = MongdbJsonHtime(jsonFind_M)
- }
- break
- case "[]interface {}":
- bson_M_list := []bson.M{}
- for _, valuex := range value.([]interface{}) {
- if reflect.TypeOf(valuex).String() == "map[string]interface {}" {
- jsonFind_M := bson.M{}
- data, _ := json.Marshal(valuex.(map[string]interface{}))
- err := json.Unmarshal(data, &jsonFind_M)
- if err == nil {
- bson_M_list = append(bson_M_list, MongdbJsonHtime(jsonFind_M))
- }
- }
- }
- bson_M[key] = bson_M_list
- //return json_r
- break
- default:
- t1, err := time.ParseInLocation("2006-01-02 15:04:05", value.(string), time.Local) // +8 时差
- if err == nil {
- bson_M[key] = t1
- } else {
- bson_M[key] = value
- }
- break
- }
- }
- return bson_M
- }
- // 判断字符串是否在数组中
- func StringExistsInSlice(str string, slice []string) bool {
- for _, s := range slice {
- if s == str {
- return true
- }
- }
- return false
- }
- // 获取 JSON 指定位置 field : "AAA.BBB.d_name"
- func JsonGetField(data map[string]interface{}, field string) interface{} {
- fields := strings.Split(field, ".")
- result := data
- for _, f := range fields {
- if val, ok := result[f]; ok {
- switch val.(type) {
- case map[string]interface{}:
- result = val.(map[string]interface{})
- default:
- return val
- }
- } else {
- return nil
- }
- }
- return result
- }
- // 获取 JSON 指定位置 data:修改的field必须存在 field : "AAA.BBB.d_name" value: 123
- func JsonSetField(data map[string]interface{}, field string, value interface{}) {
- fields := strings.Split(field, ".")
- current := data
- for i, fieldv := range fields {
- if i == len(fields)-1 {
- current[fieldv] = value
- } else {
- next, ok := current[fieldv].(map[string]interface{})
- if !ok {
- return
- }
- current = next
- }
- }
- }
- // 复制一份 Map
- func CopyMap(inputMap map[string]interface{}) map[string]interface{} {
- copiedMap := make(map[string]interface{})
- for key, value := range inputMap {
- copiedMap[key] = value
- }
- return copiedMap
- }
|