util.go 4.1 KB

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