util.go 4.0 KB

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