Browse Source

Merge branch 'sandbox_merge' into sandbox

hsun 1 year ago
parent
commit
71d19afc79

+ 37 - 8
controllers/classify.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hz_eta_api/models"
+	"hongze/hz_eta_api/models/system"
 	"hongze/hz_eta_api/services"
 	"hongze/hz_eta_api/utils"
 	"time"
@@ -32,20 +33,34 @@ func (this *ClassifyController) Add() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
+
+	// 获取系统菜单, 如果没有对应的字段的特殊处理项, 则忽略必填
+	menus, e := system.GetSysMenuItemsByCondition("", make([]interface{}, 0), []string{}, ``)
+	if e != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
+		return
+	}
+	menuMap := make(map[string]bool)
+	for _, m := range menus {
+		if m.ButtonCode != "" {
+			menuMap[m.ButtonCode] = true
+		}
+	}
+
 	if req.ClassifyName == "" {
 		br.Msg = "分类名称不可为空"
 		return
 	}
-	if req.ParentId != 0 && req.ShowType == 0 {
+	if menuMap[system.MenuSpecialHandleClassifyShowType] && req.ParentId != 0 && req.ShowType == 0 {
 		br.Msg = "展示类型不可为空"
 		return
 	}
-	if len(req.MenuList) > 0 && req.ParentId != 0 {
+	if menuMap[system.MenuSpecialHandleClassifyChildMenu] && len(req.MenuList) > 0 && req.ParentId != 0 {
 		br.Msg = "非一级分类不可添加子目录"
 		return
 	}
-
-	if (req.ShowType == 1 || req.ShowType == 3) && req.YbRightBanner == "" && req.ParentId == 0 { //当一级报告分类为列表、品种时,增加“报告合集配图”的配置项
+	if menuMap[system.MenuSpecialHandleClassifyReportImgs] && (req.ShowType == 1 || req.ShowType == 3) && req.YbRightBanner == "" && req.ParentId == 0 { //当一级报告分类为列表、品种时,增加“报告合集配图”的配置项
 		br.Msg = "报告合集配图不可为空"
 		return
 	}
@@ -345,6 +360,21 @@ func (this *ClassifyController) Edit() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
+
+	// 获取系统菜单, 如果没有对应的字段的特殊处理项, 则忽略必填
+	menus, e := system.GetSysMenuItemsByCondition("", make([]interface{}, 0), []string{}, ``)
+	if e != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
+		return
+	}
+	menuMap := make(map[string]bool)
+	for _, m := range menus {
+		if m.ButtonCode != "" {
+			menuMap[m.ButtonCode] = true
+		}
+	}
+
 	if req.ClassifyId <= 0 {
 		br.Msg = "参数错误"
 		return
@@ -353,7 +383,7 @@ func (this *ClassifyController) Edit() {
 		br.Msg = "分类名称不可为空"
 		return
 	}
-	if req.ParentId != 0 && req.ShowType == 0 {
+	if menuMap[system.MenuSpecialHandleClassifyShowType] && req.ParentId != 0 && req.ShowType == 0 {
 		br.Msg = "展示类型不可为空"
 		return
 	}
@@ -361,8 +391,7 @@ func (this *ClassifyController) Edit() {
 		br.Msg = "上级分类不能选择自己"
 		return
 	}
-
-	if (req.ShowType == 1 || req.ShowType == 3) && req.YbRightBanner == "" && req.ParentId == 0 { //当一级报告分类为列表、品种时,增加“报告合集配图”的配置项
+	if menuMap[system.MenuSpecialHandleClassifyReportImgs] && (req.ShowType == 1 || req.ShowType == 3) && req.YbRightBanner == "" && req.ParentId == 0 { //当一级报告分类为列表、品种时,增加“报告合集配图”的配置项
 		br.Msg = "报告合集配图不可为空"
 		return
 	}
@@ -870,7 +899,7 @@ func (this *ClassifyController) TelListClassify() {
 	resp := make([]*models.SimpleClassifyList, 0)
 	var condition, orderRule string
 	var pars []interface{}
-	if utils.SystemType == "hz" {
+	if utils.BusinessCode == utils.BusinessCodeRelease {
 		condition += ` AND classify_name <> '晨报' AND classify_name <> '周报' `
 	}
 	telList, e := models.GetClassifyByCondition(condition, orderRule, pars)

+ 10 - 98
controllers/company_permission.go

@@ -32,11 +32,20 @@ func (this *CompanyPermissionController) List() {
 		br.Ret = 408
 		return
 	}
+	// 非自用无需查询
+	resp := new(company.PermissionSetResp)
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		br.Data = resp
+		return
+	}
+
 	// Tips:目前这个接口权益在添加客户、申请转正、领取客户、续约申请均有用到
 
 	companyType := this.GetString("CompanyType")
 	var productId int
-	resp := new(company.PermissionSetResp)
 
 	roleTypeCode := sysUser.RoleTypeCode
 	productId = services.GetProductId(roleTypeCode)
@@ -72,100 +81,3 @@ func (this *CompanyPermissionController) List() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
-
-// PermissionVariety
-// @Title 品种
-// @Description 品种接口
-// @Param   CompanyType   query   string  true       "客户类型:传空字符串或者不传为全部,'ficc','权益'"
-// @Success 200 {object} company.PermissionVarietyResp
-// @router /permission/variety [get]
-func (this *CompanyPermissionController) PermissionVariety() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	sysUser := this.SysUser
-	if sysUser == nil {
-		br.Msg = "请登录"
-		br.ErrMsg = "请登录,SysUser Is Empty"
-		br.Ret = 408
-		return
-	}
-
-	companyType := this.GetString("CompanyType")
-
-	var productId int
-	resp := new(company.PermissionVarietyResp)
-
-	roleTypeCode := sysUser.RoleTypeCode
-	if roleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
-		productId = 2
-	} else if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER || roleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN {
-		productId = 1
-	} else {
-		productId = 0
-	}
-
-	if productId == 1 {
-		for k, v := range utils.PermissionFiccClassifyArr {
-			p := new(company.PermissionVarietyList)
-			p.ClassifyName = v
-			p.ChartPermissionId = k + 100
-			items, err := company.GetPermissionVarietyItems(productId, v)
-			if err != nil {
-				br.Msg = "获取失败"
-				br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-				return
-			}
-			p.Items = items
-			resp.List = append(resp.List, p)
-		}
-	} else if productId == 2 {
-		v := "权益"
-		p := new(company.PermissionVarietyList)
-		p.ClassifyName = v
-		p.ChartPermissionId = 105
-		items, err := company.GetPermissionVarietyItems(productId, v)
-		if err != nil {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-			return
-		}
-		p.Items = items
-		resp.List = append(resp.List, p)
-	} else {
-		if companyType == utils.COMPANY_PRODUCT_FICC_NAME {
-			for k, v := range utils.PermissionFiccClassifyArr {
-				p := new(company.PermissionVarietyList)
-				p.ClassifyName = v
-				p.ChartPermissionId = k + 100
-				items, err := company.GetPermissionVarietyItems(1, v)
-				if err != nil {
-					br.Msg = "获取失败"
-					br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-					return
-				}
-				p.Items = items
-				resp.List = append(resp.List, p)
-			}
-		} else if companyType == utils.COMPANY_PRODUCT_RAI_NAME {
-			v := "权益"
-			p := new(company.PermissionVarietyList)
-			p.ClassifyName = v
-			p.ChartPermissionId = 105
-			items, err := company.GetPermissionVarietyItems(2, v)
-			if err != nil {
-				br.Msg = "获取失败"
-				br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-				return
-			}
-			p.Items = items
-			resp.List = append(resp.List, p)
-		}
-	}
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-	br.Data = resp
-}

+ 98 - 5
controllers/report.go

@@ -876,6 +876,13 @@ func (this *ReportController) SendTemplateMsg() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
+
 	var req models.SendTemplateMsgReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
@@ -1414,7 +1421,6 @@ func (this *ReportController) GetDayWeekReportChapterTypeList() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-
 	sysUser := this.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
@@ -1422,6 +1428,12 @@ func (this *ReportController) GetDayWeekReportChapterTypeList() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	var condition string
 	var pars []interface{}
@@ -1526,6 +1538,12 @@ func (this *ReportController) GetDayWeekReportPauseTime() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	list, err := models.GetDayWeekReportPauseTimeList()
 	if err != nil {
@@ -1560,6 +1578,12 @@ func (this *ReportController) SetDayWeekReportUpdateRule() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	var req models.SetDayWeekReportUpdateRuleReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
@@ -1607,6 +1631,12 @@ func (this *ReportController) SetDayWeekReportEnableRule() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	var req models.SetDayWeekReportEnableUpdateRuleReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
@@ -1648,7 +1678,6 @@ func (this *ReportController) AddDayWeekReport() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-
 	sysUser := this.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
@@ -1656,6 +1685,12 @@ func (this *ReportController) AddDayWeekReport() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	var req models.SaveDayWeekReportReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
@@ -1847,7 +1882,6 @@ func (this *ReportController) EditDayWeekReport() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-
 	sysUser := this.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
@@ -1855,6 +1889,12 @@ func (this *ReportController) EditDayWeekReport() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	var req models.SaveDayWeekReportReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
@@ -1926,6 +1966,12 @@ func (this *ReportController) GetReportChapterList() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	reqReportId := this.GetString("ReportId")
 	reportId, _ := strconv.Atoi(reqReportId)
@@ -2044,6 +2090,12 @@ func (this *ReportController) GetLastDayWeekReportChapter() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	typeId, _ := this.GetInt("TypeId")
 	reportType := this.GetString("ReportType")
@@ -2347,7 +2399,6 @@ func (this *ReportController) GetDayReportTickerList() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-
 	sysUser := this.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
@@ -2355,6 +2406,12 @@ func (this *ReportController) GetDayReportTickerList() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	reportChapterId, _ := this.GetInt("ReportChapterId")
 	if reportChapterId <= 0 {
@@ -2456,6 +2513,12 @@ func (this *ReportController) IsLastDayWeekReportChapter() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	reportChapterId, _ := this.GetInt("ReportChapterId")
 	if reportChapterId <= 0 {
@@ -2513,6 +2576,12 @@ func (this *ReportController) PublishDayWeekReportChapter() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	var req models.PublishReportChapterReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
@@ -2702,6 +2771,12 @@ func (this *ReportController) PublishDayWeekReport() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	var req models.PublishDayWeekReportReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
@@ -2761,6 +2836,13 @@ func (this *ReportController) GetSunCode() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
+
 	var req models.SunCodeReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
@@ -2807,7 +2889,6 @@ func (this *ReportController) GetStopDayWeekReportChapterTypeList() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-
 	sysUser := this.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
@@ -2815,6 +2896,12 @@ func (this *ReportController) GetStopDayWeekReportChapterTypeList() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		return
+	}
 
 	stopDay := make([]*models.ReportChapterType, 0)
 	stopWeek := make([]*models.ReportChapterType, 0)
@@ -2930,6 +3017,12 @@ func (this *ReportController) SendMsg() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 	if req.ReportId <= 0 {
 		br.Msg = "参数错误"
 		br.ErrMsg = "参数错误"

+ 15 - 0
controllers/report_chapter_type.go

@@ -370,6 +370,14 @@ func (this *ReportChapterTypeController) AuthSetting() {
 		br.Ret = 408
 		return
 	}
+	// 非自用直接返回
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
+
 	var req models.ReportChapterTypeAuthSettingReq
 	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
 		br.Msg = "参数解析异常!"
@@ -456,6 +464,13 @@ func (this *ReportChapterTypeController) PermissionList() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
+
 	typeId, _ := this.GetInt("ReportChapterTypeId")
 	if typeId <= 0 {
 		br.Msg = "参数有误"

+ 8 - 0
controllers/research_group.go

@@ -3,6 +3,7 @@ package controllers
 import (
 	"hongze/hz_eta_api/models"
 	"hongze/hz_eta_api/services"
+	"hongze/hz_eta_api/utils"
 )
 
 type ResearchGroupController struct {
@@ -20,6 +21,13 @@ func (this *ResearchGroupController) GetResearchGroupList() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
+
 	include, _ := this.GetInt("Include")
 	list, err := services.GetResearchGroupTree(include)
 	if err != nil {

+ 22 - 2
controllers/sandbox/sandbox.go

@@ -9,6 +9,7 @@ import (
 	"hongze/hz_eta_api/models/sandbox"
 	"hongze/hz_eta_api/models/sandbox/request"
 	"hongze/hz_eta_api/models/sandbox/response"
+	"hongze/hz_eta_api/models/system"
 	sandboxService "hongze/hz_eta_api/services/sandbox"
 	"hongze/hz_eta_api/utils"
 )
@@ -326,10 +327,29 @@ func (this *SandboxController) Save() {
 	}
 
 	var sandboxResp *sandbox.SandboxSaveResp
+	// 获取系统菜单, 如果没有对应的字段的特殊处理项, 则忽略必填
+	menus, e := system.GetSysMenuItemsByCondition("", make([]interface{}, 0), []string{}, ``)
+	if e != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
+		return
+	}
+	menuMap := make(map[string]bool)
+	for _, m := range menus {
+		if m.ButtonCode != "" {
+			menuMap[m.ButtonCode] = true
+		}
+	}
+	ignoreVariety := false
+	if !menuMap[system.MenuSpecialHandleSandboxVariety] {
+		ignoreVariety = true
+		return
+	}
+
 	var errMsg string
 	if req.SandboxVersionCode == `` {
 		//新增沙盘
-		sandboxResp, err = sandboxService.AddSandbox(req, sysUser.AdminId, sysUser.RealName)
+		sandboxResp, err = sandboxService.AddSandbox(req, sysUser.AdminId, sysUser.RealName, ignoreVariety)
 	} else {
 		////更新当前编辑中的状态缓存
 		//err = sandboxService.UpdateSandboxEditMark(req.SandboxId, sysUser.AdminId, 1)
@@ -339,7 +359,7 @@ func (this *SandboxController) Save() {
 		//}
 
 		//编辑沙盘
-		sandboxResp, err, errMsg = sandboxService.UpdateSandbox(req, sysUser.AdminId, sysUser.RealName)
+		sandboxResp, err, errMsg = sandboxService.UpdateSandbox(req, sysUser.AdminId, sysUser.RealName, ignoreVariety)
 	}
 	if err != nil {
 		br.Msg = "保存失败!"

+ 1 - 1
controllers/sys_admin.go

@@ -267,7 +267,7 @@ func (this *SysAdminController) ListSysuser() {
 		}
 	}
 	// 研究方向分组
-	if len(adminIdArr) > 0 {
+	if len(adminIdArr) > 0 && utils.BusinessCode == utils.BusinessCodeRelease {
 		//adminIds := strings.Join(adminIdArr, ",")
 		//researchGroupList, e := system.GetAdminResearchGroupListByAdminId(adminIds)
 		researchGroupList, e := models.GetAdminVarietyTagRelationListByAdminId(adminIdArr)

+ 204 - 2
controllers/sys_role.go

@@ -248,7 +248,8 @@ func (this *SysRoleController) ListSysRole() {
 	br.Data = resp
 }
 
-// @Title 角色设置权限-菜单列表
+// SysRoleMenusList
+// @Title 角色设置权限-菜单列表-CRM14.1弃用
 // @Description 角色设置权限-菜单列表
 // @Param   RoleId   query   int  true       "角色Id"
 // @Success 200 {object} system.SysRoleListResp
@@ -313,7 +314,8 @@ func (this *SysRoleController) SysRoleMenusList() {
 	br.Data = resp
 }
 
-// @Title 角色设置权限
+// SysRoleMenusAdd
+// @Title 角色设置权限-CRM14.1弃用
 // @Description 角色设置权限
 // @Param	request	body system.RoleMenusAddReq true "type json string"
 // @Success 200 {object} system.SysRoleListResp
@@ -453,3 +455,203 @@ func (this *SysRoleController) AllSysRole() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// SysRoleMenuAuthList
+// @Title 角色设置权限-菜单列表
+// @Description 角色设置权限-菜单列表
+// @Param   RoleId   query   int  true       "角色Id"
+// @Success 200 {object} system.SysRoleListResp
+// @router /role/menu/auth_list [get]
+func (this *SysRoleController) SysRoleMenuAuthList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		return
+	}
+	resp := new(system.SysMenuListResp)
+	resp.ChoiceList = make([]int, 0)
+	resp.HalfChoiceList = make([]int, 0)
+	resp.List = make([]*system.SysMenuItem, 0)
+
+	// 角色勾选的权限
+	roleId, _ := this.GetInt("RoleId", 0)
+	if roleId > 0 {
+		relates, e := system.GetSysRoleMenuByRoleId(roleId)
+		if e != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取角色关联菜单失败, Err: " + e.Error()
+			return
+		}
+		for _, r := range relates {
+			if r.Type == 1 {
+				resp.HalfChoiceList = append(resp.HalfChoiceList, r.MenuId)
+				continue
+			}
+			resp.ChoiceList = append(resp.ChoiceList, r.MenuId)
+		}
+	}
+
+	order := `sort ASC, create_time DESC, menu_id DESC`
+	list, e := system.GetSysMenuItemsByCondition("", make([]interface{}, 0), []string{}, order)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
+		return
+	}
+
+	items := make([]*system.SysMenuItem, 0)
+	for _, v := range list {
+		t := &system.SysMenuItem{
+			MenuId:       v.MenuId,
+			ParentId:     v.ParentId,
+			Name:         v.Name,
+			Sort:         v.Sort,
+			Path:         v.Path,
+			PathName:     v.PathName,
+			IconPath:     v.IconPath,
+			Component:    v.Component,
+			Hidden:       v.Hidden,
+			HiddenLayout: v.HiddenLayout,
+			Level:        v.Level,
+			MenuType:     v.MenuType,
+			ButtonCode:   v.ButtonCode,
+			Children:     make([]*system.SysMenuItem, 0),
+		}
+		items = append(items, t)
+	}
+
+	// 递归返回树形结构
+	items = services.GetMenuTreeRecursive(items, 0)
+
+	resp.List = items
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// SysRoleMenuAuthSave
+// @Title 角色设置权限-保存
+// @Description 角色设置权限-保存
+// @Param	request	body RoleMenusSaveReq true "type json string"
+// @Success 200 {object} system.SysRoleListResp
+// @router /role/menu/auth_save [post]
+func (this *SysRoleController) SysRoleMenuAuthSave() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	type RoleMenusSaveReq struct {
+		RoleId      int   `description:"角色ID"`
+		MenuIds     []int `description:"菜单IDs"`
+		HalfMenuIds []int `description:"半选菜单IDs-仅供前端回显用的"`
+	}
+	var req RoleMenusSaveReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.RoleId <= 0 {
+		br.Msg = "参数有误"
+		return
+	}
+	if len(req.MenuIds) == 0 {
+		br.Msg = "请选择菜单"
+		return
+	}
+
+	items := make([]*system.SysRoleMenu, 0)
+	for _, v := range req.MenuIds {
+		t := new(system.SysRoleMenu)
+		t.MenuId = v
+		t.RoleId = req.RoleId
+		items = append(items, t)
+	}
+	for _, v := range req.HalfMenuIds {
+		t := new(system.SysRoleMenu)
+		t.MenuId = v
+		t.Type = 1
+		t.RoleId = req.RoleId
+		items = append(items, t)
+	}
+	if e := system.CreateMultiSysRoleMenu(req.RoleId, items); e != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "保存角色菜单权限失败, Err: " + e.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "设置成功"
+}
+
+// ButtonList
+// @Title 角色-按钮权限列表
+// @Description 角色-按钮权限列表
+// @Param   RoleId   query   int  true       "角色Id"
+// @Success 200 {object} system.SysRoleListResp
+// @router /role/menu/buttons [get]
+func (this *SysRoleController) ButtonList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	roleId := sysUser.RoleId
+	list, e := system.GetMenuButtonsByRoleId(roleId)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取角色按钮权限失败, Err: " + e.Error()
+		return
+	}
+
+	buttonList := make([]*system.SysMenuButtonResp, 0)
+	for _, v := range list {
+		tmp := new(system.SysMenuButtonResp)
+		tmp.MenuId = v.MenuId
+		tmp.ParentId = v.ParentId
+		tmp.MenuType = v.MenuType
+		tmp.Name = v.Name
+		tmp.ButtonCode = v.ButtonCode
+		buttonList = append(buttonList, tmp)
+	}
+
+	br.Data = buttonList
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}

+ 14 - 1
controllers/variety_tag.go

@@ -3,6 +3,7 @@ package controllers
 import (
 	"hongze/hz_eta_api/models"
 	"hongze/hz_eta_api/services"
+	"hongze/hz_eta_api/utils"
 )
 
 type VarietyTagController struct {
@@ -21,15 +22,27 @@ func (this *VarietyTagController) TagTree() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
+	// 非自用不请求
+	resp := make([]*services.TagTreeItem, 0)
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		br.Data = resp
+		return
+	}
+
 	hasResearcher, _ := this.GetInt("HasResearcher")    // 是否展示研究员:1展示, 0不展示
 	include, _ := this.GetInt("IncludeDisableMember")   // 是否包含被禁用的研究员标签
 	questionId, _ := this.GetInt("CommunityQuestionId") // 问答社区ID-用于区分哪些研究员不可选
-	resp, e := services.GetTagTree(hasResearcher, include, questionId)
+	list, e := services.GetTagTree(hasResearcher, include, questionId)
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "TagTree-获取标签树失败, Err: " + e.Error()
 		return
 	}
+	resp = list
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"

+ 0 - 22
models/company/company_permission.go

@@ -79,28 +79,6 @@ type PermissionLookItem struct {
 	Child              []*PermissionLookItem `description:"子权限"`
 }
 
-type PermissionVarietyResp struct {
-	List []*PermissionVarietyList
-}
-
-type PermissionVarietyItem struct {
-	ChartPermissionId int    `description:"权限id"`
-	ClassifyName      string `orm:"column(permission_name)" description:"权限名称"`
-}
-
-type PermissionVarietyList struct {
-	ChartPermissionId int    `description:"父级id"`
-	ClassifyName      string `description:"分类"`
-	Items             []*PermissionVarietyItem
-}
-
-func GetPermissionVarietyItems(productId int, classifyName string) (items []*PermissionVarietyItem, err error) {
-	o := orm.NewOrmUsingDB("weekly")
-	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? AND classify_name=? GROUP BY permission_name ORDER BY sort ASC `
-	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
-	return
-}
-
 // GetChartPermissionListById 根据权限id获取产品权限详情
 func GetChartPermissionListById(chartPermissionId int) (item *ChartPermission, err error) {
 	o := orm.NewOrmUsingDB("weekly")

+ 1 - 1
models/db.go

@@ -55,7 +55,7 @@ func init() {
 	gl.SetConnMaxLifetime(10 * time.Minute)
 
 	// 用户主库
-	if utils.MYSQL_WEEKLY_URL != `` {
+	if utils.MYSQL_WEEKLY_URL != `` && utils.BusinessCode == utils.BusinessCodeRelease {
 		_ = orm.RegisterDataBase("weekly", "mysql", utils.MYSQL_WEEKLY_URL)
 		orm.SetMaxIdleConns("weekly", 50)
 		orm.SetMaxOpenConns("weekly", 100)

+ 3 - 3
models/report.go

@@ -862,14 +862,14 @@ type YbPcSuncode struct {
 
 // GetYbPcSunCode 获取太阳码
 func GetYbPcSunCode(scene, page string) (item *YbPcSuncode, err error) {
-	o := orm.NewOrmUsingDB("default")
+	o := orm.NewOrmUsingDB("weekly")
 	sql := `SELECT * FROM yb_pc_suncode WHERE scene = ? AND code_page = ? `
 	err = o.Raw(sql, scene, page).QueryRow(&item)
 	return
 }
 
 func AddYbPcSunCode(item *YbPcSuncode) (err error) {
-	o := orm.NewOrmUsingDB("default")
+	o := orm.NewOrmUsingDB("weekly")
 	_, err = o.Insert(item)
 	return
 }
@@ -883,7 +883,7 @@ type YbSuncodePars struct {
 }
 
 func AddYbSuncodePars(item *YbSuncodePars) (err error) {
-	o := orm.NewOrmUsingDB("default")
+	o := orm.NewOrmUsingDB("weekly")
 	_, err = o.Insert(item)
 	return
 }

+ 107 - 5
models/system/sys_menu.go

@@ -1,6 +1,56 @@
 package system
 
-import "github.com/beego/beego/v2/client/orm"
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strings"
+	"time"
+)
+
+// 需要特殊处理的菜单字段项
+const (
+	MenuSpecialHandleClassifyChildMenu  = "classifyList:cnClassify:childMenu"
+	MenuSpecialHandleClassifyShowType   = "classifyList:cnClassify:showType"
+	MenuSpecialHandleClassifyReportImgs = "classifyList:cnClassify:reportImgs"
+	MenuSpecialHandleSandboxVariety     = "sandbox:variety"
+)
+
+type SysMenu struct {
+	MenuId       int       `orm:"column(menu_id);pk"`
+	ParentId     int       `description:"父级菜单ID"`
+	Name         string    `description:"菜单名称或者按钮名称"`
+	RootId       int       `description:"顶层菜单ID"`
+	Sort         string    `description:"排序"`
+	Path         string    `description:"路由地址"`
+	PathName     string    `description:"路由名称"`
+	IconPath     string    `description:"菜单图标地址"`
+	Component    int       `description:"组件路径"`
+	Hidden       int       `description:"是否隐藏:1-隐藏 0-显示"`
+	HiddenLayout int       `description:"是否隐藏layout:1-隐藏 0-显示"`
+	Level        int       `description:"菜单等级:1-2-3"`
+	IsLevel      int       `description:"是否为多级菜单:1,只有一级;2,有多级"`
+	LevelPath    string    `description:"兼容以前menu表的字段"`
+	MenuType     int       `description:"菜单类型: 0-菜单; 1-按钮; 2-字段(需要特殊处理)"`
+	ButtonCode   string    `description:"按钮/菜单唯一标识"`
+	CreateTime   time.Time `description:"创建时间"`
+	ModifyTime   time.Time `description:"更新时间"`
+}
+
+// GetSysMenuItemsByCondition 获取菜单列表
+func GetSysMenuItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*SysMenu, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM sys_menu WHERE 1=1 %s %s`, fields, condition, order)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
 
 type MenuList struct {
 	MenuId    int          `description:"导航唯一标识"`
@@ -52,22 +102,74 @@ func GetMenuByParentId(roleId, parentId int) (items []*ChildMenu, err error) {
 // GetMenuListByRoleIds 根据管理员多个角色查询菜单ID
 func GetMenuListByRoleIds(roleIds string) (items []*MenuList, err error) {
 	sql := ` SELECT DISTINCT a.* FROM sys_menu AS a
-			INNER JOIN sys_role_menu AS b ON a.menu_id=b.menu_id
+			INNER JOIN sys_role_menu AS b ON a.menu_id=b.menu_id AND b.type = 0
 			INNER JOIN sys_role AS c ON b.role_id=c.role_id
-			WHERE c.role_id in (`+roleIds+`)
+			WHERE c.role_id in (` + roleIds + `)
 			AND a.parent_id=0 
             ORDER BY sort ASC `
 	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
 	return
 }
+
 // GetMenuByParentIdRoleIds 根据管理员多个角色查询子菜单ID
 func GetMenuByParentIdRoleIds(roleIds string, parentId int) (items []*ChildMenu, err error) {
 	sql := ` SELECT DISTINCT a.* FROM sys_menu AS a
-			INNER JOIN sys_role_menu AS b ON a.menu_id=b.menu_id
+			INNER JOIN sys_role_menu AS b ON a.menu_id=b.menu_id AND b.type = 0
 			INNER JOIN sys_role AS c ON b.role_id=c.role_id
-			WHERE c.role_id in (`+roleIds+`)
+			WHERE c.role_id in (` + roleIds + `)
 			AND a.parent_id=? 
             ORDER BY a.sort ASC`
 	_, err = orm.NewOrm().Raw(sql, parentId).QueryRows(&items)
 	return
 }
+
+// GetMenuButtonsByRoleId 获取角色按钮菜单
+func GetMenuButtonsByRoleId(roleId int) (items []*SysMenu, err error) {
+	sql := `SELECT
+				r.*
+			FROM
+				sys_menu AS r
+			JOIN sys_role_menu AS rm ON r.menu_id = rm.menu_id AND rm.type = 0
+			WHERE
+				rm.role_id = ? AND r.menu_type <> 0
+			ORDER BY
+				r.sort ASC,
+				r.create_time DESC`
+	_, err = orm.NewOrm().Raw(sql, roleId).QueryRows(&items)
+	return
+}
+
+// SysMenuButtonResp 按钮菜单响应体
+type SysMenuButtonResp struct {
+	MenuId     int    `description:"菜单ID"`
+	ParentId   int    `description:"父级菜单ID"`
+	Name       string `description:"菜单名称或者按钮名称"`
+	MenuType   int    `description:"菜单类型: 0-菜单; 1-按钮"`
+	ButtonCode string `description:"按钮唯一标识"`
+}
+
+// SysMenuListResp ETA商家菜单列表响应体
+type SysMenuListResp struct {
+	ChoiceList     []int          `description:"已选菜单"`
+	HalfChoiceList []int          `description:"半选菜单-方便前端回显用的"`
+	List           []*SysMenuItem `description:"菜单列表"`
+}
+
+// SysMenuItem ETA商家菜单
+type SysMenuItem struct {
+	MenuId       int
+	ParentId     int            `description:"父级菜单ID"`
+	Name         string         `description:"菜单名称或者按钮名称"`
+	RootId       int            `description:"顶层菜单ID"`
+	Sort         string         `description:"排序"`
+	Path         string         `description:"路由地址"`
+	PathName     string         `description:"路由名称"`
+	IconPath     string         `description:"菜单图标地址"`
+	Component    int            `description:"组件路径"`
+	Hidden       int            `description:"是否隐藏:1-隐藏 0-显示"`
+	HiddenLayout int            `description:"是否隐藏layout:1-隐藏 0-显示"`
+	Level        int            `description:"菜单等级:1-2-3"`
+	MenuType     int            `description:"菜单类型: 0-菜单; 1-按钮; 2-字段(需要特殊处理)"`
+	ButtonCode   string         `description:"按钮/菜单唯一标识"`
+	Children     []*SysMenuItem `description:"子菜单"`
+}

+ 44 - 1
models/system/sys_role.go

@@ -152,7 +152,7 @@ func GetRoleMenuByParentId(parentId int) (items []*RoleMenu, err error) {
 func GetCheckListRoleMenu(roleId, parentId int) (items []*RoleMenuList, err error) {
 	sql := ` SELECT b.menu_id FROM sys_role_menu AS a
 				INNER JOIN sys_menu AS b ON a.menu_id=b.menu_id
-				WHERE a.role_id=?
+				WHERE a.role_id=? AND a.type = 0
 				AND b.parent_id=? `
 	_, err = orm.NewOrm().Raw(sql, roleId, parentId).QueryRows(&items)
 	return
@@ -175,6 +175,7 @@ type SysRoleMenu struct {
 	RoleMenuId int `orm:"column(role_menu_id);pk" description:"关联id"`
 	RoleId     int
 	MenuId     int
+	Type       int `description:"类型:0-全选;1-半选(此字段仅用于前端的回显)"`
 }
 
 func AddSysRoleMenu(item *SysRoleMenu) (lastId int64, err error) {
@@ -183,6 +184,36 @@ func AddSysRoleMenu(item *SysRoleMenu) (lastId int64, err error) {
 	return
 }
 
+// CreateMultiSysRoleMenu 删除并新增角色权限
+func CreateMultiSysRoleMenu(roleId int, items []*SysRoleMenu) (err error) {
+	if roleId == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	tx, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = tx.Rollback()
+			return
+		}
+		_ = tx.Commit()
+	}()
+
+	sql := `DELETE FROM sys_role_menu WHERE role_id = ?`
+	_, err = tx.Raw(sql, roleId).Exec()
+	if err != nil {
+		return
+	}
+
+	if len(items) > 0 {
+		_, err = tx.InsertMulti(len(items), items)
+	}
+	return
+}
+
 func GetSysRoleAll(levelFlag bool) (items []*SysRoleItem, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM sys_role WHERE 1=1`
@@ -208,3 +239,15 @@ func GetEnglishAuthRoleIds(roleCodes []string) (roleIds []int, err error) {
 	_, err = o.Raw(sql, roleCodes).QueryRows(&roleIds)
 	return
 }
+
+// GetSysRoleMenuByRoleId 获取角色关联菜单
+func GetSysRoleMenuByRoleId(roleId int) (items []*SysRoleMenu, err error) {
+	sql := `SELECT
+				*
+			FROM
+				sys_role_menu
+			WHERE
+				role_id = ?`
+	_, err = orm.NewOrm().Raw(sql, roleId).QueryRows(&items)
+	return
+}

+ 27 - 9
routers/commentsRouter.go

@@ -4597,15 +4597,6 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["hongze/hz_eta_api/controllers:CompanyPermissionController"] = append(beego.GlobalControllerRouter["hongze/hz_eta_api/controllers:CompanyPermissionController"],
-        beego.ControllerComments{
-            Method: "PermissionVariety",
-            Router: `/permission/variety`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
     beego.GlobalControllerRouter["hongze/hz_eta_api/controllers:CompanySellerController"] = append(beego.GlobalControllerRouter["hongze/hz_eta_api/controllers:CompanySellerController"],
         beego.ControllerComments{
             Method: "CheckListV2",
@@ -5920,6 +5911,33 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_eta_api/controllers:SysRoleController"] = append(beego.GlobalControllerRouter["hongze/hz_eta_api/controllers:SysRoleController"],
+        beego.ControllerComments{
+            Method: "SysRoleMenuAuthList",
+            Router: `/role/menu/auth_list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hz_eta_api/controllers:SysRoleController"] = append(beego.GlobalControllerRouter["hongze/hz_eta_api/controllers:SysRoleController"],
+        beego.ControllerComments{
+            Method: "SysRoleMenuAuthSave",
+            Router: `/role/menu/auth_save`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hz_eta_api/controllers:SysRoleController"] = append(beego.GlobalControllerRouter["hongze/hz_eta_api/controllers:SysRoleController"],
+        beego.ControllerComments{
+            Method: "ButtonList",
+            Router: `/role/menu/buttons`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_eta_api/controllers:SysRoleController"] = append(beego.GlobalControllerRouter["hongze/hz_eta_api/controllers:SysRoleController"],
         beego.ControllerComments{
             Method: "SysRoleMenusList",

+ 1 - 1
services/report_push.go

@@ -16,7 +16,7 @@ import (
 
 // SendReportToEmail 发送报告邮件
 func SendReportToEmail(report *models.ReportDetail) (err error) {
-	if utils.SystemType == "custom" {
+	if utils.BusinessCode != utils.BusinessCodeRelease {
 		// 客户不做报告邮件推送
 		return
 	}

+ 21 - 12
services/sandbox/sandbox.go

@@ -15,18 +15,22 @@ import (
 )
 
 // AddSandbox 新增沙盘
-func AddSandbox(req request.AddAndEditSandbox, opUserId int, opUserName string) (resp *sandbox.SandboxSaveResp, err error) {
-	resp = new(sandbox.SandboxSaveResp)
+func AddSandbox(req request.AddAndEditSandbox, opUserId int, opUserName string, ignoreVariety bool) (resp *sandbox.SandboxSaveResp, err error) {
 	// 获取产品权限详情
-	chartPermissionInfo, err := company.GetChartPermissionListById(req.ChartPermissionId)
-	if err != nil {
-		return
+	var permissionName string
+	if !ignoreVariety {
+		chartPermissionInfo, e := company.GetChartPermissionListById(req.ChartPermissionId)
+		if e != nil {
+			err = e
+			return
+		}
+		permissionName = chartPermissionInfo.PermissionName
 	}
 	//沙盘主表信息
 	sandboxInfo := &sandbox.Sandbox{
 		Name:                utils.TrimStr(req.Name),
 		ChartPermissionId:   req.ChartPermissionId,
-		ChartPermissionName: chartPermissionInfo.PermissionName,
+		ChartPermissionName: permissionName,
 		CurrVersion:         1,
 		Code:                GenerateCode(),
 		Content:             req.Content,
@@ -74,7 +78,7 @@ func AddSandbox(req request.AddAndEditSandbox, opUserId int, opUserName string)
 }
 
 // UpdateSandbox 更新沙盘
-func UpdateSandbox(req request.AddAndEditSandbox, opUserId int, opUserName string) (resp *sandbox.SandboxSaveResp, err error, errMsg string) {
+func UpdateSandbox(req request.AddAndEditSandbox, opUserId int, opUserName string, ignoreVariety bool) (resp *sandbox.SandboxSaveResp, err error, errMsg string) {
 	resp = new(sandbox.SandboxSaveResp)
 	// 获取沙盘版本信息
 	sandboxVersion, err := sandbox.GetSandboxVersionBySandboxVersionCode(req.SandboxVersionCode)
@@ -114,16 +118,21 @@ func UpdateSandbox(req request.AddAndEditSandbox, opUserId int, opUserName strin
 	}
 
 	// 获取产品权限详情
-	chartPermissionInfo, err := company.GetChartPermissionListById(req.ChartPermissionId)
-	if err != nil {
-		return
+	var permissionName string
+	if !ignoreVariety {
+		chartPermissionInfo, e := company.GetChartPermissionListById(req.ChartPermissionId)
+		if e != nil {
+			err = e
+			return
+		}
+		permissionName = chartPermissionInfo.PermissionName
 	}
 
 	//如果只更新了沙盘名称,那么只去修改最新版本的沙盘名称,而不去累计版本
 	if isUpdateName == true && isUpdateContent == false {
 		sandboxInfo.Name = utils.TrimStr(req.Name)
 		sandboxInfo.ChartPermissionId = req.ChartPermissionId
-		sandboxInfo.ChartPermissionName = chartPermissionInfo.PermissionName
+		sandboxInfo.ChartPermissionName = permissionName
 		sandboxInfo.Content = req.Content
 		sandboxInfo.PicUrl = utils.TrimStr(req.PicUrl)
 		sandboxInfo.OpUserId = opUserId
@@ -167,7 +176,7 @@ func UpdateSandbox(req request.AddAndEditSandbox, opUserId int, opUserName strin
 	} else {
 		sandboxInfo.Name = utils.TrimStr(req.Name)
 		sandboxInfo.ChartPermissionId = req.ChartPermissionId
-		sandboxInfo.ChartPermissionName = chartPermissionInfo.PermissionName
+		sandboxInfo.ChartPermissionName = permissionName
 		sandboxInfo.CurrVersion = sandboxInfo.CurrVersion + 1
 		sandboxInfo.Content = req.Content
 		sandboxInfo.PicUrl = utils.TrimStr(req.PicUrl)

+ 12 - 0
services/system.go

@@ -108,3 +108,15 @@ func CheckRaiAdmin(adminId int) (isRai bool, err error) {
 	}
 	return
 }
+
+// GetMenuTreeRecursive 递归菜单树
+func GetMenuTreeRecursive(list []*system.SysMenuItem, parentId int) []*system.SysMenuItem {
+	res := make([]*system.SysMenuItem, 0)
+	for _, v := range list {
+		if v.ParentId == parentId {
+			v.Children = GetMenuTreeRecursive(list, v.MenuId)
+			res = append(res, v)
+		}
+	}
+	return res
+}

+ 3 - 0
services/user.go

@@ -39,6 +39,9 @@ func SwitchHzUserEnabledByMobile(opEnabled int, mobile string) (err error) {
 
 // DeleteHzUserByMobile 根据手机号删除弘则研究下的联系人
 func DeleteHzUserByMobile(mobile string) (err error) {
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		return
+	}
 	if mobile == "" {
 		return
 	}

+ 0 - 9
utils/config.go

@@ -23,8 +23,6 @@ var (
 	Re          error        //redis错误
 )
 
-var SystemType string // 系统类型; hz:弘则;trial:试用平台;custom:客户
-
 // 基础配置
 var (
 	STATIC_DIR       string
@@ -221,13 +219,6 @@ func init() {
 		panic(any(Re))
 	}
 
-	// 系统类型
-	systemType, err := web.AppConfig.String("system_type")
-	if err != nil {
-		panic(any("配置文件读取system_type错误 " + err.Error()))
-	}
-	SystemType = systemType
-
 	// 项目中文名称
 	appNameCn, err := web.AppConfig.String("app_name_cn")
 	if err != nil {

+ 6 - 0
utils/constants.go

@@ -299,3 +299,9 @@ const (
 
 // BusinessCodeSalt 商家编码盐值
 const BusinessCodeSalt = "dr7WY0OZgGR7upw1"
+
+// 自用商户号
+const (
+	BusinessCodeSandbox = "E2023080700" // 沙箱环境
+	BusinessCodeRelease = "E2023080900" // 生产环境
+)