util.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package entity
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "reflect"
  6. "sort"
  7. "strings"
  8. quitl "app.yhyue.com/moapp/jybase/common"
  9. "app.yhyue.com/moapp/jybase/redis"
  10. )
  11. const (
  12. Date_Full_Layout = "2006-01-02 15:04:05"
  13. //baseMysql
  14. SOCIALIZE_CHAT_SESSION = "socialize_chat_session"
  15. SOCIALIZE_MESSAGE = "socialize_message"
  16. SOCIALIZE_MESSAGE_MAILBOX = "socialize_message_mailbox"
  17. SOCIALIZE_TENANT_ROBOT = "socialize_tenant_robot"
  18. BASE_USER = "base_user"
  19. SOCIALIZE_CHAT_GROUP = "socialize_chat_group"
  20. SOCIALIZE_CHAT_GROUP_NOTICE = "socialize_chat_group_notice"
  21. SOCIALIZE_CHAT_GROUP_PERSON = "socialize_chat_group_person"
  22. BASE_POSITION = "base_position"
  23. User_message_list = "user_message_list"
  24. //mainMysql
  25. ENTNICHE_USER = "entniche_user"
  26. //mongo
  27. ENTNICHE_DELETE = "entniche_delete"
  28. SOCIALIZE_APPRAISE = "socialize_message_appraise"
  29. SOCIALIZE_SUMMARY = "socialize_summary"
  30. )
  31. const (
  32. SUCCESS_CODE = int64(0)
  33. ERROR_CODE = int64(1)
  34. )
  35. const redisModule = "msgCount"
  36. func SafeConvert2String(obj interface{}) string {
  37. if obj != nil {
  38. return obj.(string)
  39. }
  40. return ""
  41. }
  42. // in数据处理
  43. func Inhandle(data *[]map[string]interface{}) (messId string) {
  44. if len(*data) == 0 {
  45. messId = "''"
  46. return
  47. }
  48. for k, m := range *data {
  49. if k > 0 {
  50. messId += `,`
  51. }
  52. messId += "'" + quitl.InterfaceToStr(m["messageId"]) + "'"
  53. }
  54. return
  55. }
  56. type SubPush struct {
  57. Data map[string]interface{} `json:"data"`
  58. Count int `json:"count"`
  59. }
  60. // 获取redis key
  61. func todayKey(userType int64, userId int64) string {
  62. return fmt.Sprintf("%s_%d_%d", "messageCount", userType, userId)
  63. }
  64. func GetData(userType int64, userId int64) (*SubPush, error) {
  65. pc_a, err := redis.GetNewBytes(redisModule, todayKey(userType, userId))
  66. if err != nil {
  67. return nil, err
  68. }
  69. if pc_a == nil {
  70. return nil, nil
  71. }
  72. var p *SubPush
  73. if err := json.Unmarshal(*pc_a, &p); err != nil {
  74. return nil, err
  75. }
  76. return p, nil
  77. }
  78. func SetData(userType int64, userId int64, data map[string]interface{}, survivalTime int) {
  79. redis.Put(redisModule, todayKey(userType, userId), data, survivalTime)
  80. }
  81. func IntJoin(elems []int64, sep string) string {
  82. switch len(elems) {
  83. case 0:
  84. return ""
  85. case 1:
  86. return quitl.InterfaceToStr(elems[0])
  87. }
  88. var b strings.Builder
  89. b.Grow(len(elems))
  90. for k, s := range elems {
  91. if k > 0 {
  92. b.WriteString(sep)
  93. }
  94. b.WriteString(quitl.InterfaceToStr(s))
  95. }
  96. return b.String()
  97. }
  98. // 排序 排序键必须为数字类型
  99. type SortBy struct {
  100. Data []map[string]interface{}
  101. Sortkey string
  102. }
  103. func (a SortBy) Len() int { return len(a.Data) }
  104. func (a SortBy) Swap(i, j int) {
  105. a.Data[i], a.Data[j] = a.Data[j], a.Data[i]
  106. }
  107. func (a SortBy) Less(i, j int) bool {
  108. //return Float64(a.Data[i][a.Sortkey]) < Float64(a.Data[j][a.Sortkey])
  109. m := a.Data[i][a.Sortkey]
  110. n := a.Data[j][a.Sortkey]
  111. w := reflect.ValueOf(m)
  112. v := reflect.ValueOf(n)
  113. switch v.Kind() {
  114. case reflect.String:
  115. return w.String() < v.String()
  116. case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  117. return w.Int() < v.Int()
  118. case reflect.Float64, reflect.Float32:
  119. return w.Float() < v.Float()
  120. default:
  121. return fmt.Sprintf("%v", w) < fmt.Sprintf("%v", v)
  122. }
  123. }
  124. // 根据指定字符排序
  125. //
  126. // m := []map[string]int{
  127. // {"k": 2},
  128. // {"k": 1},
  129. // {"k": 3},
  130. // }
  131. //
  132. // customer.SortData(&m, "k", true)
  133. // ture 倒序3, 2, 1
  134. // fmt.Println(m)
  135. func SortData(data interface{}, sortkey string, reverse bool) {
  136. //func SortData(data interface{}, sortkey string, reverse bool) {
  137. var db []map[string]interface{}
  138. err := quitl.Bind(data, &db)
  139. if err != nil {
  140. fmt.Println(err)
  141. return
  142. }
  143. stb := SortBy{db, sortkey}
  144. if !reverse {
  145. sort.Sort(stb)
  146. } else {
  147. sort.Sort(sort.Reverse(stb))
  148. }
  149. err = quitl.Bind(stb.Data, data)
  150. if err != nil {
  151. fmt.Println(err)
  152. }
  153. }