瀏覽代碼

Merge remote-tracking branch 'origin/dm' into dm

Roc 5 月之前
父節點
當前提交
a9480e8fe5

+ 6 - 0
controllers/bi_approve/bi_approve.go

@@ -280,6 +280,12 @@ func (this *BiApproveController) Refuse() {
 		br.ErrMsg = fmt.Sprintf("参数有误, BiApproveId: %d", req.BiApproveId)
 		return
 	}
+	maxStrLen := 500
+	approvelen := len([]rune(req.ApproveRemark))
+	if approvelen > maxStrLen {
+		br.Msg = fmt.Sprintf("审批驳回原因不能超过%d字", maxStrLen)
+		return
+	}
 	msg, err := biapprove.BiApproveRefuse(req.BiApproveId, sysUser.AdminId, req.ApproveRemark)
 	if err != nil {
 		if msg != "" {

+ 1 - 3
controllers/bi_dashboard.go

@@ -441,9 +441,7 @@ func (this *BIDaShboardController) ShareList() {
 	grantList := bi_dashboard.RespGroupList{}
 
 	// 获取我的看板列表
-	ShareCond := ` AND sys_admin_id = ? AND state IN (1,6) `
-	SharePars := []interface{}{this.SysUser.AdminId}
-	ShareList, err := bi_dashboard.GetBiDashboardList(ShareCond, SharePars)
+	ShareList, err := bi_dashboard.GetAllMyShareList(this.SysUser.AdminId)
 	if err != nil {
 		err = errors.New("我的看板列表查询出错:" + err.Error())
 		br.ErrMsg = err.Error()

+ 66 - 12
controllers/data_manage/chart_classify.go

@@ -435,6 +435,7 @@ func (this *ChartClassifyController) DeleteChartClassifyCheck() {
 	}
 	var deleteStatus int
 	var tipsMsg string
+	childIds := make([]int, 0)
 	//删除分类
 	if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
 		// 查找分类
@@ -463,12 +464,38 @@ func (this *ChartClassifyController) DeleteChartClassifyCheck() {
 		}
 
 		//判断图表分类下,是否含有图表
-		count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		classifyAll, err := data_manage.GetChartClassifyAllBySource(utils.CHART_SOURCE_DEFAULT)
 		if err != nil {
 			br.Msg = "删除失败"
-			br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
 			return
 		}
+		classifyAllMap := make(map[int]*data_manage.ChartClassifyItems)
+		for _, v := range classifyAll {
+			classifyAllMap[v.ChartClassifyId] = v
+		}
+		data.GetChartClassifyChildIds(req.ChartClassifyId, classifyAllMap, &childIds)
+		condition := ``
+		pars := make([]interface{}, 0)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds, ",")
+			condition = ` AND chart_classify_id IN (`+ ids +`) `
+		} else {
+			condition = ` AND chart_classify_id = ? `
+			pars = append(pars, req.ChartClassifyId)
+		}
+		count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			br.Msg = "判断图表名称是否存在失败"
+			br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
+			return
+		}
+		//count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		//if err != nil {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
+		//	return
+		//}
 
 		if count > 0 {
 			deleteStatus = 1
@@ -477,13 +504,13 @@ func (this *ChartClassifyController) DeleteChartClassifyCheck() {
 	}
 
 	if deleteStatus != 1 && req.ChartInfoId == 0 {
-		classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
-		if err != nil && !utils.IsErrNoRow(err) {
-			br.Msg = "删除失败"
-			br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
-			return
-		}
-		if classifyCount > 0 {
+		//classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
+		//if err != nil && !utils.IsErrNoRow(err) {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+		//	return
+		//}
+		if len(childIds) > 0 {
 			deleteStatus = 2
 			tipsMsg = "确认删除当前目录及包含的子目录吗"
 		}
@@ -564,12 +591,39 @@ func (this *ChartClassifyController) DeleteChartClassify() {
 		}
 
 		//判断是否含有指标
-		count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
-		if err != nil && !utils.IsErrNoRow(err) {
+		childIds := make([]int, 0)
+		classifyAll, err := data_manage.GetChartClassifyAllBySource(utils.CHART_SOURCE_DEFAULT)
+		if err != nil {
 			br.Msg = "删除失败"
-			br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
+			return
+		}
+		classifyAllMap := make(map[int]*data_manage.ChartClassifyItems)
+		for _, v := range classifyAll {
+			classifyAllMap[v.ChartClassifyId] = v
+		}
+		data.GetChartClassifyChildIds(req.ChartClassifyId, classifyAllMap, &childIds)
+		condition := ``
+		pars := make([]interface{}, 0)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds, ",")
+			condition = ` AND chart_classify_id IN (`+ ids +`) `
+		} else {
+			condition = ` AND chart_classify_id = ? `
+			pars = append(pars, req.ChartClassifyId)
+		}
+		count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			br.Msg = "判断图表名称是否存在失败"
+			br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
 			return
 		}
+		//count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		//if err != nil && !utils.IsErrNoRow(err) {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
+		//	return
+		//}
 
 		if count > 0 {
 			br.Msg = "该目录下存在关联指标,不可删除"

+ 59 - 5
controllers/data_manage/correlation/correlation_chart_classify.go

@@ -343,12 +343,39 @@ func (this *CorrelationChartClassifyController) DeleteChartClassifyCheck() {
 	//删除分类
 	if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
 		//判断相关性图表分类下,是否含有图表
-		count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		childIds := make([]int, 0)
+		classifyAll, err := data_manage.GetChartClassifyAllBySource(utils.CHART_SOURCE_CORRELATION)
 		if err != nil {
 			br.Msg = "删除失败"
-			br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
+			return
+		}
+		classifyAllMap := make(map[int]*data_manage.ChartClassifyItems)
+		for _, v := range classifyAll {
+			classifyAllMap[v.ChartClassifyId] = v
+		}
+		data.GetChartClassifyChildIds(req.ChartClassifyId, classifyAllMap, &childIds)
+		condition := ``
+		pars := make([]interface{}, 0)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds, ",")
+			condition = ` AND chart_classify_id IN (`+ ids +`) `
+		} else {
+			condition = ` AND chart_classify_id = ? `
+			pars = append(pars, req.ChartClassifyId)
+		}
+		count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			br.Msg = "判断图表名称是否存在失败"
+			br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
 			return
 		}
+		//count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		//if err != nil {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+		//	return
+		//}
 
 		if count > 0 {
 			deleteStatus = 1
@@ -419,12 +446,39 @@ func (this *CorrelationChartClassifyController) DeleteChartClassify() {
 	//删除分类
 	if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
 		//判断是否含有指标
-		count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
-		if err != nil && !utils.IsErrNoRow(err) {
+		childIds := make([]int, 0)
+		classifyAll, err := data_manage.GetChartClassifyAllBySource(utils.CHART_SOURCE_CORRELATION)
+		if err != nil {
 			br.Msg = "删除失败"
-			br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
+			return
+		}
+		classifyAllMap := make(map[int]*data_manage.ChartClassifyItems)
+		for _, v := range classifyAll {
+			classifyAllMap[v.ChartClassifyId] = v
+		}
+		data.GetChartClassifyChildIds(req.ChartClassifyId, classifyAllMap, &childIds)
+		condition := ``
+		pars := make([]interface{}, 0)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds, ",")
+			condition = ` AND chart_classify_id IN (`+ ids +`) `
+		} else {
+			condition = ` AND chart_classify_id = ? `
+			pars = append(pars, req.ChartClassifyId)
+		}
+		count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			br.Msg = "判断图表名称是否存在失败"
+			br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
 			return
 		}
+		//count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		//if err != nil && !utils.IsErrNoRow(err) {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
+		//	return
+		//}
 
 		if count > 0 {
 			br.Msg = "该目录下存在关联指标,不可删除"

+ 67 - 12
controllers/data_manage/cross_variety/classify.go

@@ -177,15 +177,43 @@ func (c *ClassifyController) DeleteChartClassifyCheck() {
 	}
 	var deleteStatus int
 	var tipsMsg string
+	childIds := make([]int, 0)
 	//删除分类
 	if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
 		//判断跨品种分析图表分类下,是否含有图表
-		count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+
+		classifyAll, err := data_manage.GetChartClassifyAllBySource(utils.CHART_SOURCE_CROSS_HEDGING)
 		if err != nil {
 			br.Msg = "删除失败"
-			br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
+			return
+		}
+		classifyAllMap := make(map[int]*data_manage.ChartClassifyItems)
+		for _, v := range classifyAll {
+			classifyAllMap[v.ChartClassifyId] = v
+		}
+		data.GetChartClassifyChildIds(req.ChartClassifyId, classifyAllMap, &childIds)
+		condition := ``
+		pars := make([]interface{}, 0)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds, ",")
+			condition = ` AND chart_classify_id IN (`+ ids +`) `
+		} else {
+			condition = ` AND chart_classify_id = ? `
+			pars = append(pars, req.ChartClassifyId)
+		}
+		count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			br.Msg = "判断图表名称是否存在失败"
+			br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
 			return
 		}
+		//count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		//if err != nil {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+		//	return
+		//}
 
 		if count > 0 {
 			deleteStatus = 1
@@ -194,13 +222,13 @@ func (c *ClassifyController) DeleteChartClassifyCheck() {
 	}
 
 	if deleteStatus != 1 && req.ChartInfoId == 0 {
-		classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
-		if err != nil && !utils.IsErrNoRow(err) {
-			br.Msg = "删除失败"
-			br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
-			return
-		}
-		if classifyCount > 0 {
+		//classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
+		//if err != nil && !utils.IsErrNoRow(err) {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+		//	return
+		//}
+		if len(childIds) > 0 {
 			deleteStatus = 2
 			tipsMsg = "确认删除当前目录及包含的子目录吗"
 		}
@@ -256,12 +284,39 @@ func (c *ClassifyController) DeleteChartClassify() {
 	//删除分类
 	if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
 		//判断是否含有指标
-		count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
-		if err != nil && !utils.IsErrNoRow(err) {
+		childIds := make([]int, 0)
+		classifyAll, err := data_manage.GetChartClassifyAllBySource(utils.CHART_SOURCE_CROSS_HEDGING)
+		if err != nil {
 			br.Msg = "删除失败"
-			br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
+			return
+		}
+		classifyAllMap := make(map[int]*data_manage.ChartClassifyItems)
+		for _, v := range classifyAll {
+			classifyAllMap[v.ChartClassifyId] = v
+		}
+		data.GetChartClassifyChildIds(req.ChartClassifyId, classifyAllMap, &childIds)
+		condition := ``
+		pars := make([]interface{}, 0)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds, ",")
+			condition = ` AND chart_classify_id IN (`+ ids +`) `
+		} else {
+			condition = ` AND chart_classify_id = ? `
+			pars = append(pars, req.ChartClassifyId)
+		}
+		count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			br.Msg = "判断图表名称是否存在失败"
+			br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
 			return
 		}
+		//count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		//if err != nil && !utils.IsErrNoRow(err) {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
+		//	return
+		//}
 
 		if count > 0 {
 			br.Msg = "该目录下存在关联指标,不可删除"

+ 66 - 12
controllers/data_manage/future_good/future_good_chart_classify.go

@@ -286,15 +286,42 @@ func (this *FutureGoodChartClassifyController) DeleteChartClassifyCheck() {
 	}
 	var deleteStatus int
 	var tipsMsg string
+	childIds := make([]int, 0)
 	//删除分类
 	if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
 		//判断商品价格图表分类下,是否含有图表
-		count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		classifyAll, err := data_manage.GetChartClassifyAllBySource(utils.CHART_SOURCE_FUTURE_GOOD)
 		if err != nil {
 			br.Msg = "删除失败"
-			br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
 			return
 		}
+		classifyAllMap := make(map[int]*data_manage.ChartClassifyItems)
+		for _, v := range classifyAll {
+			classifyAllMap[v.ChartClassifyId] = v
+		}
+		data.GetChartClassifyChildIds(req.ChartClassifyId, classifyAllMap, &childIds)
+		condition := ``
+		pars := make([]interface{}, 0)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds, ",")
+			condition = ` AND chart_classify_id IN (`+ ids +`) `
+		} else {
+			condition = ` AND chart_classify_id = ? `
+			pars = append(pars, req.ChartClassifyId)
+		}
+		count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			br.Msg = "判断图表名称是否存在失败"
+			br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
+			return
+		}
+		//count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		//if err != nil {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
+		//	return
+		//}
 
 		if count > 0 {
 			deleteStatus = 1
@@ -303,13 +330,13 @@ func (this *FutureGoodChartClassifyController) DeleteChartClassifyCheck() {
 	}
 
 	if deleteStatus != 1 && req.ChartInfoId == 0 {
-		classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
-		if err != nil && !utils.IsErrNoRow(err) {
-			br.Msg = "删除失败"
-			br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
-			return
-		}
-		if classifyCount > 0 {
+		//classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
+		//if err != nil && !utils.IsErrNoRow(err) {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+		//	return
+		//}
+		if len(childIds) > 0 {
 			deleteStatus = 2
 			tipsMsg = "确认删除当前目录及包含的子目录吗"
 		}
@@ -365,12 +392,39 @@ func (this *FutureGoodChartClassifyController) DeleteChartClassify() {
 	//删除分类
 	if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
 		//判断是否含有指标
-		count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
-		if err != nil && !utils.IsErrNoRow(err) {
+		childIds := make([]int, 0)
+		classifyAll, err := data_manage.GetChartClassifyAllBySource(utils.CHART_SOURCE_FUTURE_GOOD)
+		if err != nil {
 			br.Msg = "删除失败"
-			br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
+			return
+		}
+		classifyAllMap := make(map[int]*data_manage.ChartClassifyItems)
+		for _, v := range classifyAll {
+			classifyAllMap[v.ChartClassifyId] = v
+		}
+		data.GetChartClassifyChildIds(req.ChartClassifyId, classifyAllMap, &childIds)
+		condition := ``
+		pars := make([]interface{}, 0)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds, ",")
+			condition = ` AND chart_classify_id IN (`+ ids +`) `
+		} else {
+			condition = ` AND chart_classify_id = ? `
+			pars = append(pars, req.ChartClassifyId)
+		}
+		count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			br.Msg = "判断图表名称是否存在失败"
+			br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
 			return
 		}
+		//count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		//if err != nil && !utils.IsErrNoRow(err) {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
+		//	return
+		//}
 
 		if count > 0 {
 			br.Msg = "该目录下存在关联指标,不可删除"

+ 66 - 12
controllers/data_manage/line_equation/line_chart_classify.go

@@ -291,15 +291,42 @@ func (this *LineEquationChartClassifyController) DeleteChartClassifyCheck() {
 	}
 	var deleteStatus int
 	var tipsMsg string
+	childIds := make([]int, 0)
 	//删除分类
 	if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
 		//判断拟合方程图表分类下,是否含有图表
-		count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		classifyAll, err := data_manage.GetChartClassifyAllBySource(utils.CHART_SOURCE_LINE_EQUATION)
 		if err != nil {
 			br.Msg = "删除失败"
-			br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
 			return
 		}
+		classifyAllMap := make(map[int]*data_manage.ChartClassifyItems)
+		for _, v := range classifyAll {
+			classifyAllMap[v.ChartClassifyId] = v
+		}
+		data.GetChartClassifyChildIds(req.ChartClassifyId, classifyAllMap, &childIds)
+		condition := ``
+		pars := make([]interface{}, 0)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds, ",")
+			condition = ` AND chart_classify_id IN (`+ ids +`) `
+		} else {
+			condition = ` AND chart_classify_id = ? `
+			pars = append(pars, req.ChartClassifyId)
+		}
+		count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			br.Msg = "判断图表名称是否存在失败"
+			br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
+			return
+		}
+		//count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		//if err != nil {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+		//	return
+		//}
 
 		if count > 0 {
 			deleteStatus = 1
@@ -308,13 +335,13 @@ func (this *LineEquationChartClassifyController) DeleteChartClassifyCheck() {
 	}
 
 	if deleteStatus != 1 && req.ChartInfoId == 0 {
-		classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
-		if err != nil && !utils.IsErrNoRow(err) {
-			br.Msg = "删除失败"
-			br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
-			return
-		}
-		if classifyCount > 0 {
+		//classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
+		//if err != nil && !utils.IsErrNoRow(err) {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+		//	return
+		//}
+		if len(childIds) > 0 {
 			deleteStatus = 2
 			tipsMsg = "确认删除当前目录及包含的子目录吗"
 		}
@@ -370,12 +397,39 @@ func (this *LineEquationChartClassifyController) DeleteChartClassify() {
 	//删除分类
 	if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
 		//判断是否含有指标
-		count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
-		if err != nil && !utils.IsErrNoRow(err) {
+		childIds := make([]int, 0)
+		classifyAll, err := data_manage.GetChartClassifyAllBySource(utils.CHART_SOURCE_LINE_EQUATION)
+		if err != nil {
 			br.Msg = "删除失败"
-			br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
+			return
+		}
+		classifyAllMap := make(map[int]*data_manage.ChartClassifyItems)
+		for _, v := range classifyAll {
+			classifyAllMap[v.ChartClassifyId] = v
+		}
+		data.GetChartClassifyChildIds(req.ChartClassifyId, classifyAllMap, &childIds)
+		condition := ``
+		pars := make([]interface{}, 0)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds, ",")
+			condition = ` AND chart_classify_id IN (`+ ids +`) `
+		} else {
+			condition = ` AND chart_classify_id = ? `
+			pars = append(pars, req.ChartClassifyId)
+		}
+		count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			br.Msg = "判断图表名称是否存在失败"
+			br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
 			return
 		}
+		//count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		//if err != nil && !utils.IsErrNoRow(err) {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
+		//	return
+		//}
 
 		if count > 0 {
 			br.Msg = "该目录下存在关联指标,不可删除"

+ 66 - 12
controllers/data_manage/line_feature/classify.go

@@ -291,15 +291,42 @@ func (this *LineFeaturesChartClassifyController) DeleteChartClassifyCheck() {
 	}
 	var deleteStatus int
 	var tipsMsg string
+	childIds := make([]int, 0)
 	//删除分类
 	if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
 		//判断统计特征图表分类下,是否含有图表
-		count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		classifyAll, err := data_manage.GetChartClassifyAllBySource(utils.CHART_SOURCE_LINE_FEATURE_STANDARD_DEVIATION)
 		if err != nil {
 			br.Msg = "删除失败"
-			br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
 			return
 		}
+		classifyAllMap := make(map[int]*data_manage.ChartClassifyItems)
+		for _, v := range classifyAll {
+			classifyAllMap[v.ChartClassifyId] = v
+		}
+		data.GetChartClassifyChildIds(req.ChartClassifyId, classifyAllMap, &childIds)
+		condition := ``
+		pars := make([]interface{}, 0)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds, ",")
+			condition = ` AND chart_classify_id IN (`+ ids +`) `
+		} else {
+			condition = ` AND chart_classify_id = ? `
+			pars = append(pars, req.ChartClassifyId)
+		}
+		count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			br.Msg = "判断图表名称是否存在失败"
+			br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
+			return
+		}
+		//count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		//if err != nil {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+		//	return
+		//}
 
 		if count > 0 {
 			deleteStatus = 1
@@ -308,13 +335,13 @@ func (this *LineFeaturesChartClassifyController) DeleteChartClassifyCheck() {
 	}
 
 	if deleteStatus != 1 && req.ChartInfoId == 0 {
-		classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
-		if err != nil && !utils.IsErrNoRow(err) {
-			br.Msg = "删除失败"
-			br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
-			return
-		}
-		if classifyCount > 0 {
+		//classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
+		//if err != nil && !utils.IsErrNoRow(err) {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+		//	return
+		//}
+		if len(childIds) > 0 {
 			deleteStatus = 2
 			tipsMsg = "确认删除当前目录及包含的子目录吗"
 		}
@@ -370,12 +397,39 @@ func (this *LineFeaturesChartClassifyController) DeleteChartClassify() {
 	//删除分类
 	if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
 		//判断是否含有指标
-		count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
-		if err != nil && !utils.IsErrNoRow(err) {
+		childIds := make([]int, 0)
+		classifyAll, err := data_manage.GetChartClassifyAllBySource(utils.CHART_SOURCE_LINE_FEATURE_STANDARD_DEVIATION)
+		if err != nil {
 			br.Msg = "删除失败"
-			br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
+			return
+		}
+		classifyAllMap := make(map[int]*data_manage.ChartClassifyItems)
+		for _, v := range classifyAll {
+			classifyAllMap[v.ChartClassifyId] = v
+		}
+		data.GetChartClassifyChildIds(req.ChartClassifyId, classifyAllMap, &childIds)
+		condition := ``
+		pars := make([]interface{}, 0)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds, ",")
+			condition = ` AND chart_classify_id IN (`+ ids +`) `
+		} else {
+			condition = ` AND chart_classify_id = ? `
+			pars = append(pars, req.ChartClassifyId)
+		}
+		count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			br.Msg = "判断图表名称是否存在失败"
+			br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
 			return
 		}
+		//count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		//if err != nil && !utils.IsErrNoRow(err) {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
+		//	return
+		//}
 
 		if count > 0 {
 			br.Msg = "该目录下存在关联指标,不可删除"

+ 66 - 12
controllers/data_manage/range_analysis/chart_classify.go

@@ -339,15 +339,42 @@ func (this *RangeChartClassifyController) DeleteChartClassifyCheck() {
 	}
 	var deleteStatus int
 	var tipsMsg string
+	childIds := make([]int, 0)
 	//删除分类
 	if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
 		//判断区间分析图表分类下,是否含有图表
-		count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		classifyAll, err := data_manage.GetChartClassifyAllBySource(utils.CHART_SOURCE_RANGE_ANALYSIS)
 		if err != nil {
 			br.Msg = "删除失败"
-			br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
 			return
 		}
+		classifyAllMap := make(map[int]*data_manage.ChartClassifyItems)
+		for _, v := range classifyAll {
+			classifyAllMap[v.ChartClassifyId] = v
+		}
+		data.GetChartClassifyChildIds(req.ChartClassifyId, classifyAllMap, &childIds)
+		condition := ``
+		pars := make([]interface{}, 0)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds, ",")
+			condition = ` AND chart_classify_id IN (`+ ids +`) `
+		} else {
+			condition = ` AND chart_classify_id = ? `
+			pars = append(pars, req.ChartClassifyId)
+		}
+		count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			br.Msg = "判断图表名称是否存在失败"
+			br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
+			return
+		}
+		//count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		//if err != nil {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+		//	return
+		//}
 
 		if count > 0 {
 			deleteStatus = 1
@@ -356,13 +383,13 @@ func (this *RangeChartClassifyController) DeleteChartClassifyCheck() {
 	}
 
 	if deleteStatus != 1 && req.ChartInfoId == 0 {
-		classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
-		if err != nil && !utils.IsErrNoRow(err) {
-			br.Msg = "删除失败"
-			br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
-			return
-		}
-		if classifyCount > 0 {
+		//classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
+		//if err != nil && !utils.IsErrNoRow(err) {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
+		//	return
+		//}
+		if len(childIds) > 0 {
 			deleteStatus = 2
 			tipsMsg = "确认删除当前目录及包含的子目录吗"
 		}
@@ -418,12 +445,39 @@ func (this *RangeChartClassifyController) DeleteChartClassify() {
 	//删除分类
 	if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
 		//判断是否含有指标
-		count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
-		if err != nil && !utils.IsErrNoRow(err) {
+		childIds := make([]int, 0)
+		classifyAll, err := data_manage.GetChartClassifyAllBySource(utils.CHART_SOURCE_RANGE_ANALYSIS)
+		if err != nil {
 			br.Msg = "删除失败"
-			br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
+			return
+		}
+		classifyAllMap := make(map[int]*data_manage.ChartClassifyItems)
+		for _, v := range classifyAll {
+			classifyAllMap[v.ChartClassifyId] = v
+		}
+		data.GetChartClassifyChildIds(req.ChartClassifyId, classifyAllMap, &childIds)
+		condition := ``
+		pars := make([]interface{}, 0)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds, ",")
+			condition = ` AND chart_classify_id IN (`+ ids +`) `
+		} else {
+			condition = ` AND chart_classify_id = ? `
+			pars = append(pars, req.ChartClassifyId)
+		}
+		count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			br.Msg = "判断图表名称是否存在失败"
+			br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
 			return
 		}
+		//count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
+		//if err != nil && !utils.IsErrNoRow(err) {
+		//	br.Msg = "删除失败"
+		//	br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
+		//	return
+		//}
 
 		if count > 0 {
 			br.Msg = "该目录下存在关联指标,不可删除"

+ 8 - 1
controllers/report_approve/report_approve.go

@@ -8,11 +8,12 @@ import (
 	"eta_gn/eta_api/services"
 	"eta_gn/eta_api/utils"
 	"fmt"
-	"github.com/rdlucklib/rdluck_tools/paging"
 	"sort"
 	"strconv"
 	"strings"
 	"time"
+
+	"github.com/rdlucklib/rdluck_tools/paging"
 )
 
 // ReportApproveController 报告审批
@@ -713,6 +714,12 @@ func (this *ReportApproveController) Refuse() {
 		br.ErrMsg = fmt.Sprintf("参数有误, ReportApproveId: %d", req.ReportApproveId)
 		return
 	}
+	maxStrLen := 500
+	approvelen := len([]rune(req.ApproveRemark))
+	if approvelen > maxStrLen {
+		br.Msg = fmt.Sprintf("审批驳回原因不能超过%d字", maxStrLen)
+		return
+	}
 
 	approveOb := new(report_approve.ReportApprove)
 	approveItem, e := approveOb.GetItemById(req.ReportApproveId)

+ 20 - 18
controllers/sandbox/sandbox.go

@@ -1704,18 +1704,30 @@ func (this *SandboxController) ListV2() {
 	}
 	startSize = paging.StartIndex(currentIndex, pageSize)
 
+	classifyList, err := sandbox.GetAllSandboxClassify()
+	if err != nil && !utils.IsErrNoRow(err) {
+		br.Msg = "获取分类信息失败"
+		br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
+		return
+	}
+	classsifyMap := make(map[int]*sandbox.SandboxClassifyItems)
+	for _, v := range classifyList {
+		classsifyMap[v.SandboxClassifyId] = v
+	}
+
 	var condition string
 	var pars []interface{}
 
 	if sandboxClassifyId > 0 {
-		sandboxClassifyId, err := sandbox.GetSandboxClassify(sandboxClassifyId)
-		if err != nil && !utils.IsErrNoRow(err) {
-			br.Msg = "获取图表信息失败"
-			br.ErrMsg = "获取信息失败,GetChartClassify,Err:" + err.Error()
-			return
+		childIds := make([]int, 0)
+		sandboxService.GetSandBoxClassifyChildIds(sandboxClassifyId, classsifyMap, &childIds)
+		if len(childIds) > 0 {
+			ids := utils.IntArr2joinString(childIds,",")
+			condition += " AND sandbox_classify_id IN(" + ids + ") "
+		} else {
+			condition += " AND sandbox_classify_id = ? "
+			pars = append(pars, sandboxClassifyId)
 		}
-		condition += " AND sandbox_classify_id IN(" + sandboxClassifyId + ") "
-		//pars = append(pars, chartClassifyId)
 	}
 	if keyWord != "" {
 		condition += ` AND  ( name LIKE '%` + keyWord + `%' )`
@@ -1738,20 +1750,10 @@ func (this *SandboxController) ListV2() {
 		return
 	}
 
-	classifyList, err := sandbox.GetAllSandboxClassify()
-	if err != nil && !utils.IsErrNoRow(err) {
-		br.Msg = "获取分类信息失败"
-		br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
-		return
-	}
-	classsifyMap := make(map[int]*sandbox.SandboxClassifyItems)
-	for _, v := range classifyList {
-		classsifyMap[v.SandboxClassifyId] = v
-	}
 
 	for i, v := range list {
 		parentIds := make([]int, 0)
-		sandboxService.GetSandBoxParentIds(v.SandboxClassifyId, classsifyMap, parentIds)
+		sandboxService.GetSandBoxParentIds(v.SandboxClassifyId, classsifyMap, &parentIds)
 		ids := utils.IntArr2joinString(parentIds,",")
 		list[i].ParentIds = ids
 	}

+ 9 - 0
models/bi_dashboard/bi_dashboard.go

@@ -145,3 +145,12 @@ type BiDashboardEditingReq struct {
 	BiDashboardId  int `description:"看板主键ID"`
 	Status int `description:"标记状态: 1-编辑中; 2-编辑完成"`
 }
+
+// GetAllMyShareList 获取我共享的看板
+func GetAllMyShareList(sysUserId int) (list []*BiDashboard, err error) {
+	sql := `SELECT a.* FROM bi_dashboard a JOIN bi_dashboard_grant b on a.bi_dashboard_id=b.bi_dashboard_id 
+WHERE a."sys_admin_id" = ? GROUP BY a."bi_dashboard_id" ,"bi_dashboard_classify_id" ,"bi_dashboard_name" ,"sys_admin_id" ,
+"sys_admin_name" ,"sort" ,a."create_time" ,a."modify_time" ,"state"   `
+	err = global.DEFAULT_DmSQL.Raw(sql, sysUserId).Find(&list).Error
+	return
+}

+ 2 - 3
models/bi_dashboard/bi_dashboard_grant.go

@@ -25,7 +25,7 @@ type GrantDashboardReq struct {
 }
 
 // MultiAddDashboardGrant 批量添加授权记录
-func MultiAddDashboardGrant(pptId int, list []*BiDashboardGrant) (err error) {
+func MultiAddDashboardGrant(boardId int, list []*BiDashboardGrant) (err error) {
 
 	to := global.DEFAULT_DmSQL.Begin()
 	defer func() {
@@ -37,8 +37,7 @@ func MultiAddDashboardGrant(pptId int, list []*BiDashboardGrant) (err error) {
 	}()
 
 	sql := "DELETE from bi_dashboard_grant where bi_dashboard_id=?"
-	//_, err = to.Raw(sql, pptId).Exec()
-	err = to.Exec(sql, pptId).Error
+	err = to.Exec(sql, boardId).Error
 	if err != nil {
 		return
 	}

+ 1 - 1
models/data_manage/chart_info.go

@@ -2840,7 +2840,7 @@ func UpdateChartInfoSortByClassifyIdV2(classifyId, nowSort int, prevChartInfoId
 // GetChartInfoMaxSortByClassifyId 获取分类下指标的最大的排序数
 func GetChartInfoMaxSortByClassifyId(classifyId int) (sort int, err error) {
 	o := global.DmSQL["data"]
-	sql := `SELECT Max(sort) AS sort FROM chart_info WHERE chart_classify_id = ? `
+	sql := `SELECT COALESCE(MAX(sort),0) AS sort FROM chart_info WHERE chart_classify_id = ? `
 	err = o.Raw(sql, classifyId).Scan(&sort).Error
 
 	return

+ 83 - 34
models/data_manage/edb_classify.go

@@ -135,37 +135,71 @@ type DeleteEdbClassifyReq struct {
 
 // TODO: sql优化,后续解决
 func GetEdbInfoCountByClassifyId(classifyId int) (count int, err error) {
-	sql := ` SELECT COUNT(1) AS count FROM edb_info AS a
-				WHERE a.classify_id IN(
-				SELECT t.classify_id FROM 
-				(
-				SELECT rd.*
-				FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
-					 (SELECT @pid := ?) pd 
-				WHERE FIND_IN_SET(parent_id, @pid) > 0 
-				  AND @pid := CONCAT(@pid, ',', classify_id) 
-				UNION SELECT * FROM edb_classify WHERE classify_id = @pid
-				)AS t
-				) `
+	//sql := ` SELECT COUNT(1) AS count FROM edb_info AS a
+	//			WHERE a.classify_id IN(
+	//			SELECT t.classify_id FROM
+	//			(
+	//			SELECT rd.*
+	//			FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
+	//				 (SELECT @pid := ?) pd
+	//			WHERE FIND_IN_SET(parent_id, @pid) > 0
+	//			  AND @pid := CONCAT(@pid, ',', classify_id)
+	//			UNION SELECT * FROM edb_classify WHERE classify_id = @pid
+	//			)AS t
+	//			) `
+
+	sql := `WITH RECURSIVE classify_cte(classify_id, parent_id) AS (
+    SELECT classify_id, parent_id  
+    FROM edb_classify  
+    WHERE parent_id = ?
+  
+    UNION ALL  
+
+    SELECT e.classify_id, e.parent_id  
+    FROM edb_classify e  
+    INNER JOIN classify_cte c ON e.parent_id = c.classify_id  
+)  
+SELECT COUNT(1) AS COUNT  
+FROM edb_info AS a  
+WHERE a.classify_id IN (SELECT classify_id FROM classify_cte);`
 	err = global.DmSQL["data"].Raw(sql, classifyId).Scan(&count).Error
 
 	return
 }
 
 func DeleteEdbClassify(classifyId int) (err error) {
-	sql := ` DELETE FROM edb_classify
-				WHERE classify_id IN(
-				SELECT t.classify_id FROM
-				(
-				SELECT rd.*
-				FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
-				(SELECT @pid := ?) pd
-				WHERE FIND_IN_SET(parent_id, @pid) > 0
-				AND @pid := CONCAT(@pid, ',', classify_id)
-				UNION SELECT * FROM edb_classify WHERE classify_id = @pid
-				)AS t
-				) `
-	err = global.DmSQL["data"].Exec(sql, classifyId).Error
+	//sql := ` DELETE FROM edb_classify
+	//			WHERE classify_id IN(
+	//			SELECT t.classify_id FROM
+	//			(
+	//			SELECT rd.*
+	//			FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
+	//			(SELECT @pid := ?) pd
+	//			WHERE FIND_IN_SET(parent_id, @pid) > 0
+	//			AND @pid := CONCAT(@pid, ',', classify_id)
+	//			UNION SELECT * FROM edb_classify WHERE classify_id = @pid
+	//			)AS t
+	//			) `
+
+	sql := `WITH RECURSIVE ClassifyHierarchy ( classify_id, parent_id ) AS 
+     (
+      SELECT classify_id, 
+             parent_id
+        FROM edb_classify
+       WHERE parent_id = ? OR classify_id=?
+     UNION ALL
+         SELECT e.classify_id, 
+                e.parent_id
+           FROM edb_classify e
+     INNER JOIN ClassifyHierarchy ch 
+             ON e.parent_id = ch.classify_id
+     )
+DELETE 
+  FROM edb_classify
+ WHERE classify_id IN ( SELECT classify_id
+          FROM ClassifyHierarchy
+       );`
+	err = global.DmSQL["data"].Exec(sql, classifyId, classifyId).Error
 
 	return
 }
@@ -333,15 +367,30 @@ type ClassifyDeleteCheckReq struct {
 
 func GetClassifyCountByClassifyId(classifyId int) (count int, err error) {
 	o := global.DmSQL["data"]
-	sql := ` SELECT COUNT(1) AS count FROM (
-			SELECT rd.*
-			FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
-				 (SELECT @pid := ?) pd 
-			WHERE FIND_IN_SET(parent_id, @pid) > 0 
-			  AND @pid := CONCAT(@pid, ',', classify_id) 
-			UNION SELECT * FROM edb_classify WHERE classify_id = @pid
-			)AS t
-			WHERE t.classify_id<>? `
+	//sql := ` SELECT COUNT(1) AS count FROM (
+	//		SELECT rd.*
+	//		FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
+	//			 (SELECT @pid := ?) pd
+	//		WHERE FIND_IN_SET(parent_id, @pid) > 0
+	//		  AND @pid := CONCAT(@pid, ',', classify_id)
+	//		UNION SELECT * FROM edb_classify WHERE classify_id = @pid
+	//		)AS t
+	//		WHERE t.classify_id<>? `
+
+	sql := `WITH RECURSIVE classify_cte(classify_id, parent_id) AS (  
+  SELECT classify_id, parent_id  
+  FROM edb_classify  
+  WHERE parent_id = ?  
+  
+  UNION ALL  
+  
+  SELECT e.classify_id, e.parent_id  
+  FROM edb_classify e  
+  INNER JOIN classify_cte c ON e.parent_id = c.classify_id  
+)  
+SELECT COUNT(1) AS COUNT  
+FROM classify_cte  
+WHERE classify_id <> ? ;`
 	err = o.Raw(sql, classifyId, classifyId).Scan(&count).Error
 
 	return

+ 1 - 1
models/data_manage/edb_info.go

@@ -1685,7 +1685,7 @@ func GetEdbBaseInfoList(condition string, pars []interface{}, orderBy string, st
 		sql += ` ORDER BY edb_info_id ASC `
 	}
 	sql += `  LIMIT ?,? `
-
+	pars = append(pars, startSize, pageSize)
 	err = o.Raw(sql, pars...).Scan(&items).Error
 
 	return

+ 2 - 0
models/report_approve/report_approve_message.go

@@ -172,6 +172,8 @@ func (m *ReportApproveMessage) GetPageItemsByCondition(condition string, pars []
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
 	//_, err = o.Raw(sql, pars...).QueryRows(&items)
+	pars = append(pars, startSize)
+	pars = append(pars, pageSize)
 	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
 	return
 }

+ 9 - 0
services/data/chart_classify.go

@@ -962,3 +962,12 @@ func GetChartClassifyParentRecursive(list []*data_manage.ChartClassifyItems, cla
 	}
 	return res
 }
+
+func GetChartClassifyChildIds(classifyId int, classifymap map[int]*data_manage.ChartClassifyItems, childIds *[]int) {
+	for _, item := range classifymap {
+		if item.ParentId == classifyId {
+			*childIds = append(*childIds, item.ChartClassifyId)
+			GetChartClassifyChildIds(item.ChartClassifyId, classifymap, childIds)
+		}
+	}
+}

+ 14 - 2
services/sandbox/sandbox.go

@@ -959,9 +959,21 @@ func ReplaceEdbInSandbox(oldEdbInfoId, newEdbInfoId int) (err error) {
 	return
 }
 
-func GetSandBoxParentIds(classifyId int, classifymap map[int]*sandbox.SandboxClassifyItems, parentIds []int) {
+func GetSandBoxParentIds(classifyId int, classifymap map[int]*sandbox.SandboxClassifyItems, parentIds *[]int) {
 	if item, ok := classifymap[classifyId]; ok {
-		parentIds = append(parentIds, item.ParentId)
+		if item.ParentId == 0 {
+			return
+		}
+		*parentIds = append(*parentIds, item.ParentId)
 		GetSandBoxParentIds(item.ParentId, classifymap, parentIds)
 	}
+}
+
+func GetSandBoxClassifyChildIds(classifyId int, classifymap map[int]*sandbox.SandboxClassifyItems, childIds *[]int) {
+	for _, item := range classifymap {
+		if item.ParentId == classifyId {
+			*childIds = append(*childIds, item.SandboxClassifyId)
+			GetSandBoxClassifyChildIds(item.SandboxClassifyId, classifymap, childIds)
+		}
+	}
 }