package db import ( "applet/app/db/model" "applet/app/utils" "applet/app/utils/logx" "errors" "strconv" "strings" "github.com/gin-gonic/gin" "github.com/tidwall/gjson" "xorm.io/xorm" ) // 返回所有, 不管是否显示 func SysModFindAll(Db *xorm.Engine) (*[]model.SysModule, error) { var m []model.SysModule if err := Db.Find(&m); err != nil { return nil, err } return &m, nil } // 查找主模块数据 func SysModFindMain(Db *xorm.Engine) (*[]model.SysModule, error) { var m []model.SysModule if err := Db.Where("mod_pid = 0 AND state = 1 AND position = 'base'"). Asc("sort"). Find(&m); err != nil { return nil, err } return &m, nil } // 用父ID查找子模块数据 func SysModFindByPId(c *gin.Context, Db *xorm.Engine, id int) (*[]model.SysModule, error) { var m []model.SysModule if err := Db.Where("state = 1").Where("mod_pid = ?", id). Asc("sort"). Find(&m); err != nil { return nil, err } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } var ms []model.SysModule modname_list := []string{"product", "search_result_taobao_item", "hot_rank_tab_view"} for _, item := range *mm.(*[]model.SysModule) { if strings.Contains(item.Data, "tmall") == false && item.ModName == "product_detail_title" { 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, "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, "优惠卷") { item.Data = strings.Replace(item.Data, "优惠卷", "优惠券", -1) } ms = append(ms, item) } return &ms, nil } // 用父ID查找子模块数据 func SysModFindByPIds(c *gin.Context, Db *xorm.Engine, ids ...int) (*[]model.SysModule, error) { var m []model.SysModule if err := Db.In("mod_pid", ids).Where("state = 1"). Asc("sort"). Find(&m); err != nil { return nil, err } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } var ms []model.SysModule for _, item := range *mm.(*[]model.SysModule) { //数据里面 if strings.Contains(item.Data, "tmall") == false && item.ModName == "product" { 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 = SysModDataByReplace(c, item) ms = append(ms, item) } return &ms, nil } // 用IDS找对应模块数据 func SysModFindByIds(Db *xorm.Engine, ids ...int) (*[]model.SysModule, error) { var m []model.SysModule if err := Db.In("mod_id", ids).Where("state = 1"). Cols("mod_id,mod_pid,mod_name,position,skip_identifier,title,subtitle,url,margin,aspect_ratio,icon,img,font_color,bg_img,bg_color,bg_color_t,badge,path,data,sort"). Asc("sort").Find(&m); err != nil { return nil, err } return &m, nil } // ID查找对应模块 func SysModFindById(c *gin.Context, Db *xorm.Engine, id string) (*model.SysModule, error) { var m model.SysModule if has, err := Db.Where("state = 1 AND mod_id = ?", id). Get(&m); err != nil || has == false { return nil, logx.Warn(err) } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } return mm.(*model.SysModule), nil } // SysModFindByTmpId is 根据模板 func SysModFindByTmpId(c *gin.Context, Db *xorm.Engine, id string) (*model.SysModule, error) { var m model.SysModule if has, err := Db.Where("state = 1 AND template_id = ?", id). Get(&m); err != nil || has == false { return nil, logx.Warn(err) } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } return mm.(*model.SysModule), nil } // Name查找对应模块 func SysModFindByName(c *gin.Context, Db *xorm.Engine, name string) (*model.SysModule, error) { var m model.SysModule if has, err := Db.Where("state = 1 AND mod_name = ?", name). Get(&m); err != nil || has == false { return nil, logx.Warn(err) } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } return mm.(*model.SysModule), nil } // SysModFindByName is Name查找对应模块 func SysModFindByNames(names ...string) (*[]model.SysModule, error) { var m []model.SysModule if err := Db.In("mod_name", names).Where("state = 1"). Cols("mod_id,mod_pid,mod_name,position,skip_identifier,title,subtitle,url,margin,aspect_ratio,icon,img,font_color,bg_img,bg_color,bg_color_t,badge,path,data,sort"). Find(&m); err != nil { return nil, err } return &m, nil } // SysModFindByPosition is 根据位置查找对应模块 func SysModFindByPosition(Db *xorm.Engine, positions ...string) (*[]model.SysModule, error) { var m []model.SysModule if err := Db.In("position", positions).Where("state = 1").Find(&m); err != nil { return nil, err } return &m, nil } // 根据跳转标识 查找对应模块 func SysModFindBySkipIdentifier(c *gin.Context, Db *xorm.Engine, name string) (*model.SysModule, error) { var m model.SysModule if has, err := Db.Where("state = 1 AND skip_identifier = ?", name). Get(&m); err != nil || has == false { return nil, logx.Warn(err) } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } return mm.(*model.SysModule), nil } // 根据跳转标识和位置 查找对应模块list func SysModFindBySkipIdentifierAndPosition(c *gin.Context, Db *xorm.Engine, name string, position string) (*[]model.SysModule, error) { var m []model.SysModule if err := Db.Where("state = 1 AND skip_identifier = ? AND position = ?", name, position). Cols("mod_id,mod_pid,mod_name,position,skip_identifier,title,subtitle,url,margin,aspect_ratio,icon,img,font_color,bg_img,bg_color,bg_color_t,badge,path,data,sort"). Asc("sort").Find(&m); err != nil { return nil, err } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } return mm.(*[]model.SysModule), nil } // SysModFindByTemplateIDAndSkip is 根据模板id 查找对应模块 func SysModFindByTemplateIDAndSkip(Db *xorm.Engine, id interface{}, skip string) (*model.SysModule, error) { var m model.SysModule if has, err := Db.Where("state = 1 AND template_id = ? AND skip_identifier = ?", id, skip). Get(&m); err != nil || has == false { return nil, logx.Warn(err) } return &m, nil } // SysModFindByTemplateIDAndPID is 根据模板id 和pid =0 查找父模块 func SysModFindByTemplateIDAndPID(Db *xorm.Engine, id interface{}, pid interface{}) (*model.SysModule, error) { var m model.SysModule if has, err := Db.Where("state = 1 AND template_id = ? AND mod_pid = ?", id, pid). Get(&m); err != nil || has == false { return nil, logx.Warn(err) } return &m, nil } // SysModFindByTemplateIDAndModName is 根据模板id 和mod name 查找模块 func SysModFindByTemplateIDAndModName(Db *xorm.Engine, id interface{}, modName string) (*model.SysModule, error) { var m model.SysModule if has, err := Db.Where("state = 1 AND template_id = ? AND mod_name = ?", id, modName). Get(&m); err != nil || has == false { return nil, logx.Warn(err) } return &m, nil } // SysModFindNavIsUsed 查找正在使用的底部导航栏模板 func SysModFindNavIsUsedByPlatform(c *gin.Context, Db *xorm.Engine, platform string) (*model.SysModule, error) { var ( tm model.SysTemplate m model.SysModule ) switch platform { case "ios": if has, err := Db.Where("is_use = 1 AND type = 'bottom' AND platform = 2 "). Cols("id,uid,name,is_use,is_system"). Get(&tm); err != nil || has == false { return nil, logx.Warn(err) } appvserison := SysCfgGet(c, "ios_audit_version") if c.GetHeader("app_version_name") == appvserison && c.GetHeader("app_version_name") != "" { m, err := GetCloudBundleByVersion(Db, appvserison, 2) if err != nil { return nil, logx.Warn(err) } tm.Id = int(gjson.Get(m.TemplateDuringAudit, "bottom").Int()) } if has, err := Db.Where("state = 1 AND template_id = ? AND mod_name = 'bottom_nav'", tm.Id). Get(&m); err != nil || has == false { return nil, logx.Warn(err) } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } return mm.(*model.SysModule), nil case "android": has, err := Db.Where("is_use = 1 AND type = 'bottom' AND platform = 2 ").Cols("id,uid,name,is_use,is_system").Get(&tm) if err != nil || has == false { return nil, logx.Warn(err) } appvserison := SysCfgGet(c, "android_audit_version") if appvserison != "" && c.GetHeader("app_version_name") == appvserison { m, err := GetCloudBundleByVersion(Db, appvserison, 1) if err != nil { return nil, logx.Warn(err) } tm.Id = int(gjson.Get(m.TemplateDuringAudit, "bottom").Int()) } if has, err := Db.Where("state = 1 AND template_id = ? AND mod_name = 'bottom_nav'", tm.Id). Get(&m); err != nil || has == false { return nil, logx.Warn(err) } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } return mm.(*model.SysModule), nil case "wx_applet", "wap": if has, err := Db.Where("is_use = 1 AND type = 'bottom' AND platform = 4 "). Cols("id,uid,name,is_use,is_system"). Get(&tm); err != nil || has == false { return nil, logx.Warn(err) } appvserison := SysCfgGet(c, "mp_audit_version") // fmt.Println("header:", c.Request.Header) if c.GetHeader("AppVersionName") == appvserison && c.GetHeader("AppVersionName") != "" { m, err := SysCfgGetOne(Db, "mp_audit_template") if err != nil { return nil, logx.Warn(err) } tm.Id = int(gjson.Get(m.Val, "bottom").Int()) } // fmt.Println("template_id", tm.Id) if has, err := Db.Where("state = 1 AND template_id = ? AND mod_name = 'bottom_nav'", tm.Id). Get(&m); err != nil || has == false { return nil, logx.Warn(err) } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } return mm.(*model.SysModule), nil case "baidu_applet": if has, err := Db.Where("is_use = 1 AND type = 'bottom' AND platform = 4 "). Cols("id,uid,name,is_use,is_system"). Get(&tm); err != nil || has == false { return nil, logx.Warn(err) } appvserison := SysCfgGet(c, "baidu_audit_version") if appvserison != "" && c.GetHeader("app_version_name") == appvserison { m, err := SysCfgGetOne(Db, "baidu_audit_template") if err != nil { return nil, logx.Warn(err) } tm.Id = int(gjson.Get(m.Val, "bottom").Int()) } if has, err := Db.Where("state = 1 AND template_id = ? AND mod_name = 'bottom_nav'", tm.Id). Get(&m); err != nil || has == false { return nil, logx.Warn(err) } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } return mm.(*model.SysModule), nil case "toutiao_applet": if has, err := Db.Where("is_use = 1 AND type = 'bottom' AND platform = 4 "). Cols("id,uid,name,is_use,is_system"). Get(&tm); err != nil || has == false { return nil, logx.Warn(err) } appvserison := SysCfgGet(c, "tt_audit_version") if appvserison != "" && c.GetHeader("app_version_name") == appvserison { m, err := SysCfgGetOne(Db, "tt_audit_template") if err != nil { return nil, logx.Warn(err) } tm.Id = int(gjson.Get(m.Val, "bottom").Int()) } if has, err := Db.Where("state = 1 AND template_id = ? AND mod_name = 'bottom_nav'", tm.Id). Get(&m); err != nil || has == false { return nil, logx.Warn(err) } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } return mm.(*model.SysModule), nil case "alipay_applet": if has, err := Db.Where("is_use = 1 AND type = 'bottom' AND platform = 4 "). Cols("id,uid,name,is_use,is_system"). Get(&tm); err != nil || has == false { return nil, logx.Warn(err) } appvserison := SysCfgGet(c, "zfb_audit_version") if appvserison != "" && c.GetHeader("app_version_name") == appvserison { m, err := SysCfgGetOne(Db, "zfb_audit_template") if err != nil { return nil, logx.Warn(err) } tm.Id = int(gjson.Get(m.Val, "bottom").Int()) } if has, err := Db.Where("state = 1 AND template_id = ? AND mod_name = 'bottom_nav'", tm.Id). Get(&m); err != nil || has == false { return nil, logx.Warn(err) } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } return mm.(*model.SysModule), nil default: return &m, errors.New("Platform not support") } } // SysModFindBySkipIdentifierAndModName is 根据mod_name和位置 查找对应模块 func SysModFindBySkipIdentifierAndModName(c *gin.Context, Db *xorm.Engine, name string, modName string) (*model.SysModule, error) { var m model.SysModule if has, err := Db.Where("state = 1 AND skip_identifier = ? AND mod_name = ?", name, modName).Get(&m); err != nil || !has { return nil, logx.Warn(err) } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } return mm.(*model.SysModule), nil } // SysModFindByModName is 根据mod_name和位置 查找对应模块 func SysModFindByModName(c *gin.Context, Db *xorm.Engine, modName string) (*model.SysModule, error) { var m model.SysModule if has, err := Db.Where("state = 1 AND mod_name = ?", modName).Get(&m); err != nil || !has { return nil, logx.Warn(err) } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } return mm.(*model.SysModule), nil } // 根据跳转标识和平台类型查找 func SysModFindBySkipIdentifierAndPlatform(c *gin.Context, Db *xorm.Engine, name string, platform int) (*model.SysModule, error) { var m model.SysModule if has, err := Db.Where("state = 1 AND skip_identifier = ? AND platform = ?", name, platform).Get(&m); err != nil || !has { return nil, logx.Warn(err) } mm, err := sysModFormat(c, &m) if err != nil { return nil, err } return mm.(*model.SysModule), nil } //公共处理modData的链接 func SysModDataByReplace(c *gin.Context, mod model.SysModule) model.SysModule { //替换链接的一些参数 if strings.Contains(mod.Data, "[replace_APP_URL]") { mod.Data = strings.Replace(mod.Data, "[replace_APP_URL]", c.GetString("domain_wap_base"), -1) } if strings.Contains(mod.Data, "[replace_masterId]") { mod.Data = strings.Replace(mod.Data, "[replace_masterId]", c.GetString("mid"), -1) } if strings.Contains(mod.Data, "优惠卷") { mod.Data = strings.Replace(mod.Data, "优惠卷", "优惠券", -1) } if strings.Contains(mod.Data, "[replace_uid]") { token := c.GetHeader("Authorization") // 按空格分割 parts := strings.SplitN(token, " ", 2) if len(parts) == 2 && parts[0] == "Bearer" { // parts[1]是获取到的tokenString,我们使用之前定义好的解析JWT的函数来解析它 mc, _ := utils.ParseToken(parts[1]) mod.Data = strings.Replace(mod.Data, "[replace_uid]", strconv.Itoa(mc.UID), -1) } } //if strings.Contains(mod.Data, "\"child_category_id") && strings.Contains(mod.Data, "\"category_id") { // //如果存在这两个字段,要换一下 // mod.Data = strings.ReplaceAll(mod.Data, "\"category_id", "\"null_category_id") // mod.Data = strings.ReplaceAll(mod.Data, "\"child_category_id", "\"category_id") //} return mod } //公共处理modData的链接 func SysModDataByReplaceSecond(c *gin.Context, mod *model.SysModule) *model.SysModule { //替换链接的一些参数 if strings.Contains(mod.Data, "[replace_APP_URL]") { mod.Data = strings.Replace(mod.Data, "[replace_APP_URL]", c.GetString("domain_wap_base"), -1) } if strings.Contains(mod.Data, "[replace_masterId]") { mod.Data = strings.Replace(mod.Data, "[replace_masterId]", c.GetString("mid"), -1) } if strings.Contains(mod.Data, "优惠卷") { mod.Data = strings.Replace(mod.Data, "优惠卷", "优惠券", -1) } if strings.Contains(mod.Data, "[replace_uid]") { token := c.GetHeader("Authorization") // 按空格分割 parts := strings.SplitN(token, " ", 2) if len(parts) == 2 && parts[0] == "Bearer" { // parts[1]是获取到的tokenString,我们使用之前定义好的解析JWT的函数来解析它 mc, _ := utils.ParseToken(parts[1]) mod.Data = strings.Replace(mod.Data, "[replace_uid]", strconv.Itoa(mc.UID), -1) } } //if strings.Contains(mod.Data, "\"child_category_id") && strings.Contains(mod.Data, "\"category_id") { // //如果存在这两个字段,要换一下 // mod.Data = strings.ReplaceAll(mod.Data, "\"category_id", "\"null_category_id") // mod.Data = strings.ReplaceAll(mod.Data, "\"child_category_id", "\"category_id") //} return mod }