|
|
package CommonUtil
|
|
|
|
|
|
import (
|
|
|
"bufio"
|
|
|
"bytes"
|
|
|
"crypto/md5"
|
|
|
"crypto/sha1"
|
|
|
"dsSzxy/Utils/ConfigUtil"
|
|
|
"encoding/hex"
|
|
|
"encoding/json"
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
"github.com/astaxie/beego/httplib"
|
|
|
uuid "github.com/satori/go.uuid"
|
|
|
"net/http"
|
|
|
|
|
|
"log"
|
|
|
|
|
|
"github.com/spf13/viper"
|
|
|
"math/rand"
|
|
|
|
|
|
"os"
|
|
|
"os/exec"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
/**
|
|
|
功能:获取UUID
|
|
|
作者:黄海
|
|
|
时间:2020-02-03
|
|
|
*/
|
|
|
func GetUUID() string {
|
|
|
u2 := strings.ToUpper(uuid.NewV4().String())
|
|
|
return u2
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:将JSON字符串转化为map数组
|
|
|
作者: 黄海
|
|
|
时间:2020-04-17
|
|
|
*/
|
|
|
func ConvertJsonStringToMapArray(data string) []map[string]interface{} {
|
|
|
var m = make([]map[string]interface{}, 0)
|
|
|
str := []byte(data)
|
|
|
json.Unmarshal(str, &m)
|
|
|
return m
|
|
|
}
|
|
|
|
|
|
func MD5(v string) string {
|
|
|
d := []byte(v)
|
|
|
m := md5.New()
|
|
|
m.Write(d)
|
|
|
return hex.EncodeToString(m.Sum(nil))
|
|
|
}
|
|
|
|
|
|
// 判断所给路径文件/文件夹是否存在
|
|
|
func Exists(path string) bool {
|
|
|
_, err := os.Stat(path) //os.Stat获取文件信息
|
|
|
if err != nil {
|
|
|
if os.IsExist(err) {
|
|
|
return true
|
|
|
}
|
|
|
return false
|
|
|
}
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
//json字符串转map
|
|
|
func JsonStringToMap(jsonStr string) (map[string]interface{}, error) {
|
|
|
m := make(map[string]interface{})
|
|
|
err := json.Unmarshal([]byte(jsonStr), &m)
|
|
|
if err != nil {
|
|
|
fmt.Printf("Unmarshal with error: %+v\n", err)
|
|
|
return nil, err
|
|
|
}
|
|
|
return m, nil
|
|
|
}
|
|
|
|
|
|
//将字符串转为int32整数
|
|
|
func ConvertStringToInt32(s string) int32 {
|
|
|
i, _ := strconv.Atoi(s)
|
|
|
return int32(i)
|
|
|
}
|
|
|
|
|
|
//将整数64转为字符串
|
|
|
func ConvertInt64ToString(i int64) string {
|
|
|
s := strconv.FormatInt(i, 10)
|
|
|
return s
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能: 获取扩展名
|
|
|
*/
|
|
|
func Ext(path string) string {
|
|
|
for i := len(path) - 1; i >= 0 && path[i] != '/'; i-- {
|
|
|
if path[i] == '.' {
|
|
|
return path[i:]
|
|
|
}
|
|
|
}
|
|
|
return ""
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:带回显的执行DOS命令
|
|
|
作者:黄海
|
|
|
时间:2020-05-18
|
|
|
*/
|
|
|
func Exec(name string, args ...string) error {
|
|
|
cmd := exec.Command(name, args...)
|
|
|
stderr, _ := cmd.StderrPipe()
|
|
|
stdout, _ := cmd.StdoutPipe()
|
|
|
if err := cmd.Start(); err != nil {
|
|
|
log.Println("exec the cmd ", name, " failed")
|
|
|
return err
|
|
|
}
|
|
|
// 正常日志
|
|
|
logScan := bufio.NewScanner(stdout)
|
|
|
go func() {
|
|
|
for logScan.Scan() {
|
|
|
log.Println(logScan.Text())
|
|
|
}
|
|
|
}()
|
|
|
// 错误日志
|
|
|
errBuf := bytes.NewBufferString("")
|
|
|
scan := bufio.NewScanner(stderr)
|
|
|
for scan.Scan() {
|
|
|
s := scan.Text()
|
|
|
log.Println("", s)
|
|
|
errBuf.WriteString(s)
|
|
|
errBuf.WriteString("\n")
|
|
|
}
|
|
|
// 等待命令执行完
|
|
|
cmd.Wait()
|
|
|
if !cmd.ProcessState.Success() {
|
|
|
// 执行失败,返回错误信息
|
|
|
return errors.New(errBuf.String())
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:获取当前的时间字符串
|
|
|
作者:黄海
|
|
|
时间:2020-02-21
|
|
|
*/
|
|
|
func GetCurrentTime() string {
|
|
|
timeStr := time.Now().Format("2006-01-02 15:04:05")
|
|
|
//当前时间的字符串,2006-01-02 15:04:05据说是golang的诞生时间,固定写法
|
|
|
return timeStr
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:获取6位随机数
|
|
|
作者:吴缤
|
|
|
*/
|
|
|
func GetSixRandom() string {
|
|
|
return fmt.Sprintf("%v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000))
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:获取毫秒时间戳
|
|
|
作者:吴缤
|
|
|
*/
|
|
|
func GetTimeStamp() string {
|
|
|
return fmt.Sprintf("%v", time.Now().UnixNano()/1e6)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:字符串SHA1加密
|
|
|
作者:吴缤
|
|
|
*/
|
|
|
func SHA1(s string) string {
|
|
|
o := sha1.New()
|
|
|
o.Write([]byte(s))
|
|
|
return hex.EncodeToString(o.Sum(nil))
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:获取融云配置信息
|
|
|
作者:吴缤
|
|
|
*/
|
|
|
func GetRongYunConfig() (map[string]string, error) {
|
|
|
m := make(map[string]string)
|
|
|
|
|
|
viper.SetConfigFile(ConfigUtil.RongYunConfigPath)
|
|
|
if err := viper.ReadInConfig(); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
m["suffix"] = viper.GetString("rong_server_name")
|
|
|
m["app_key"] = viper.GetString("rong_key")
|
|
|
m["app_secret"] = viper.GetString("rong_secret")
|
|
|
|
|
|
return m, nil
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:判断是不是合法的日期格式
|
|
|
作者:黄海
|
|
|
时间:2020-03-23
|
|
|
*/
|
|
|
func IsDate(date string) bool {
|
|
|
_, err := time.Parse("2006-01-02 15:04:05", date)
|
|
|
if err != nil {
|
|
|
return false
|
|
|
} else {
|
|
|
return true
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:是不是在指定的数组中存在
|
|
|
作者:黄海
|
|
|
时间:2020-05-15
|
|
|
*/
|
|
|
func IsContain(items []string, item string) bool {
|
|
|
for _, eachItem := range items {
|
|
|
if eachItem == item {
|
|
|
return true
|
|
|
}
|
|
|
}
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:获取蛇形命名的字符串
|
|
|
作者:黄海
|
|
|
时间:2020-01-22
|
|
|
*/
|
|
|
func GetSnakeCaseStr(str string) string {
|
|
|
array := strings.Split(str, "_")
|
|
|
var result string
|
|
|
for i := 0; i < len(array); i++ {
|
|
|
result = result + strings.ToUpper(array[i][0:1]) + array[i][1:]
|
|
|
}
|
|
|
return result
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:interface转string
|
|
|
作者:吴缤
|
|
|
日期:2021-09-06
|
|
|
*/
|
|
|
func ConvertInterfaceToString(inter interface{}) string {
|
|
|
str := fmt.Sprintf("%v", inter)
|
|
|
return str
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:请求云平台接口时增加Cookie
|
|
|
作者:吴缤
|
|
|
日期:2021-09-13
|
|
|
*/
|
|
|
func AddCookie(req *httplib.BeegoHTTPRequest, personIdCookie string, identityIdCookie string, tokenCookie string, qAccessTokenCookie string) {
|
|
|
req.SetCookie(&http.Cookie{
|
|
|
Name: "person_id",
|
|
|
Value: personIdCookie,
|
|
|
Path: "/",
|
|
|
Domain: ConfigUtil.DsidealYyDomain,
|
|
|
})
|
|
|
req.SetCookie(&http.Cookie{
|
|
|
Name: "identity_id",
|
|
|
Value: identityIdCookie,
|
|
|
Path: "/",
|
|
|
Domain: ConfigUtil.DsidealYyDomain,
|
|
|
})
|
|
|
req.SetCookie(&http.Cookie{
|
|
|
Name: "token",
|
|
|
Value: tokenCookie,
|
|
|
Path: "/",
|
|
|
Domain: ConfigUtil.DsidealYyDomain,
|
|
|
})
|
|
|
req.SetCookie(&http.Cookie{
|
|
|
Name: "q_access_token",
|
|
|
Value: qAccessTokenCookie,
|
|
|
Path: "/",
|
|
|
Domain: ConfigUtil.DsidealYyDomain,
|
|
|
})
|
|
|
}
|