toolsLogic.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package utils
  2. import (
  3. "time"
  4. "github.com/dgrijalva/jwt-go"
  5. )
  6. var (
  7. sn int64 // 序列号占 12 位,十进制范围是 [ 0, 4095 ]
  8. lastTimeStamp int64 // 上次的时间戳(毫秒级), 1秒=1000毫秒, 1毫秒=1000微秒,1微秒=1000纳秒
  9. )
  10. func init() {
  11. lastTimeStamp = time.Now().UnixNano() / 1000000
  12. }
  13. type Claims struct {
  14. IsAdmin int `json:"isAdmin"`
  15. UserId int `json:"userId"`
  16. UserName string `json:"userName"`
  17. jwt.StandardClaims
  18. }
  19. type ToolsLogic struct {
  20. }
  21. // GetOnlyId
  22. // @函数名:GetOnlyId
  23. // @函数功能描述: 获取唯一id
  24. // @对象名:c
  25. // @参数定义:appId
  26. // @返回值:int64
  27. //
  28. func (c *ToolsLogic) GetOnlyId(appId int64) int64 {
  29. if appId == 0 {
  30. return 0
  31. }
  32. nowTime := time.Now().UnixNano() / 1000000
  33. appId = appId & 0x3FF
  34. sfOne := nowTime << 22
  35. sfTwo := appId << 12
  36. //每次累加,减小时间回滚发生重复的概率
  37. sn++
  38. sfThree := sn & 0xFFF
  39. return sfOne | sfTwo | sfThree
  40. }
  41. // ParseOnlyId
  42. // @函数名:ParseOnlyId
  43. // @函数功能描述: 通过唯一id获取appId
  44. // @对象名:c
  45. // @参数定义:mid
  46. // @返回值:appId
  47. //
  48. func (c *ToolsLogic) ParseOnlyId(mid int64) (appId int64) {
  49. if mid == 0 {
  50. return 0
  51. }
  52. appId = mid & 0x3FF000
  53. return appId >> 12
  54. }
  55. // ParseToken
  56. // @函数名:ParseToken
  57. // @函数功能描述: 传入token和公钥文件路径
  58. // @对象名:c
  59. // @参数定义:token
  60. // @参数定义:path
  61. //
  62. func (c *ToolsLogic) ParseToken(token, path string) (*Claims, error) {
  63. var (
  64. resp = new(Claims)
  65. )
  66. err := RSADeToken(token, path, resp)
  67. if err != nil {
  68. return resp, err
  69. }
  70. return resp, nil
  71. }
  72. func (c *ToolsLogic) EncryptMsg(message []byte, key []byte, isDebug ...bool) (string, error) {
  73. return EncryptByAes(message, key, isDebug...)
  74. }
  75. func (c *ToolsLogic) DecryptMsg(message string, key []byte, isDebug ...bool) ([]byte, error) {
  76. return DecryptByAes(message, key, isDebug...)
  77. }