finclip-app-manager/infrastructure/utils/util.go

335 lines
9.1 KiB
Go
Raw Permalink Normal View History

2023-10-31 14:07:26 +08:00
package utils
import (
"context"
"crypto/md5"
"encoding/json"
"errors"
"finclip-app-manager/domain/entity"
"finclip-app-manager/domain/entity/proto"
"fmt"
"github.com/gin-gonic/gin"
"gitlab.finogeeks.club/finclip-backend-v2/finclip-mgo/bson"
"strconv"
"strings"
"time"
)
func GetNowMs() int64 {
return time.Now().UnixNano() / 1e6
}
func GetUserId(c *gin.Context) string {
return c.GetHeader(entity.ACCOUNT_ID_HEADER_KEY)
}
func GenMd5(s string) string {
return fmt.Sprintf("%x", md5.Sum([]byte(s)))
}
func Gen16Md5(s string) string {
return fmt.Sprintf("%x", md5.Sum([]byte(s)))[8:24]
}
func GetCommonParam(c *gin.Context) (bson.M, []string, bson.M, int, int, error) {
query := c.DefaultQuery("query", "{}")
sort := c.Query("sort")
searchFields := c.Query("searchFields")
searchText := c.Query("searchText")
pageSize := c.DefaultQuery("pageSize", "10")
pageNo := c.DefaultQuery("pageNo", "0")
pageSizeInt, err := strconv.Atoi(pageSize)
if err != nil {
return nil, nil, nil, 0, 0, err
}
pageNoInt, err := strconv.Atoi(pageNo)
if err != nil {
return nil, nil, nil, 0, 0, err
}
sortFilter, err := ParseSortString(sort)
if err != nil {
return nil, nil, nil, 0, 0, err
}
queryFilter, err := ParseQueryString(query)
if err != nil {
return nil, nil, nil, 0, 0, err
}
if searchFields != "" && searchText != "" {
searchFilter, err := ParseSearchString(searchText, searchFields)
if err != nil {
return nil, nil, nil, 0, 0, err
}
return queryFilter, sortFilter, searchFilter, pageSizeInt, pageNoInt, nil
}
return queryFilter, sortFilter, bson.M{}, pageSizeInt, pageNoInt, nil
}
func ParseSearchString(searchText string, searchFields string) (bson.M, error) {
fieldsArray := strings.Split(searchFields, ",")
result := []bson.M{}
for _, v := range fieldsArray {
regex := bson.RegEx{
Pattern: searchText,
Options: "i",
}
filter := bson.M{v: regex}
result = append(result, filter)
}
return bson.M{"$or": result}, nil
}
func ParseSortString(sortStr string) ([]string, error) {
if sortStr == "" {
return []string{}, nil
}
sortMap := bson.M{}
err := json.Unmarshal([]byte(sortStr), &sortMap)
if err != nil {
return nil, err
}
result := []string{}
for k, v := range sortMap {
value, ok := v.(float64)
if !ok {
return nil, errors.New(fmt.Sprint("Invalid sort value type: ", v))
}
if value == 1 {
result = append(result, k)
} else if value == -1 {
result = append(result, "-"+k)
} else {
return nil, errors.New(fmt.Sprint("Invalid sort value: ", v))
}
}
return result, nil
}
func ParseQueryString(queryStr string) (bson.M, error) {
result := bson.M{}
err := json.Unmarshal([]byte(queryStr), &result)
if err != nil {
return nil, err
}
return result, nil
}
func InArry(s string, arry []string) bool {
for _, v := range arry {
if v == s {
return true
}
}
return false
}
type MenuInfoFetcher interface {
GetMenuRspInfo(ctx context.Context) (*proto.MenuInfoRspData, error)
}
//func ConvertModelCustomDataToPb(
// ctx context.Context,
// rs MenuInfoFetcher,
// groupId string,
// data entity.CustomDataInfo,
// domainInfo *httpcall.DomainResponseData,
// sdkVer string,
//) (error, string, *pb.CustomData) {
// var err error
// hCaller := httpcall.NewClient()
// if domainInfo == nil {
// domainInfo, err = hCaller.GetDomainInfoByOrganId(ctx, groupId)
// if err != nil {
// logger.GetLogger().Errorf("InternalGetAppVerInfo ger domain info err:%s", err.Error())
// return err, utility.FS_GET_DOMAIN_INFO_ERROR, nil
// }
// }
//
// //menuRsp, err := GetMenuRspInfo(ctx)
// //if err != nil {
// // log.Errorf("GetDevInfo GetMenuRspInfo err:%+v", err)
// // return err, utility.FS_SERVER_ERR, nil
// //}
//
// apiData, err := hCaller.GetApiList(ctx, groupId)
// if err != nil {
// logger.GetLogger().Errorf("get api list err:%s", err.Error())
// return err, utility.FS_SERVER_ERR, nil
// }
// res := new(pb.CustomData)
// res.ApiInfo = nil
// if apiData != nil {
// res.ApiInfo = make([]*pb.ApiInfoRspData, 0)
// for _, v := range apiData {
// res.ApiInfo = append(res.ApiInfo, &pb.ApiInfoRspData{Url: v.Url, ApiName: v.ApiName})
// }
// }
// //if menuRsp != nil {
// // res.MenuInfo = new(pb.MenuInfoRspData)
// // res.MenuInfo.Total = int32(menuRsp.Total)
// // res.MenuInfo.List = make([]*pb.MenuInfoRspDataItem, 0)
// // for _, v := range menuRsp.List {
// // res.MenuInfo.List = append(res.MenuInfo.List, &pb.MenuInfoRspDataItem{Name: v.Name, Id: v.ID, Image: v.Image})
// // }
// //}
//
// res.DetailDescription = data.DetailDescription
// res.VersionDescription = data.VersionDescription
// res.SourceFile = make([]*pb.SourceFileData, 0)
// for _, v := range data.SourceFile {
// item := &pb.SourceFileData{
// FileMd5: v.FileMd5,
// Name: v.Name,
// UploadDate: v.UploadDate,
// Url: v.Url,
// SourceFileUrl: "",
// BasicPackVer: v.BasicPackVer,
// }
// if sdkVer != "" {
// isEncry := false
// if sdkVer == "cache" {
// isEncry = true
// } else {
// isEncry, err = GetSdkVerEncryResult(ctx, sdkVer)
// if err != nil {
// return err, utility.FS_SERVER_ERR, nil
// }
// }
// if isEncry && v.EncryptedUrl != "" && v.EncryptedFileMd5 != "" {
// item.Url = v.EncryptedUrl
// item.FileMd5 = v.EncryptedFileMd5
// }
// }
// for _, val := range v.EncryptPackages {
// item.Packages = append(item.Packages, &pb.Package{
// Root: val.Root,
// Name: val.Name,
// Pages: val.Pages,
// Independent: val.Independent,
// Filename: val.Filename,
// FileUrl: val.FileUrl,
// FileMd5: val.FileMd5,
// })
// }
// res.SourceFile = append(res.SourceFile, item)
// }
// res.AppRuntimeDomain = GetPbRuntimeDomains(domainInfo)
// return nil, "", res
//}
//func GetSdkVerEncryResult(ctx context.Context, sdkVer string) (bool, error) {
// var isEncry bool
// var err error
// /*isEncry, ok := cache.GetSdkVerResult(ctx, sdkVer)
// if ok {
// return isEncry, nil
// }*/
// switch config.Cfg.ReqType {
// case "grpc":
// isEncry, err = grpc.GetSdkVerEncrypted(ctx, sdkVer)
// default:
// isEncry, err = httpcall.NewClient().GetSdkVerIsEncrypted(ctx, sdkVer)
// }
// if err != nil {
// return false, err
// }
// //cache.SetSdkVerResult(ctx, sdkVer, isEncry)
// return isEncry, nil
//}
//func GetPbRuntimeDomains(domainInfo *httpcall.DomainResponseData) *pb.AppRuntimeDomain {
// result := &pb.AppRuntimeDomain{}
// result.Business = &pb.AppRuntimeDomain_Business{Domains: make([]string, 0)}
// if domainInfo.Business.Domains != nil {
// result.Business.Domains = domainInfo.Business.Domains
// }
// result.Service = &pb.AppRuntimeDomain_Service{
// Download: make([]string, 0),
// Request: make([]string, 0),
// Socket: make([]string, 0),
// Upload: make([]string, 0),
// }
// if domainInfo.Service.Download != nil {
// result.Service.Download = domainInfo.Service.Download
// }
// if domainInfo.Service.Request != nil {
// result.Service.Request = domainInfo.Service.Request
// }
// if domainInfo.Service.Socket != nil {
// result.Service.Socket = domainInfo.Service.Socket
// }
// if domainInfo.Service.Download != nil {
// result.Service.Upload = domainInfo.Service.Upload
// }
//
// result.Whitelist = &pb.AppRuntimeDomain_Whitelist{Domains: make([]string, 0)}
// if domainInfo.Whitelist.Domains != nil {
// result.Whitelist.Domains = domainInfo.Whitelist.Domains
// }
// result.Blacklist = &pb.AppRuntimeDomain_Blacklist{Domains: make([]string, 0)}
// if domainInfo.Blacklist.Domains != nil {
// result.Blacklist.Domains = domainInfo.Blacklist.Domains
// }
// return result
//}
//func GetMenuRspInfo(ctx context.Context) (*proto.MenuInfoRspData, error) {
// //非私有化环境置为nil
// if !config.Cfg.IsPrivateEnv() {
// return nil, nil
// }
// /*menuCreated, err := rs.menuCache.MenuHasCreated(ctx)
// if err != nil {
// return nil, err
// }
// if !menuCreated {
// return nil, nil
// }*/
// result := new(proto.MenuInfoRspData)
// result.List = make([]proto.MenuInfoRspDataItem, 0)
// /*cacheRsp, err := rs.menuCache.Get(ctx)
// if err == nil {
// result.Total = cacheRsp.Total
// for _, m := range cacheRsp.List {
// item := proto.MenuInfoRspDataItem{}
// item.ID = m.ID
// item.Name = m.Name
// item.Image = m.Image
// result.List = append(result.List, item)
// }
// return result, nil
// }*/
//
// menuCacheInfo := apiproto.GetAllMenuRsp{}
//
// repoRspList, total, err := impl.InitMenuInfoRepo().GetAllMenuList(ctx, []string{"sortNum"})
// if err != nil {
// return nil, err
// }
// result.Total = total
// menuCacheInfo.Total = total
// for _, m := range repoRspList {
// item := proto.MenuInfoRspDataItem{}
// item.ID = m.InfoId
// item.Name = m.Name
// item.Image = m.ImageUrl
// result.List = append(result.List, item)
//
// cacheItem := apiproto.GetAllMenuRspItem{
// TraceId: m.TraceId,
// Name: m.Name,
// ID: m.InfoId,
// Image: m.ImageUrl,
// SortNum: m.SortNum,
// CreateTime: m.CreateTime,
// UpdateTime: m.UpdateTime,
// UpdateOperator: m.UpdateOperator,
// }
// menuCacheInfo.List = append(menuCacheInfo.List, cacheItem)
// }
//
// //rs.menuCache.Set(ctx, menuCacheInfo)
//
// return result, nil
//}