Browse Source

Merge branch 'chart_15.4'

Roc 1 year ago
parent
commit
de77f0ec8e

+ 19 - 5
controllers/data_manage/chart_classify.go

@@ -263,11 +263,25 @@ func handleNoPermissionChart(allNodes []*data_manage.ChartClassifyItems, noPermi
 
 				if chartList.Children != nil {
 					for _, chartInfo := range chartList.Children {
+						thirdInfo := *chartInfo
+						thirdList := make([]*data_manage.ChartClassifyItems, 0)
 						// 如果指标不可见,那么就不返回该指标
 						if _, ok := noPermissionChartIdMap[chartInfo.ChartInfoId]; ok {
 							continue
 						}
 						tmpList = append(tmpList, chartInfo)
+
+						if chartInfo.Children != nil {
+							for _, thirdChart := range chartInfo.Children {
+								// 如果指标不可见,那么就不返回该指标
+								if _, ok := noPermissionChartIdMap[chartInfo.ChartInfoId]; ok {
+									continue
+								}
+								thirdList = append(thirdList, thirdChart)
+							}
+						}
+						thirdInfo.Children = thirdList
+						tmpList = append(tmpList, &thirdInfo)
 					}
 				}
 				tmpInfo.Children = tmpList
@@ -931,14 +945,14 @@ func (this *ChartClassifyController) ChartClassifyChartListV2() {
 
 	isShowMe, _ := this.GetBool("IsShowMe")
 	if isShowMe {
-		errMsg, err := getChartClassifyListForMeV2(*this.SysUser, resp)
-		if err != nil {
-			br.Msg = errMsg
-			br.ErrMsg = err.Error()
+		allChartInfo, err := data_manage.GetChartInfoByAdminIdAndClassify([]int{utils.CHART_SOURCE_DEFAULT}, sysUser.AdminId, chartClassifyId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取全部数据失败,Err:" + err.Error()
 			return
 		}
 		// 移除没有权限的图表
-		allNodes := handleNoPermissionChart(resp.AllNodes, noPermissionChartIdMap)
+		allNodes := handleNoPermissionChart(allChartInfo, noPermissionChartIdMap)
 		resp.AllNodes = allNodes
 
 		br.Ret = 200

+ 147 - 0
controllers/data_manage/edb_classify.go

@@ -789,3 +789,150 @@ func (this *EdbClassifyController) ClassifyEdbInfoList() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// ItemsV3
+// @Title 分类列表
+// @Description 分类列表接口
+// @Success 200 {object} data_manage.EdbClassifyListResp
+// @router /classify/items/v3 [get]
+func (this *EdbClassifyController) ItemsV3() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	rootList, err := data_manage.GetEdbClassifyByParentId(0, 0)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	rootTwoList, err := data_manage.GetEdbClassifyByParentIdTwo( 0)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	classifyAll, err := data_manage.GetEdbClassifyAllV2(0)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	rootTwoMap := make(map[int][]*data_manage.EdbClassifyItems)
+	for _, v := range rootTwoList {
+		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
+		v.Button = button
+
+		rootTwoMap[v.ParentId] = append(rootTwoMap[v.ParentId], v)
+	}
+	rootTwoChildMap := make(map[int][]*data_manage.EdbClassifyItems)
+	for _, v := range classifyAll {
+		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
+		v.Button = button
+		if v.Level == 3 {
+			rootTwoChildMap[v.ParentId] = append(rootTwoChildMap[v.ParentId], v)
+		}
+	}
+
+	nodeAll := make([]*data_manage.EdbClassifyItems, 0)
+	for _, v := range rootList {
+		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
+		v.Button = button
+
+		if existItems, ok := rootTwoMap[v.ClassifyId]; ok {
+			v.Children = existItems
+			for _, item := range existItems {
+				button := data.GetEdbClassifyOpButton(this.SysUser, item.SysUserId)
+				item.Button = button
+
+				if existItems, ok := rootTwoChildMap[item.ClassifyId]; ok {
+					for _, existItem := range existItems {
+						button := data.GetPredictEdbOpButton(this.SysUser, v.SysUserId)
+						button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
+						existItem.Button = button
+					}
+					item.Children = existItems
+				} else {
+					items := make([]*data_manage.EdbClassifyItems, 0)
+					item.Children = items
+				}
+			}
+		} else {
+			items := make([]*data_manage.EdbClassifyItems, 0)
+			v.Children = items
+		}
+		nodeAll = append(nodeAll, v)
+	}
+	language := `CN`
+	// 指标显示的语言
+	{
+		configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.EdbLanguageVar)
+		if configDetail != nil {
+			language = configDetail.ConfigValue
+		} else {
+			configDetail, _ = system.GetDefaultConfigDetailByCode(system.EdbLanguageVar)
+			if configDetail != nil {
+				language = configDetail.ConfigValue
+			}
+		}
+	}
+	resp := new(data_manage.EdbClassifyListResp)
+	resp.AllNodes = nodeAll
+	resp.Language = language
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// EdbClassifyMoveV2
+// @Title 分类移动接口v2
+// @Description 分类移动接口v2
+// @Success 200 {object} data_manage.MoveEdbClassifyReq
+// @router /edb_classify/move/v2 [post]
+//func (this *EdbClassifyController) EdbClassifyMoveV2() {
+//	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
+//	}
+//
+//	var req data_manage.MoveEdbClassifyReq
+//	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+//	if err != nil {
+//		br.Msg = "参数解析异常!"
+//		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+//		return
+//	}
+//
+//	if req.ClassifyId <= 0 {
+//		br.Msg = "参数错误"
+//		br.ErrMsg = "分类id小于等于0"
+//		return
+//	}
+//
+//	err, errMsg := data.MoveEdbClassify(req.ClassifyId, req.ParentClassifyId, req.PrevClassifyId, req.NextClassifyId)
+//	if errMsg != `` {
+//		br.Msg = errMsg
+//		br.ErrMsg = errMsg
+//		if err != nil {
+//			br.ErrMsg = err.Error()
+//		} else {
+//			br.IsSendEmail = false
+//		}
+//		return
+//	}
+//
+//	br.Ret = 200
+//	br.Success = true
+//	br.Msg = "移动成功"
+//}

+ 158 - 0
controllers/data_manage/predict_edb_classify.go

@@ -347,6 +347,7 @@ func (this *PredictEdbClassifyController) Delete() {
 		resp = data_manage.AddEdbInfoResp{
 			EdbInfoId:  nextItem.EdbInfoId,
 			UniqueCode: nextItem.UniqueCode,
+			ClassifyId: nextItem.ClassifyId,
 		}
 	}
 	br.Ret = 200
@@ -494,3 +495,160 @@ func (this *PredictEdbClassifyController) Move() {
 	br.Success = true
 	br.Msg = "移动成功"
 }
+
+// ListV2
+// @Title 预测指标分类列表
+// @Description 预测指标分类列表接口
+// @Param   IsOnlyMe   query   bool  false       "是否只看我的"
+// @Success 200 {object} data_manage.EdbClassifyListResp
+// @router /predict_classify/list/v2 [get]
+func (this *PredictEdbClassifyController) ListV2() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	isOnlyMe, _ := this.GetBool("IsOnlyMe")
+
+	rootList, err := data_manage.GetEdbClassifyByParentId(0, 1)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	// 获取当前账号的不可见指标
+	obj := data_manage.EdbInfoNoPermissionAdmin{}
+	confList, err := obj.GetAllListByAdminId(this.SysUser.AdminId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
+		return
+	}
+	noPermissionEdbInfoIdMap := make(map[int]bool)
+	for _, v := range confList {
+		noPermissionEdbInfoIdMap[v.EdbInfoId] = true
+	}
+
+	allEdbInfo, err := data_manage.GetPredictEdbInfoAll(1)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	edbInfoMap := make(map[int][]*data_manage.EdbClassifyItems)
+	for _, v := range allEdbInfo {
+		// 如果指标不可见,那么就不返回该指标
+		if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
+			continue
+		}
+		button := data.GetPredictEdbOpButton(this.SysUser, v.SysUserId)
+		button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
+		button.OpButton = false
+		button.DeleteButton = false
+		v.Button = button
+		if isOnlyMe {
+			if v.SysUserId == this.SysUser.AdminId {
+				edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
+			}
+		} else {
+			edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
+		}
+	}
+	rootTwoList, err := data_manage.GetEdbClassifyByParentIdTwo( 1)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	classifyAll, err := data_manage.GetEdbClassifyAllV2(1)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	rootTwoMap := make(map[int][]*data_manage.EdbClassifyItems)
+	for _, v := range rootTwoList {
+		button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
+		v.Button = button
+		rootTwoMap[v.ParentId] = append(rootTwoMap[v.ParentId], v)
+	}
+	rootTwoChildMap := make(map[int][]*data_manage.EdbClassifyItems)
+	for _, v := range classifyAll {
+		button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
+		v.Button = button
+		if v.Level == 3 {
+			rootTwoChildMap[v.ParentId] = append(rootTwoChildMap[v.ParentId], v)
+		}
+	}
+
+	nodeAll := make([]*data_manage.EdbClassifyItems, 0)
+	for _, v := range rootList {
+		button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
+		v.Button = button
+
+		if existItems, ok := rootTwoMap[v.ClassifyId]; ok {
+			v.Children = existItems
+			for _, item := range existItems {
+				item.Button = button
+
+				if existItems, ok := rootTwoChildMap[item.ClassifyId]; ok {
+					item.Children = existItems
+					for _, existItem := range existItems {
+						if _, ok := noPermissionEdbInfoIdMap[existItem.EdbInfoId]; ok {
+							continue
+						}
+						button := data.GetPredictEdbOpButton(this.SysUser, v.SysUserId)
+						button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
+						existItem.Button = button
+						if isOnlyMe {
+							if existItem.SysUserId == this.SysUser.AdminId {
+								edbInfoMap[existItem.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
+							}
+						} else {
+							edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
+						}
+					}
+				} else {
+					items := make([]*data_manage.EdbClassifyItems, 0)
+					item.Children = items
+				}
+			}
+		} else {
+			items := make([]*data_manage.EdbClassifyItems, 0)
+			v.Children = items
+		}
+		nodeAll = append(nodeAll, v)
+	}
+	// 是否允许添加分类
+	canOpClassify := true
+
+	// 如果不是 超管 或者 ficc管理员,那么就没有权限
+	if this.SysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && this.SysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_FICC_ADMIN {
+		canOpClassify = false
+	}
+
+	language := `CN`
+	// 指标显示的语言
+	{
+		configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.PredictEdbLanguageVar)
+		if configDetail != nil {
+			language = configDetail.ConfigValue
+		} else {
+			configDetail, _ = system.GetDefaultConfigDetailByCode(system.PredictEdbLanguageVar)
+			if configDetail != nil {
+				language = configDetail.ConfigValue
+			}
+		}
+	}
+
+	resp := data_manage.EdbClassifyListResp{
+		AllNodes:      nodeAll,
+		CanOpClassify: canOpClassify,
+		Language:      language,
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 62 - 3
controllers/data_manage/predict_edb_info.go

@@ -76,14 +76,14 @@ func (this *PredictEdbInfoController) EdbChartList() {
 
 	// 筛选分类
 	if classifyId > 0 {
-		_, err := data_manage.GetEdbClassifyById(classifyId)
+		classifyIds, err := data_manage.GetEdbClassify(classifyId)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取分类信息失败"
 			br.ErrMsg = "获取分类信息失败,GetEdbClassifyById,Err:" + err.Error()
 			return
 		}
-		condition += " AND classify_id = ? "
-		pars = append(pars, classifyId)
+		condition += " AND classify_id IN(" + classifyIds + ") "
+
 	}
 	if keyword != "" {
 		condition += ` AND  ( excel_name LIKE ? )`
@@ -1792,3 +1792,62 @@ func (this *PredictEdbInfoController) Modify() {
 //func init() {
 //	data.AddOrEditAllEdbInfoToEs()
 //}
+
+// @Title 获取分类下指标接口
+// @Description 获取分类下指标接口
+// @Param   ClassifyId   query   int  true       "分类id"
+// @Success 200 {object} data_manage.EdbClassifyListResp
+// @router /predict_edb_info/items [get]
+func (this *PredictEdbInfoController) ClassifyEdbInfoItems() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	classifyId, _ := this.GetInt("ClassifyId")
+	if classifyId <= 0 {
+		br.Msg = "参数错误,请刷新页面"
+		return
+	}
+
+	// 获取当前账号的不可见指标
+	obj := data_manage.EdbInfoNoPermissionAdmin{}
+	confList, err := obj.GetAllListByAdminId(this.SysUser.AdminId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
+		return
+	}
+	noPermissionEdbInfoIdMap := make(map[int]bool)
+	for _, v := range confList {
+		noPermissionEdbInfoIdMap[v.EdbInfoId] = true
+	}
+
+	allEdbInfo, err := data_manage.GetEdbInfoByClassifyId(classifyId, 1)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+
+	list := make([]*data_manage.EdbClassifyItems, 0)
+	for _, v := range allEdbInfo {
+		// 如果指标不可见,那么就不返回该指标
+		if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
+			continue
+		}
+		button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE)
+		button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
+		v.Button = button
+
+		list = append(list, v)
+	}
+
+	resp := new(data_manage.ClassifyEdbInfoListResp)
+	resp.EdbInfoList = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 1 - 0
controllers/data_manage/predict_edb_info_calculate.go

@@ -356,6 +356,7 @@ func (this *PredictEdbInfoController) BatchCalculateBatchSave() {
 			CalculateId: v.CalculateId,
 			EdbInfoId:   result.EdbInfoId,
 			UniqueCode:  result.UniqueCode,
+			ClassifyId:  req.ClassifyId,
 		})
 	}
 

+ 15 - 0
models/data_manage/chart_classify.go

@@ -256,3 +256,18 @@ func GetChartClassifyAllFromETA() (items []*ChartClassifyItems, err error) {
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
+
+func GetChartClassifyTwo(source int) (items []*ChartClassifyItems, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM chart_classify WHERE level=3 AND source = ? order by sort asc,chart_classify_id asc`
+	_, err = o.Raw(sql, source).QueryRows(&items)
+	return
+}
+
+
+func GetChartClassifyByLevel(level, source int) (items []*ChartClassifyItems, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM chart_classify WHERE level=? AND source = ? order by sort asc,chart_classify_id asc`
+	_, err = o.Raw(sql, level, source).QueryRows(&items)
+	return
+}

+ 22 - 0
models/data_manage/chart_info.go

@@ -1727,3 +1727,25 @@ type ProfitFutureGoodChartResp struct {
 	ProfitName   string `description:"利润的名称"`
 	ProfitNameEn string `description:"利润的英文名称"`
 }
+
+func FIXChartClassifyId(newId, oldId int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` UPDATE chart_info SET chart_classify_id=? WHERE chart_classify_id=? `
+	_, err = o.Raw(sql, newId, oldId).Exec()
+	return
+}
+
+// GetChartInfoByAdminIdAndClassify 获取所有我创建的图表,用于分类展示
+func GetChartInfoByAdminIdAndClassify(sourceList []int, adminId, classifyId int) (items []*ChartClassifyItems, err error) {
+	num := len(sourceList)
+	if num <= 0 {
+		return
+	}
+
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT chart_info_id,chart_classify_id,chart_name AS chart_classify_name,
+             unique_code,sys_user_id,sys_user_real_name,date_type,start_date,end_date,chart_type,calendar,season_start_date,season_end_date
+            FROM chart_info where source in (` + utils.GetOrmInReplace(num) + `)  AND sys_user_id = ? AND chart_classify_id = ? ORDER BY sort asc,create_time ASC `
+	_, err = o.Raw(sql, sourceList, adminId, classifyId).QueryRows(&items)
+	return
+}

+ 143 - 0
models/data_manage/edb_classify.go

@@ -3,6 +3,8 @@ package data_manage
 import (
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"hongze/hz_eta_api/utils"
+	"strconv"
 	"time"
 )
 
@@ -266,3 +268,144 @@ func GetEdbClassifyMaxSort(parentId int, classifyType uint8) (sort int, err erro
 type ClassifyEdbInfoListResp struct {
 	EdbInfoList []*EdbClassifyItems
 }
+
+// GetEdbClassifyAllV2 获取普通指标的分类列表
+func GetEdbClassifyAllV2(classifyType int8) (items []*EdbClassifyItems, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM edb_classify WHERE parent_id <>0  AND classify_type = ?  order by sort asc,classify_id asc`
+	_, err = o.Raw(sql, classifyType).QueryRows(&items)
+	return
+}
+
+func GetEdbClassifyByParentIdTwo(classifyType int8) (items []*EdbClassifyItems, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM edb_classify WHERE level=2 AND classify_type = ?  order by sort asc,classify_id asc`
+	_, err = o.Raw(sql, classifyType).QueryRows(&items)
+	return
+}
+
+type AddEdbClassifyReqV2 struct {
+	ClassifyName string `description:"分类名称"`
+	ParentId     int    `description:"父级id,第一级传0"`
+	Level        int    `description:"层级,第一级传0,其余传上一级的层级"`
+	ClassifyType uint8  `description:"分类类型,0:普通指标分类,1:预测指标分类"`
+}
+
+// GetEdbClassifyMaxSortV2 获取分类下最大的排序数
+func GetEdbClassifyMaxSortV2(parentId int, classifyType uint8) (sort int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT Max(sort) AS sort FROM edb_classify WHERE parent_id=? AND parent_id_two=? AND classify_type=? `
+	err = o.Raw(sql, parentId, classifyType).QueryRow(&sort)
+	return
+}
+
+func GetEdbClassifyByLevel(level, source int) (items []*EdbClassifyItems, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM edb_classify WHERE level=? AND classify_type = ? `
+	_, err = o.Raw(sql, level, source).QueryRows(&items)
+	return
+}
+
+func FIXEdbClassifyId(newId, oldId int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` UPDATE edb_info SET classify_id=? WHERE classify_id=? `
+	_, err = o.Raw(sql, newId, oldId).Exec()
+	return
+}
+
+func FixEdbClassify()  {
+	//新增三级分类
+	list, err := GetEdbClassifyByLevel(2,0)
+	if err != nil {
+		return
+	}
+
+	for _, v := range list {
+		timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
+		classifyInfo := &EdbClassify{
+			//ClassifyId:      0,
+			ClassifyType:    0,
+			ClassifyName:    v.ClassifyName,
+			ParentId:        v.ClassifyId,
+			HasData:         0,
+			CreateTime:      time.Now(),
+			ModifyTime:      time.Now(),
+			SysUserRealName: "admin",
+			Level:           3,
+			UniqueCode:      utils.MD5(utils.DATA_PREFIX + "_" + timestamp),
+			Sort:            v.Sort,
+		}
+		if utils.RunMode == "debug" {
+			classifyInfo.SysUserId = 11
+		} else {
+			classifyInfo.SysUserId = 163
+		}
+		id, err := AddEdbClassify(classifyInfo)
+		if err != nil {
+			return
+		}
+
+		err = FIXEdbClassifyId(int(id),v.ClassifyId)
+		if err != nil {
+			return
+		}
+	}
+}
+
+func FixPredictEdbClassify()  {
+	//新增三级分类
+	list, err := GetEdbClassifyByLevel(2,1)
+	if err != nil {
+		return
+	}
+
+	for _, v := range list {
+		timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
+		classifyInfo := &EdbClassify{
+			//ClassifyId:      0,
+			ClassifyType:    1,
+			ClassifyName:    v.ClassifyName,
+			ParentId:        v.ClassifyId,
+			HasData:         0,
+			CreateTime:      time.Now(),
+			ModifyTime:      time.Now(),
+			SysUserRealName: "admin",
+			Level:           3,
+			UniqueCode:      utils.MD5(utils.DATA_PREFIX + "_" + timestamp),
+			Sort:            v.Sort,
+		}
+		if utils.RunMode == "debug" {
+			classifyInfo.SysUserId = 11
+		} else {
+			classifyInfo.SysUserId = 163
+		}
+		id, err := AddEdbClassify(classifyInfo)
+		if err != nil {
+			return
+		}
+
+		err = FIXEdbClassifyId(int(id),v.ClassifyId)
+		if err != nil {
+			return
+		}
+	}
+}
+
+func GetEdbClassify(classifyId int) (classifyIds string, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT GROUP_CONCAT(t.classify_id) AS classify_ids FROM (
+			SELECT a.classify_id FROM edb_classify AS a 
+			WHERE a.classify_id=?
+			UNION ALL
+			SELECT a.classify_id FROM edb_classify AS a 
+			WHERE a.parent_id=? UNION ALL
+	SELECT
+		classify_id 
+	FROM
+		edb_classify 
+WHERE
+	parent_id IN ( SELECT classify_id FROM edb_classify WHERE parent_id = ? )
+			)AS t`
+	err = o.Raw(sql, classifyId, classifyId, classifyId).QueryRow(&classifyIds)
+	return
+}

+ 1 - 0
models/data_manage/edb_info.go

@@ -551,6 +551,7 @@ func ModifyCalculateEdbInfo(item *EditEdbInfoReq) (err error) {
 type AddEdbInfoResp struct {
 	EdbInfoId  int    `description:"指标ID"`
 	UniqueCode string `description:"指标唯一编码"`
+	ClassifyId int    `description:"分类id"`
 }
 
 // 根据基础指标获取所有关联指标

+ 8 - 2
models/data_manage/my_chart.go

@@ -411,9 +411,15 @@ func GetChartClassify(chartClassifyId int) (chart_classify_id string, err error)
 			WHERE a.chart_classify_id=?
 			UNION ALL
 			SELECT a.chart_classify_id FROM chart_classify AS a 
-			WHERE a.parent_id=?
+			WHERE a.parent_id=? UNION ALL
+	SELECT
+		chart_classify_id 
+	FROM
+		chart_classify 
+WHERE
+	parent_id IN ( SELECT chart_classify_id FROM chart_classify WHERE parent_id = ? )
 			)AS t`
-	err = o.Raw(sql, chartClassifyId, chartClassifyId).QueryRow(&chart_classify_id)
+	err = o.Raw(sql, chartClassifyId, chartClassifyId, chartClassifyId).QueryRow(&chart_classify_id)
 	return
 }
 

+ 27 - 0
routers/commentsRouter.go

@@ -1618,6 +1618,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:EdbClassifyController"] = append(beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:EdbClassifyController"],
+        beego.ControllerComments{
+            Method: "ItemsV3",
+            Router: `/classify/items/v3`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:EdbClassifyController"] = append(beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:EdbClassifyController"],
         beego.ControllerComments{
             Method: "ListV2",
@@ -3148,6 +3157,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:PredictEdbClassifyController"] = append(beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:PredictEdbClassifyController"],
+        beego.ControllerComments{
+            Method: "ListV2",
+            Router: `/predict_classify/list/v2`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:PredictEdbClassifyController"] = append(beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:PredictEdbClassifyController"],
         beego.ControllerComments{
             Method: "Move",
@@ -3256,6 +3274,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:PredictEdbInfoController"] = append(beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:PredictEdbInfoController"],
+        beego.ControllerComments{
+            Method: "ClassifyEdbInfoItems",
+            Router: `/predict_edb_info/items`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:PredictEdbInfoController"] = append(beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:PredictEdbInfoController"],
         beego.ControllerComments{
             Method: "List",

+ 41 - 0
services/data/chart_classify.go

@@ -2,6 +2,9 @@ package data
 
 import (
 	"hongze/hz_eta_api/models/data_manage"
+	"hongze/hz_eta_api/utils"
+	"strconv"
+	"time"
 )
 
 func chartClassifyHaveChild(allNode []*data_manage.ChartClassifyItems, node *data_manage.ChartClassifyItems) (childs []*data_manage.ChartClassifyItems, yes bool) {
@@ -34,3 +37,41 @@ func ChartClassifyItemsMakeTree(allNode []*data_manage.ChartClassifyItems, node
 		node.Children = childrenArr
 	}
 }
+
+func FixChartClassify()  {
+	//新增三级分类
+	list, err := data_manage.GetChartClassifyByLevel(2,1)
+	if err != nil {
+		return
+	}
+
+	for _, v := range list {
+		classify := new(data_manage.ChartClassify)
+		classify.ParentId = v.ChartClassifyId
+		classify.ChartClassifyName = v.ChartClassifyName
+		classify.HasData = 0
+		classify.CreateTime = time.Now()
+		classify.ModifyTime = time.Now()
+		if utils.RunMode == "debug" {
+			classify.SysUserId = 11
+		} else {
+			classify.SysUserId = 163
+		}
+		classify.SysUserRealName = "admin"
+		classify.Level = 3
+		timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
+		classify.UniqueCode = utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
+		classify.Sort = v.Sort
+		classify.Source = utils.CHART_SOURCE_DEFAULT
+
+		id, err := data_manage.AddChartClassify(classify)
+		if err != nil {
+			return
+		}
+
+		err = data_manage.FIXChartClassifyId(int(id),v.ChartClassifyId)
+		if err != nil {
+			return
+		}
+	}
+}