|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- package db
-
- import (
- "applet/app/db/model"
- "applet/app/utils"
- "errors"
- "fmt"
- "github.com/gin-gonic/gin"
- "github.com/syyongx/php2go"
- "regexp"
- "strings"
- )
-
- func sysModFormat(c *gin.Context, m interface{}) (interface{}, error) {
- var mods []model.SysModule
- protocol := SysCfgGet(c, "file_bucket_scheme")
- domain := SysCfgGet(c, "file_bucket_host")
- //fmt.Println(protocol, domain)
- if protocol == "" || domain == "" {
- return nil, errors.New("System configuration error, object storage protocol and domain name not found")
- }
- modname_list := []string{"product", "search_result_taobao_item", "hot_rank_tab_view"}
- switch m.(type) {
- case *[]model.SysModule:
- ms := m.(*[]model.SysModule)
- for _, item := range *ms {
- item.Data = ReformatStr(protocol, domain, item.Data, c)
- if item.ModName == "product_detail_title" {
- if strings.Contains(item.Data, "tmall") == false {
- item.Data = strings.Replace(item.Data, "\"platform_css\":[", "\"platform_css\":[{\"name\":\"天猫\",\"type\":\"tmall\",\"text_color\":\"#FFFFFF\",\"bg_color\":\"#FF4242\"},", 1)
- }
- if strings.Contains(item.Data, "kuaishou") == false {
- item.Data = strings.Replace(item.Data, "\"platform_css\":[", "\"platform_css\":[{\"name\":\"快手\",\"type\":\"kuaishou\",\"text_color\":\"#FFFFFF\",\"bg_color\":\"#FF4242\"},", 1)
- }
- if strings.Contains(item.Data, "tikTok") == false {
- item.Data = strings.Replace(item.Data, "\"platform_css\":[", "\"platform_css\":[{\"name\":\"抖音\",\"type\":\"tikTok\",\"text_color\":\"#FFFFFF\",\"bg_color\":\"#FF4242\"},", 1)
- }
- }
-
- if strings.Contains(item.Data, "tmall") == false && utils.InArr(item.ModName, modname_list) {
- item.Data = strings.Replace(item.Data, "{\"index\":\"6\",\"type\":\"kaola\",\"platform_name\":\"考拉\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"}", "{\"index\":\"6\",\"type\":\"kaola\",\"platform_name\":\"考拉\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"},{\"index\":\"7\",\"type\":\"tmall\",\"platform_name\":\"天猫\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"}", 1)
- item.Data = strings.Replace(item.Data, "{\"type\":\"kaola\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"}", "{\"type\":\"kaola\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"},{\"type\":\"tmall\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"}", 1)
- }
- if strings.Contains(item.Data, "\"virtual_coin_pre_fix_name\":") == false && item.ModName == "product" {
- item.Data = strings.ReplaceAll(item.Data, "\"virtual_coin_name\":", "\"virtual_coin_pre_fix_name\":\"返\",\"virtual_coin_name\":")
- }
- item = SysModDataByReplace(c, item)
-
- mods = append(mods, item)
- }
- return &mods, nil
- case *model.SysModule:
- m := m.(*model.SysModule)
- m.Data = ReformatStr(protocol, domain, m.Data, c)
- m = SysModDataByReplaceSecond(c, m)
- return m, nil
- case []*model.UserLevel:
- ms := m.([]*model.UserLevel)
- for _, item := range ms {
- item.CssSet = ReformatStr(protocol, domain, item.CssSet, c)
- }
- return ms, nil
- case []*model.SysPushUser:
- ms := m.([]*model.SysPushUser)
- for _, item := range ms {
- item.SendData = ReformatStr(protocol, domain, item.SendData, c)
- }
- return ms, nil
- case *model.SysPushUser:
- m := m.(*model.SysPushUser)
- m.SendData = ReformatStr(protocol, domain, m.SendData, c)
- return m, nil
- default:
- return nil, nil
- }
- }
-
- func ReformatComm(str, protocol, domain string) string {
- // PNG
- replaceList := reformatImg(str)
- l := removeDuplicateElement(replaceList)
- for _, s := range l {
- if strings.Contains(s, "http") {
- continue
- }
- ss := s
- s = strings.ReplaceAll(s, `\`, "")
- s = strings.ReplaceAll(s, `"`, "")
- s = php2go.Rawurlencode(s)
- new := fmt.Sprintf("%s://%s/%s", protocol, domain, s)
- //if skipHTTPPng(new) {
- // continue
- //}
- str = strings.Replace(str, ss, `"`+new+`"`, -1)
- }
- return str
- }
- func ReformatStr(protocol, domain, str string, c *gin.Context) string {
- //protocol := SysCfgGet(c, "file_bucket_scheme")
- //domain := SysCfgGet(c, "file_bucket_host")
-
- // PNG
- str = ReformatComm(str, protocol, domain)
- return str
- }
-
- // 正则匹配
- func reformatPng(data string) []string {
- re, _ := regexp.Compile(`"([^\"]*.png")`)
- list := re.FindAllString(data, -1)
- return list
- }
- func reformatJpeg(data string) []string {
- re, _ := regexp.Compile(`"([^\"]*.jpeg")`)
- list := re.FindAllString(data, -1)
- return list
- }
- func reformatMp4(data string) []string {
- re, _ := regexp.Compile(`"([^\"]*.mp4")`)
- list := re.FindAllString(data, -1)
- return list
- }
-
- func skipHTTPPng(data string) bool {
- re, _ := regexp.Compile(`(http|https):\/\/([^\"]*.png)`)
- return re.MatchString(data)
- }
-
- // 正则匹配
- func reformatJPG(data string) []string {
- re, _ := regexp.Compile(`"([^\"]*.jpg")`)
- list := re.FindAllString(data, -1)
- return list
- }
-
- // 正则匹配
- func reformatGIF(data string) []string {
- re, _ := regexp.Compile(`"([^\"]*.gif")`)
- list := re.FindAllString(data, -1)
- return list
- }
- func reformatImg(data string) []string {
- re, _ := regexp.Compile(`"([^\"]*.(png|jpg|jpeg|gif|mp4)")`)
- list := re.FindAllString(data, -1)
- return list
- }
-
- func removeDuplicateElement(addrs []string) []string {
- result := make([]string, 0, len(addrs))
- temp := map[string]int{}
- i := 1
- for _, item := range addrs {
- if _, ok := temp[item]; !ok {
- temp[item] = i
- result = append(result, item)
- continue
- }
- temp[item] = temp[item] + 1
- }
- // fmt.Println(temp)
- return result
- }
-
- // 单条记录获取DB
- func SysCfgGet(c *gin.Context, key string) string {
- res := SysCfgFind(c, key)
- //fmt.Println(res)
- if _, ok := res[key]; !ok {
- return ""
- }
- return res[key]
- }
-
- // 多条记录获取
- func SysCfgFind(c *gin.Context, keys ...string) map[string]string {
- eg := DBs[c.GetString("mid")]
- masterId := c.GetString("mid")
- res := map[string]string{}
- //TODO::判断keys长度(大于10个直接查数据库)
- if len(keys) > 10 {
- cfgList, _ := SysCfgGetAll(eg)
- if cfgList == nil {
- return nil
- }
- for _, v := range *cfgList {
- res[v.Key] = v.Val
- }
- } else {
- for _, key := range keys {
- res[key] = SysCfgGetWithDb(eg, masterId, key)
- }
- }
- return res
- }
|