utils.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package tools
  2. import (
  3. "errors"
  4. "fmt"
  5. "log"
  6. "runtime"
  7. "strconv"
  8. "strings"
  9. "gorm.io/gorm"
  10. "github.com/gin-gonic/gin"
  11. "github.com/google/uuid"
  12. "github.com/spf13/cast"
  13. "golang.org/x/crypto/bcrypt"
  14. )
  15. func CompareHashAndPassword(e string, p string) (bool, error) {
  16. err := bcrypt.CompareHashAndPassword([]byte(e), []byte(p))
  17. if err != nil {
  18. return false, err
  19. }
  20. return true, nil
  21. }
  22. // Assert 条件断言
  23. // 当断言条件为 假 时触发 panic
  24. // 对于当前请求不会再执行接下来的代码,并且返回指定格式的错误信息和错误码
  25. func Assert(condition bool, msg string, code ...int) {
  26. if !condition {
  27. statusCode := 200
  28. if len(code) > 0 {
  29. statusCode = code[0]
  30. }
  31. panic("CustomError#" + strconv.Itoa(statusCode) + "#" + msg)
  32. }
  33. }
  34. // HasError 错误断言
  35. // 当 error 不为 nil 时触发 panic
  36. // 对于当前请求不会再执行接下来的代码,并且返回指定格式的错误信息和错误码
  37. // 若 msg 为空,则默认为 error 中的内容
  38. func HasError(err error, msg string, code ...int) {
  39. if err != nil {
  40. statusCode := 200
  41. if len(code) > 0 {
  42. statusCode = code[0]
  43. }
  44. if msg == "" {
  45. msg = err.Error()
  46. }
  47. _, file, line, _ := runtime.Caller(1)
  48. log.Printf("%s:%v error: %#v", file, line, err)
  49. panic("CustomError#" + strconv.Itoa(statusCode) + "#" + msg)
  50. }
  51. }
  52. // GenerateMsgIDFromContext 生成msgID
  53. func GenerateMsgIDFromContext(c *gin.Context) string {
  54. var msgID string
  55. data, ok := c.Get("msgID")
  56. if !ok {
  57. msgID = uuid.New().String()
  58. c.Set("msgID", msgID)
  59. return msgID
  60. }
  61. msgID = cast.ToString(data)
  62. return msgID
  63. }
  64. // GetOrm 获取orm连接
  65. func GetOrm(c *gin.Context) (*gorm.DB, error) {
  66. msgID := GenerateMsgIDFromContext(c)
  67. idb, exist := c.Get("db")
  68. if !exist {
  69. return nil, errors.New(fmt.Sprintf("msgID[%s], db connect not exist", msgID))
  70. }
  71. switch idb.(type) {
  72. case *gorm.DB:
  73. //新增操作
  74. return idb.(*gorm.DB), nil
  75. default:
  76. return nil, errors.New(fmt.Sprintf("msgID[%s], db connect not exist", msgID))
  77. }
  78. }
  79. //params: stamp second
  80. func TimeStamp2Time(stamp int) string {
  81. var timeStr string
  82. hour := stamp / (60 * 60)
  83. minute := (stamp - hour*60*60) / 60
  84. second := stamp - hour*60*60 - minute*60
  85. hourStr := strconv.Itoa(hour)
  86. if len(hourStr) == 1 {
  87. hourStr = "0" + hourStr
  88. }
  89. minuteStr := strconv.Itoa(minute)
  90. if len(minuteStr) == 1 {
  91. minuteStr = "0" + minuteStr
  92. }
  93. secondStr := strconv.Itoa(second)
  94. if len(secondStr) == 1 {
  95. secondStr = "0" + secondStr
  96. }
  97. timeStr = fmt.Sprintf("%s:%s:%s", hourStr, minuteStr, secondStr)
  98. return timeStr
  99. }
  100. //params: time string
  101. func Time2TimeStamp(timeStr string) int {
  102. timeArry := strings.Split(timeStr, ":")
  103. if len(timeArry) != 3 {
  104. return -1
  105. }
  106. second, _ := strconv.Atoi(timeArry[2])
  107. minute, _ := strconv.Atoi(timeArry[1])
  108. hour, _ := strconv.Atoi(timeArry[0])
  109. timeStamp := second + minute*60 + hour*60*60
  110. return timeStamp
  111. }