|
- 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
- }
|