mirror of
https://gitee.com/XM-GO/PandaX.git
synced 2026-05-07 04:21:25 +08:00
iot init
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package tool
|
||||
|
||||
import (
|
||||
"log"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
@@ -15,3 +17,66 @@ func ToCamelCase(s string) string {
|
||||
}
|
||||
return strings.Join(words, "")
|
||||
}
|
||||
|
||||
func RegexpKey(str string) []string {
|
||||
// 定义正则表达式
|
||||
re := regexp.MustCompile(`\${([^}]+)}`)
|
||||
matches := re.FindAllStringSubmatch(str, -1)
|
||||
// 提取匹配项的内容
|
||||
var results []string
|
||||
for _, match := range matches {
|
||||
if len(match) >= 2 {
|
||||
results = append(results, match[1])
|
||||
}
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
func RegexpGetSql(str string) string {
|
||||
// 定义正则表达式
|
||||
re := regexp.MustCompile(`\${([^}]+)}`)
|
||||
return re.ReplaceAllString(str, "?")
|
||||
}
|
||||
|
||||
func GetStructKeys(obj interface{}) []string {
|
||||
val := reflect.ValueOf(obj)
|
||||
typ := val.Type()
|
||||
|
||||
keys := make([]string, 0, typ.NumField())
|
||||
|
||||
for i := 0; i < typ.NumField(); i++ {
|
||||
field := typ.Field(i)
|
||||
keys = append(keys, field.Name)
|
||||
}
|
||||
|
||||
return keys
|
||||
}
|
||||
|
||||
func GetMapKeys(obj map[string]interface{}) []string {
|
||||
keys := make([]string, 0, len(obj))
|
||||
|
||||
for key := range obj {
|
||||
keys = append(keys, key)
|
||||
}
|
||||
|
||||
return keys
|
||||
}
|
||||
|
||||
func CheckInterfaceIsArray(data interface{}) (bool, []map[string]interface{}) {
|
||||
if data == nil {
|
||||
return false, nil
|
||||
}
|
||||
valueType := reflect.TypeOf(data)
|
||||
// 判断类型是否为数组或切片
|
||||
if valueType.Kind() == reflect.Slice || valueType.Kind() == reflect.Array {
|
||||
var maps []map[string]interface{}
|
||||
for _, item := range data.([]interface{}) {
|
||||
log.Println("item", item)
|
||||
if m, ok := item.(map[string]interface{}); ok {
|
||||
maps = append(maps, m)
|
||||
}
|
||||
}
|
||||
return true, maps
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
80
pkg/tool/conv.go
Normal file
80
pkg/tool/conv.go
Normal file
@@ -0,0 +1,80 @@
|
||||
package tool
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// SnakeString snake string, XxYy to xx_yy , XxYY to xx_y_y
|
||||
func SnakeString(s string) string {
|
||||
data := make([]byte, 0, len(s)*2)
|
||||
j := false
|
||||
num := len(s)
|
||||
for i := 0; i < num; i++ {
|
||||
d := s[i]
|
||||
if i > 0 && d >= 'A' && d <= 'Z' && j {
|
||||
data = append(data, '_')
|
||||
}
|
||||
if d != '_' {
|
||||
j = true
|
||||
}
|
||||
data = append(data, d)
|
||||
}
|
||||
return strings.ToLower(string(data))
|
||||
}
|
||||
|
||||
// CamelString camel string, xx_yy to XxYy
|
||||
func CamelString(s string) string {
|
||||
data := make([]byte, 0, len(s))
|
||||
flag, num := true, len(s)-1
|
||||
for i := 0; i <= num; i++ {
|
||||
d := s[i]
|
||||
if d == '_' {
|
||||
flag = true
|
||||
continue
|
||||
} else if flag {
|
||||
if d >= 'a' && d <= 'z' {
|
||||
d = d - 32
|
||||
}
|
||||
flag = false
|
||||
}
|
||||
data = append(data, d)
|
||||
}
|
||||
return string(data)
|
||||
}
|
||||
|
||||
func FirstLowCamelString(s string) string {
|
||||
data := make([]byte, 0, len(s))
|
||||
flag, num := true, len(s)-1
|
||||
for i := 0; i <= num; i++ {
|
||||
d := s[i]
|
||||
if d == '_' {
|
||||
flag = true
|
||||
continue
|
||||
} else if flag {
|
||||
if d >= 'a' && d <= 'z' {
|
||||
d = d - 32
|
||||
}
|
||||
flag = false
|
||||
}
|
||||
data = append(data, d)
|
||||
}
|
||||
if len(data) > 0 && data[0] >= 65 && data[0] <= 90 {
|
||||
data[0] = data[0] + 32
|
||||
}
|
||||
return string(data)
|
||||
}
|
||||
|
||||
func MapToStruct(m map[string]interface{}, s interface{}) error {
|
||||
data, err := json.Marshal(m)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = json.Unmarshal(data, s)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
62
pkg/tool/device.go
Normal file
62
pkg/tool/device.go
Normal file
@@ -0,0 +1,62 @@
|
||||
package tool
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"github.com/google/uuid"
|
||||
"pandax/pkg/global"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type DeviceAuth struct {
|
||||
User string `json:"user"`
|
||||
DeviceId string `json:"device_id"`
|
||||
DeviceType string `json:"device_type"`
|
||||
ProductId string `json:"product_id"`
|
||||
RuleChainId string `json:"rule_chain_id"`
|
||||
Name string `json:"name"`
|
||||
Token string `json:"token"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
ExpiredAt int64 `json:"expired_at"`
|
||||
}
|
||||
|
||||
func (entity *DeviceAuth) CreateDeviceToken() (err error) {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (entity *DeviceAuth) GetDeviceToken(key string) error {
|
||||
if err := global.RedisDb.Get(key, entity); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (token *DeviceAuth) MD5ID() string {
|
||||
buf := bytes.NewBufferString(token.DeviceId)
|
||||
buf.WriteString(token.DeviceType)
|
||||
buf.WriteString(strconv.FormatInt(token.CreatedAt, 10))
|
||||
access := base64.URLEncoding.EncodeToString([]byte(uuid.NewMD5(uuid.Must(uuid.NewRandom()), buf.Bytes()).String()))
|
||||
access = strings.TrimRight(access, "=")
|
||||
return access
|
||||
}
|
||||
func (token *DeviceAuth) GetMarshal() string {
|
||||
marshal, _ := json.Marshal(*token)
|
||||
return string(marshal)
|
||||
}
|
||||
|
||||
func (token *DeviceAuth) GetUnMarshal(data []byte) error {
|
||||
return json.Unmarshal(data, token)
|
||||
}
|
||||
|
||||
// 序列化
|
||||
func (m *DeviceAuth) MarshalBinary() (data []byte, err error) {
|
||||
return json.Marshal(m)
|
||||
}
|
||||
|
||||
// 反序列化
|
||||
func (m *DeviceAuth) UnmarshalBinary(data []byte) error {
|
||||
return json.Unmarshal(data, m)
|
||||
}
|
||||
@@ -3,7 +3,6 @@ package tool
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/xuri/excelize/v2"
|
||||
"pandax/apps/visual/entity"
|
||||
)
|
||||
|
||||
// 读取数据表
|
||||
@@ -40,6 +39,7 @@ func ReadExcel(filename string) ([]string, []map[string]interface{}) {
|
||||
return cols, ret
|
||||
}
|
||||
|
||||
/*
|
||||
func ReadExcelByFilter(filename string, data entity.DataSetDataReq) ([]string, []map[string]interface{}) {
|
||||
dataDs := make([]string, 0)
|
||||
for _, ds := range data.DataDs {
|
||||
@@ -87,3 +87,4 @@ func ReadExcelByFilter(filename string, data entity.DataSetDataReq) ([]string, [
|
||||
}
|
||||
return cols, ret
|
||||
}
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user