| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- package tools
- import (
- "errors"
- "fmt"
- "log"
- "runtime"
- "strconv"
- "strings"
- "gorm.io/gorm"
- "github.com/gin-gonic/gin"
- "github.com/google/uuid"
- "github.com/spf13/cast"
- "golang.org/x/crypto/bcrypt"
- )
- func CompareHashAndPassword(e string, p string) (bool, error) {
- err := bcrypt.CompareHashAndPassword([]byte(e), []byte(p))
- if err != nil {
- return false, err
- }
- return true, nil
- }
- // Assert 条件断言
- // 当断言条件为 假 时触发 panic
- // 对于当前请求不会再执行接下来的代码,并且返回指定格式的错误信息和错误码
- func Assert(condition bool, msg string, code ...int) {
- if !condition {
- statusCode := 200
- if len(code) > 0 {
- statusCode = code[0]
- }
- panic("CustomError#" + strconv.Itoa(statusCode) + "#" + msg)
- }
- }
- // HasError 错误断言
- // 当 error 不为 nil 时触发 panic
- // 对于当前请求不会再执行接下来的代码,并且返回指定格式的错误信息和错误码
- // 若 msg 为空,则默认为 error 中的内容
- func HasError(err error, msg string, code ...int) {
- if err != nil {
- statusCode := 200
- if len(code) > 0 {
- statusCode = code[0]
- }
- if msg == "" {
- msg = err.Error()
- }
- _, file, line, _ := runtime.Caller(1)
- log.Printf("%s:%v error: %#v", file, line, err)
- panic("CustomError#" + strconv.Itoa(statusCode) + "#" + msg)
- }
- }
- // GenerateMsgIDFromContext 生成msgID
- func GenerateMsgIDFromContext(c *gin.Context) string {
- var msgID string
- data, ok := c.Get("msgID")
- if !ok {
- msgID = uuid.New().String()
- c.Set("msgID", msgID)
- return msgID
- }
- msgID = cast.ToString(data)
- return msgID
- }
- // GetOrm 获取orm连接
- func GetOrm(c *gin.Context) (*gorm.DB, error) {
- msgID := GenerateMsgIDFromContext(c)
- idb, exist := c.Get("db")
- if !exist {
- return nil, errors.New(fmt.Sprintf("msgID[%s], db connect not exist", msgID))
- }
- switch idb.(type) {
- case *gorm.DB:
- //新增操作
- return idb.(*gorm.DB), nil
- default:
- return nil, errors.New(fmt.Sprintf("msgID[%s], db connect not exist", msgID))
- }
- }
- //params: stamp second
- func TimeStamp2Time(stamp int) string {
- var timeStr string
- hour := stamp / (60 * 60)
- minute := (stamp - hour*60*60) / 60
- second := stamp - hour*60*60 - minute*60
- hourStr := strconv.Itoa(hour)
- if len(hourStr) == 1 {
- hourStr = "0" + hourStr
- }
- minuteStr := strconv.Itoa(minute)
- if len(minuteStr) == 1 {
- minuteStr = "0" + minuteStr
- }
- secondStr := strconv.Itoa(second)
- if len(secondStr) == 1 {
- secondStr = "0" + secondStr
- }
- timeStr = fmt.Sprintf("%s:%s:%s", hourStr, minuteStr, secondStr)
- return timeStr
- }
- //params: time string
- func Time2TimeStamp(timeStr string) int {
- timeArry := strings.Split(timeStr, ":")
- if len(timeArry) != 3 {
- return -1
- }
- second, _ := strconv.Atoi(timeArry[2])
- minute, _ := strconv.Atoi(timeArry[1])
- hour, _ := strconv.Atoi(timeArry[0])
- timeStamp := second + minute*60 + hour*60*60
- return timeStamp
- }
|