瀏覽代碼

Merge remote-tracking branch 'origin/eta/2.3' into debug

Roc 3 月之前
父節點
當前提交
9d94e505d2

+ 2 - 1
cache/replace_edb_info.go

@@ -7,10 +7,11 @@ import (
 )
 
 // 将替换指标操作加入到队列中
-func AddReplaceEdbInfo(oldEdbInfo, newEdbInfo *data_manage.EdbInfo) bool {
+func AddReplaceEdbInfo(oldEdbInfo, newEdbInfo *data_manage.EdbInfo, userId int) bool {
 	record := new(data_manage.ReplaceEdbInfoItem)
 	record.OldEdbInfo = oldEdbInfo
 	record.NewEdbInfo = newEdbInfo
+	record.UserId = userId
 	if utils.Re == nil {
 		err := utils.Rc.LPush(utils.CACHE_KEY_REPLACE_EDB, record)
 

+ 17 - 7
controllers/data_manage/chart_info_share.go

@@ -199,7 +199,7 @@ func (c *ChartInfoShareController) Tree() {
 			return
 		}
 
-		var sortList data_manage.ChartClassifyItemList
+		var sortList data_manage.UserShareChartClassifyItemList
 		sortList = nodeList
 
 		sort.Sort(sortList)
@@ -223,15 +223,15 @@ func (c *ChartInfoShareController) Tree() {
 		}
 
 		receivedMap := make(map[int]int)
-		var receivedList data_manage.ChartClassifyItemList
+		var receivedList data_manage.UserShareChartClassifyItemList
 		for _, v := range nodeList {
 			index, ok := receivedMap[v.SysUserId]
 			if !ok {
 				index = len(receivedMap)
-				item := &data_manage.ChartClassifyItems{
-					ChartClassifyId:     v.SysUserId,
+				item := &data_manage.UserShareChartClassifyItem{
+					UserId:              v.SysUserId,
 					ChartInfoId:         0,
-					ChartClassifyName:   v.SysUserRealName,
+					UserName:            v.SysUserRealName,
 					ChartClassifyNameEn: v.SysUserRealName,
 					ParentId:            0,
 					Level:               0,
@@ -248,15 +248,16 @@ func (c *ChartInfoShareController) Tree() {
 					Calendar:            "",
 					SeasonStartDate:     "",
 					SeasonEndDate:       "",
-					Children:            []*data_manage.ChartClassifyItems{},
+					Children:            []*data_manage.UserShareChartClassifyItem{},
 					Button:              data_manage.ChartClassifyItemsButton{},
 					IsJoinPermission:    0,
-					HaveOperaAuth:       false,
+					HaveOperaAuth:       true,
 					ChartClassifyIdPath: "",
 				}
 				receivedList = append(receivedList, item)
 			}
 			receivedList[index].Children = append(receivedList[index].Children, v)
+			receivedMap[v.SysUserId] = index
 		}
 		sort.Sort(receivedList)
 		resp.Received = receivedList
@@ -275,6 +276,8 @@ func (c *ChartInfoShareController) Tree() {
 // @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
 // @Param   ClassifyId   query   int  true       "分类id"
 // @Param   FilterSource   query   int  false       "共享图表的列表数据来源,0:我共享的;1:别人共享给我的"
+// @Param   ClassifyId   query   int  false       "分类id"
+// @Param   UserId   query   int  false       "所属用户id"
 // @Success 200 {object} response.ChartInfoChartListResp
 // @router /chart_info/share/list [get]
 func (c *ChartInfoShareController) List() {
@@ -316,6 +319,13 @@ func (c *ChartInfoShareController) List() {
 	condition += ` AND source = ? `
 	pars = append(pars, utils.CHART_TYPE_CURVE)
 
+	// 用户筛选
+	userId, _ := c.GetInt("UserId")
+	if userId > 0 {
+		condition += ` AND b.sys_user_id = ?  `
+		pars = append(pars, userId)
+	}
+
 	// 分类筛选
 	classifyId, _ := c.GetInt("ClassifyId")
 	if classifyId > 0 {

+ 14 - 6
controllers/data_manage/edb_info_share.go

@@ -216,16 +216,16 @@ func (c *EdbInfoShareController) Tree() {
 		}
 
 		receivedMap := make(map[int]int)
-		var receivedList data_manage.EdbClassifyItemList
+		var receivedList data_manage.UserShareEdbClassifyItemList
 		for _, v := range nodeList {
 			index, ok := receivedMap[v.SysUserId]
 			if !ok {
 				index = len(receivedMap)
-				item := &data_manage.EdbClassifyItems{
-					ClassifyId:       v.SysUserId,
+				item := &data_manage.UserShareEdbClassifyItem{
+					UserId:           v.SysUserId,
 					EdbInfoId:        0,
 					ClassifyType:     0,
-					ClassifyName:     v.SysUserRealName,
+					UserName:         v.SysUserRealName,
 					ClassifyNameEn:   "",
 					ParentId:         0,
 					RootId:           0,
@@ -239,15 +239,16 @@ func (c *EdbInfoShareController) Tree() {
 					StartDate:        "",
 					EdbCode:          "",
 					EdbType:          0,
-					Children:         []*data_manage.EdbClassifyItems{},
+					Children:         []*data_manage.UserShareEdbClassifyItem{},
 					Button:           data_manage.EdbClassifyItemsButton{},
 					IsJoinPermission: 0,
-					HaveOperaAuth:    false,
+					HaveOperaAuth:    true,
 					ClassifyIdPath:   "",
 				}
 				receivedList = append(receivedList, item)
 			}
 			receivedList[index].Children = append(receivedList[index].Children, v)
+			receivedMap[v.SysUserId] = index
 		}
 
 		resp.Received = receivedList
@@ -314,6 +315,13 @@ func (c *EdbInfoShareController) List() {
 		pars = append(pars, edbType)
 	}
 
+	// 用户筛选
+	userId, _ := c.GetInt("UserId")
+	if userId > 0 {
+		condition += ` AND b.sys_user_id = ?  `
+		pars = append(pars, userId)
+	}
+
 	// 分类筛选
 	classifyId, _ := c.GetInt("ClassifyId")
 	if classifyId > 0 {

+ 41 - 0
models/data_manage/chart_classify.go

@@ -586,3 +586,44 @@ func (m ChartClassifyItemList) Less(i, j int) bool {
 func (m ChartClassifyItemList) Swap(i, j int) {
 	m[i], m[j] = m[j], m[i]
 }
+
+func (m *ChartClassifyItems) ToUserShareChartClassifyItem() (item *UserShareChartClassifyItem) {
+	return &UserShareChartClassifyItem{
+		ChartClassifyId:     m.ChartClassifyId,
+		ChartInfoId:         m.ChartInfoId,
+		ChartClassifyName:   m.ChartClassifyName,
+		ChartClassifyNameEn: m.ChartClassifyNameEn,
+		ParentId:            m.ParentId,
+		Level:               m.Level,
+		Sort:                m.Sort,
+		UniqueCode:          m.UniqueCode,
+		Source:              m.Source,
+		SourceName:          m.SourceName,
+		SysUserId:           m.SysUserId,
+		SysUserRealName:     m.SysUserRealName,
+		DateType:            m.DateType,
+		StartDate:           m.StartDate,
+		EndDate:             m.EndDate,
+		ChartType:           m.ChartType,
+		Calendar:            m.Calendar,
+		SeasonStartDate:     m.SeasonStartDate,
+		SeasonEndDate:       m.SeasonEndDate,
+		Children:            m.ToUserShareChartClassifyItemByList(m.Children),
+		Button:              ChartClassifyItemsButton{},
+		IsJoinPermission:    m.IsJoinPermission,
+		HaveOperaAuth:       true,
+		ChartClassifyIdPath: m.ChartClassifyIdPath,
+	}
+}
+
+func (m *ChartClassifyItems) ToUserShareChartClassifyItemByList(list []*ChartClassifyItems) (items []*UserShareChartClassifyItem) {
+	items = make([]*UserShareChartClassifyItem, 0)
+	if list == nil {
+		return
+	}
+
+	for _, v := range list {
+		items = append(items, v.ToUserShareChartClassifyItem())
+	}
+	return
+}

+ 43 - 0
models/data_manage/chart_info_share.go

@@ -224,3 +224,46 @@ MAX(b."sort") AS "sort"
 
 	return
 }
+
+type UserShareChartClassifyItem struct {
+	UserId              int    `description:"用户id"`
+	UserName            string `description:"用户名称"`
+	ChartClassifyId     int    `description:"分类id"`
+	ChartInfoId         int    `description:"指标id"`
+	ChartClassifyName   string
+	ChartClassifyNameEn string
+	ParentId            int
+	Level               int                           `description:"层级"`
+	Sort                int                           `description:"排序字段,越小越靠前,默认值:10"`
+	UniqueCode          string                        `description:"唯一编码"`
+	Source              int                           `description:"来源id"`
+	SourceName          string                        `description:"来源名称"`
+	SysUserId           int                           `description:"创建人id"`
+	SysUserRealName     string                        `description:"创建人姓名"`
+	DateType            int                           `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间"`
+	StartDate           string                        `description:"自定义开始日期"`
+	EndDate             string                        `description:"自定义结束日期"`
+	ChartType           int                           `description:"生成样式:1:曲线图,2:季节性图"`
+	Calendar            string                        `description:"公历/农历"`
+	SeasonStartDate     string                        `description:"季节性图开始日期"`
+	SeasonEndDate       string                        `description:"季节性图开始日期"`
+	Children            []*UserShareChartClassifyItem `gorm:"-"`
+	Button              ChartClassifyItemsButton      `gorm:"-" description:"按钮权限"`
+	IsJoinPermission    int                           `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	HaveOperaAuth       bool                          `description:"是否有数据权限,默认:false"`
+	ChartClassifyIdPath string                        `description:"分类的完整路径,格式为:父级ID,当前ID"`
+}
+
+type UserShareChartClassifyItemList []*UserShareChartClassifyItem
+
+func (m UserShareChartClassifyItemList) Len() int {
+	return len(m)
+}
+
+func (m UserShareChartClassifyItemList) Less(i, j int) bool {
+	return m[i].Sort < m[j].Sort
+}
+
+func (m UserShareChartClassifyItemList) Swap(i, j int) {
+	m[i], m[j] = m[j], m[i]
+}

+ 37 - 0
models/data_manage/edb_classify.go

@@ -702,3 +702,40 @@ func GetEdbClassifyItemsByIdList(classifyIdList []int) (item []*EdbClassifyItems
 
 	return
 }
+
+func (m *EdbClassifyItems) ToUserShareEdbClassifyItem() (item *UserShareEdbClassifyItem) {
+	return &UserShareEdbClassifyItem{
+		ClassifyId:       m.ClassifyId,
+		EdbInfoId:        m.EdbInfoId,
+		ParentId:         m.ClassifyId,
+		ClassifyType:     m.ClassifyType,
+		ClassifyName:     m.ClassifyName,
+		ClassifyNameEn:   m.ClassifyNameEn,
+		Sort:             m.Sort,
+		UniqueCode:       m.UniqueCode,
+		Source:           m.Source,
+		SourceName:       m.SourceName,
+		SysUserId:        m.SysUserId,
+		SysUserRealName:  m.SysUserRealName,
+		StartDate:        m.StartDate,
+		EdbCode:          m.EdbCode,
+		EdbType:          m.EdbType,
+		Children:         m.ToUserShareEdbClassifyItemByList(m.Children),
+		Button:           EdbClassifyItemsButton{},
+		IsJoinPermission: m.IsJoinPermission,
+		HaveOperaAuth:    m.HaveOperaAuth,
+		ClassifyIdPath:   "",
+	}
+}
+
+func (m *EdbClassifyItems) ToUserShareEdbClassifyItemByList(list []*EdbClassifyItems) (items []*UserShareEdbClassifyItem) {
+	items = make([]*UserShareEdbClassifyItem, 0)
+	if list == nil {
+		return
+	}
+
+	for _, v := range list {
+		items = append(items, v.ToUserShareEdbClassifyItem())
+	}
+	return
+}

+ 23 - 15
models/data_manage/edb_info.go

@@ -916,7 +916,7 @@ type EdbInfoReplaceReq struct {
 }
 
 // ReplaceChartEdb 替换图表中的指标
-func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (relationEdbInfoIdList []int, replaceChartTotal, replaceCalculateTotal int, err error) {
+func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo, userId int) (relationEdbInfoIdList []int, replaceChartTotal, replaceCalculateTotal int, err error) {
 	var errmsg string
 	relationEdbInfoIdList = make([]int, 0) // 关联的指标id
 	logMsg := ``                           // 记录替换的日志
@@ -939,11 +939,13 @@ func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (relationEdbInfoIdList []i
 			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"替换指标失败提醒", "errmsg:"+errmsg, utils.EmailSendToUsers)
 		}
 	}()
-	//替换图表
+	//替换自己创建的图表
 	{
 		chartEdbMappingList := make([]*ChartEdbInfoMapping, 0)
-		csql := `SELECT * FROM chart_edb_mapping WHERE edb_info_id=?`
-		err = to.Raw(csql, oldEdbInfo.EdbInfoId).Scan(&chartEdbMappingList).Error
+		csql := `SELECT a.* FROM chart_edb_mapping AS a 
+         JOIN chart_info AS b on a.chart_info_id=b.chart_info_id
+         WHERE b.sys_user_id = ? AND  a.edb_info_id=? `
+		err = to.Raw(csql, userId, oldEdbInfo.EdbInfoId).Scan(&chartEdbMappingList).Error
 		if err != nil {
 			errmsg = "获取指标关联图表信息失败:Err:" + err.Error()
 			return
@@ -1146,7 +1148,8 @@ func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (relationEdbInfoIdList []i
 				}
 			}
 		}
-		// 查询所有的图表信息
+
+		// 查询我的所有图表信息
 		if len(chartEdbMappingList) > 0 {
 			chartInfoIdList := make([]string, 0)
 			for _, mv := range chartEdbMappingList {
@@ -1200,8 +1203,10 @@ func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (relationEdbInfoIdList []i
 		//获取所有包含的计算指标
 		mappingList := make([]*EdbInfoCalculateMapping, 0)
 		queryList := make([]*EdbInfoCalculateMapping, 0)
-		msql := ` SELECT * FROM edb_info_calculate_mapping WHERE from_edb_info_id = ?`
-		err = to.Raw(msql, oldEdbInfo.EdbInfoId).Find(&queryList).Error
+		msql := ` SELECT a.* FROM edb_info_calculate_mapping AS a 
+          JOIN edb_info AS b ON a.edb_info_id=b.edb_info_id
+          WHERE b.sys_user_id = ? AND a.from_edb_info_id = ?`
+		err = to.Raw(msql, userId, oldEdbInfo.EdbInfoId).Find(&queryList).Error
 		if err != nil {
 			errmsg = "获取计算指标关联基础指标信息失败:Err:" + err.Error()
 			return
@@ -1242,7 +1247,9 @@ func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (relationEdbInfoIdList []i
 		//获取所有包含的计算指标
 		predictEdbConfList := make([]*PredictEdbConf, 0)
 		queryList := make([]*PredictEdbConf, 0)
-		msql := ` SELECT * FROM predict_edb_conf WHERE source_edb_info_id = ?`
+		msql := ` SELECT a.* FROM predict_edb_conf AS a
+          JOIN edb_info AS b on a.predict_edb_info_id = b.edb_info_id
+          WHERE source_edb_info_id = ?`
 		err = to.Raw(msql, oldEdbInfo.EdbInfoId).Scan(&predictEdbConfList).Error
 		if err != nil {
 			errmsg = "获取关联的预测指标信息失败:Err:" + err.Error()
@@ -1255,15 +1262,15 @@ func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (relationEdbInfoIdList []i
 			}
 			exists[v.PredictEdbInfoId] = true
 			predictEdbConfList = append(predictEdbConfList, v)
-		}
-		replaceCalculateTotal += len(predictEdbConfList)
 
-		//替换预测指标的来源指标
-		msql = `UPDATE predict_edb_conf SET source_edb_info_id=? WHERE source_edb_info_id=? `
-		err = to.Exec(msql, newEdbInfo.EdbInfoId, oldEdbInfo.EdbInfoId).Error
-		if err != nil {
-			return
+			//替换预测指标的来源指标
+			msql = `UPDATE predict_edb_conf SET source_edb_info_id=? WHERE config_id=? `
+			err = to.Exec(msql, newEdbInfo.EdbInfoId, v.ConfigId).Error
+			if err != nil {
+				return
+			}
 		}
+		replaceCalculateTotal += len(predictEdbConfList)
 
 		if len(predictEdbConfList) > 0 {
 			edbInfoIdList := make([]string, 0)
@@ -2002,6 +2009,7 @@ func GetEdbInfoByClassifyIdAndSource(classifyId, edbInfoType, source int) (items
 type ReplaceEdbInfoItem struct {
 	OldEdbInfo *EdbInfo
 	NewEdbInfo *EdbInfo
+	UserId     int
 }
 
 type EdbInfoEditRecord struct {

+ 43 - 0
models/data_manage/edb_info_share.go

@@ -243,3 +243,46 @@ MAX(b."sort") AS "sort"
 
 	return
 }
+
+// UserShareEdbClassifyItem
+// @Description: 用户分享的指标分类列表
+type UserShareEdbClassifyItem struct {
+	UserId           int    `description:"用户id"`
+	UserName         string `description:"用户名称"`
+	ClassifyId       int    `description:"分类id"`
+	EdbInfoId        int    `description:"指标id"`
+	ClassifyType     uint8  `description:"分类类型,0:普通指标分类,1:预测指标分类"`
+	ClassifyName     string
+	ClassifyNameEn   string
+	ParentId         int
+	RootId           int    `description:"顶级id"`
+	Level            int    `description:"层级"`
+	Sort             int    `description:"排序字段,越小越靠前,默认值:10"`
+	UniqueCode       string `description:"唯一编码"`
+	Source           int    `description:"来源id"`
+	SourceName       string `description:"来源名称"`
+	SysUserId        int    `description:"创建人id"`
+	SysUserRealName  string `description:"创建人姓名"`
+	StartDate        string
+	EdbCode          string
+	EdbType          int                         `description:"指标类型:1:基础指标,2:计算指标"`
+	Children         []*UserShareEdbClassifyItem `gorm:"-"`
+	Button           EdbClassifyItemsButton      `gorm:"-" description:"操作权限"`
+	IsJoinPermission int                         `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	HaveOperaAuth    bool                        `description:"是否有数据权限"`
+	ClassifyIdPath   string                      `description:"分类的完整路径,格式为:父级ID,当前ID"`
+}
+
+type UserShareEdbClassifyItemList []*UserShareEdbClassifyItem
+
+func (m UserShareEdbClassifyItemList) Len() int {
+	return len(m)
+}
+
+func (m UserShareEdbClassifyItemList) Less(i, j int) bool {
+	return m[i].Sort < m[j].Sort
+}
+
+func (m UserShareEdbClassifyItemList) Swap(i, j int) {
+	m[i], m[j] = m[j], m[i]
+}

+ 9 - 0
models/data_manage/excel/excel_edb_mapping.go

@@ -104,6 +104,15 @@ func GetExcelEdbMappingByEdbInfoIdAndSource(edbInfoId int, sources []int) (items
 	return
 }
 
+// GetUserExcelEdbMappingByEdbInfoIdAndSource 根据指标id获取所属用户的配置关系
+func GetUserExcelEdbMappingByEdbInfoIdAndSource(userId, edbInfoId int, sources []int) (items []*ExcelEdbMapping, err error) {
+	sql := ` SELECT a.*  FROM excel_edb_mapping AS a 
+           JOIN excel_info AS b on a.excel_info_id = b.excel_info_id
+           WHERE 1=1 AND a.sys_user_id = ? AND b.edb_info_id = ? AND b.source in (` + utils.GetOrmInReplace(len(sources)) + `) `
+	err = global.DmSQL["data"].Raw(sql, userId, edbInfoId, sources).Find(&items).Error
+	return
+}
+
 // DeleteCustomAnalysisExcelEdbMappingByEdbInfoId
 // @Description: 根据指标id删除与自定义分析表格的关系
 // @author: Roc

+ 3 - 3
models/data_manage/multiple_graph_config.go

@@ -81,7 +81,7 @@ type RollingCorrelationConfig struct {
 }
 
 // ReplaceEdbInfoInLineEquationMultipleGraphConfig 获取拟合方程配置
-func ReplaceEdbInfoInLineEquationMultipleGraphConfig(oldEdbInfo, newEdbInfo *EdbInfo) (replaceConfigTotal int, err error) {
+func ReplaceEdbInfoInLineEquationMultipleGraphConfig(oldEdbInfo, newEdbInfo *EdbInfo, userId int) (replaceConfigTotal int, err error) {
 	var errmsg string
 	logMsg := `` // 记录替换的日志
 	to := global.DmSQL["data"].Begin()
@@ -106,8 +106,8 @@ func ReplaceEdbInfoInLineEquationMultipleGraphConfig(oldEdbInfo, newEdbInfo *Edb
 	//替换multiple_graph_config中的指标
 	{
 		multipleGraphConfigList := make([]*MultipleGraphConfig, 0)
-		csql := `SELECT * FROM multiple_graph_config WHERE edb_info_id_a=0 AND edb_info_id_b=0 AND curve !=''`
-		err = to.Raw(csql).Find(&multipleGraphConfigList).Error
+		csql := `SELECT * FROM multiple_graph_config WHERE sys_user_id = ? AND  edb_info_id_a=0 AND edb_info_id_b=0 AND curve !=''`
+		err = to.Raw(csql, userId).Find(&multipleGraphConfigList).Error
 		if err != nil {
 			errmsg = "获取指标关联图表配置信息失败:Err:" + err.Error()
 			return

+ 38 - 15
models/data_manage/multiple_graph_config_chart_mapping.go

@@ -54,7 +54,7 @@ func GetMultipleGraphConfigChartMappingListById(configId int) (items []*Multiple
 }
 
 // ReplaceMultipleGraphConfigChartEdb 替换相关性分析配置中的指标
-func ReplaceMultipleGraphConfigChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (replaceConfigTotal int, err error) {
+func ReplaceMultipleGraphConfigChartEdb(oldEdbInfo, newEdbInfo *EdbInfo, userId int) (replaceConfigTotal int, err error) {
 	var errmsg string
 	logMsg := `` // 记录替换的日志
 	to := global.DmSQL["data"].Begin()
@@ -78,8 +78,8 @@ func ReplaceMultipleGraphConfigChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (replac
 
 	//替换multiple_graph_config中的指标
 	multipleGraphConfigList := make([]*MultipleGraphConfig, 0)
-	csql := `SELECT * FROM multiple_graph_config WHERE (edb_info_id_a=? or edb_info_id_b=?)`
-	err = to.Raw(csql, oldEdbInfo.EdbInfoId, oldEdbInfo.EdbInfoId).Find(&multipleGraphConfigList).Error
+	csql := `SELECT * FROM multiple_graph_config WHERE sys_user_id = ? AND (edb_info_id_a=? or edb_info_id_b=?)`
+	err = to.Raw(csql, userId, oldEdbInfo.EdbInfoId, oldEdbInfo.EdbInfoId).Find(&multipleGraphConfigList).Error
 	if err != nil {
 		errmsg = "获取指标关联图表配置信息失败:Err:" + err.Error()
 		return
@@ -160,22 +160,45 @@ func ReplaceMultipleGraphConfigChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (replac
 	}
 
 	// 更新相关性图表中的
-	sql := `UPDATE chart_info_correlation SET edb_info_id_first=?, modify_time=? WHERE edb_info_id_first=?`
-	err = to.Exec(sql, newEdbInfo.EdbInfoId, time.Now(), oldEdbInfo.EdbInfoId).Error
-	if err != nil {
-		errmsg = "更新相关性图表中的指标id关联失败:Err:" + err.Error()
-		return
-	}
+	{
+		// 查询我的相关性图表
+
+		tmpChartInfoCorrelationList := make([]*ChartInfoCorrelation, 0)
+		tmpSql := `SELECT a.* FROM chart_info_correlation AS a 
+         JOIN chart_info AS b on a.correlation_chart_info_id = b.chart_info_id
+         WHERE b.sys_user_id = ? AND (edb_info_id_a=? or edb_info_id_b=?) `
+		err = to.Raw(tmpSql, userId, oldEdbInfo.EdbInfoId, oldEdbInfo.EdbInfoId).Find(&tmpChartInfoCorrelationList).Error
+		if err != nil {
+			errmsg = "获取指标关联图表配置信息失败:Err:" + err.Error()
+			return
+		}
+		chartInfoIdList := make([]int, 0)
+		for _, v := range tmpChartInfoCorrelationList {
+			chartInfoIdList = append(chartInfoIdList, v.CorrelationChartInfoId)
+		}
+
+		num := len(chartInfoIdList)
+		// 更新相关性图表中的
+		if num > 0 {
+			sql := `UPDATE chart_info_correlation SET edb_info_id_first=?, modify_time=? WHERE edb_info_id_first=? AND correlation_chart_info_id IN (?) `
+			err = to.Exec(sql, newEdbInfo.EdbInfoId, time.Now(), oldEdbInfo.EdbInfoId, chartInfoIdList).Error
+			if err != nil {
+				errmsg = "更新相关性图表中的指标id关联失败:Err:" + err.Error()
+				return
+			}
+
+			sql = `UPDATE chart_info_correlation SET edb_info_id_second=?, modify_time=? WHERE edb_info_id_second=? AND correlation_chart_info_id IN (?) `
+			err = to.Exec(sql, newEdbInfo.EdbInfoId, time.Now(), oldEdbInfo.EdbInfoId, chartInfoIdList).Error
+			if err != nil {
+				errmsg = "更新相关性图表中的指标id关联失败:Err:" + err.Error()
+				return
+			}
+		}
 
-	sql = `UPDATE chart_info_correlation SET edb_info_id_second=?, modify_time=? WHERE edb_info_id_second=?`
-	err = to.Exec(sql, newEdbInfo.EdbInfoId, time.Now(), oldEdbInfo.EdbInfoId).Error
-	if err != nil {
-		errmsg = "更新相关性图表中的指标id关联失败:Err:" + err.Error()
-		return
 	}
 
 	// 替换拟合方程曲线替换指标
-	sql = `UPDATE chart_tag_variety SET edb_info_id=?, modify_time=? WHERE edb_info_id=?`
+	sql := `UPDATE chart_tag_variety SET edb_info_id=?, modify_time=? WHERE edb_info_id=?`
 	err = to.Exec(sql, newEdbInfo.EdbInfoId, time.Now(), oldEdbInfo.EdbInfoId).Error
 	if err != nil {
 		errmsg = "更新指标id关联跨品种分析标签失败:Err:" + err.Error()

+ 2 - 2
models/data_manage/response/chart_info_share.go

@@ -12,6 +12,6 @@ type ChartInfoShareUserResp struct {
 // ChartShareListResp
 // @Description: 共享列表
 type ChartShareListResp struct {
-	Send     []*data_manage.ChartClassifyItems
-	Received []*data_manage.ChartClassifyItems `description:"收到的共享"`
+	Send     data_manage.UserShareChartClassifyItemList
+	Received data_manage.UserShareChartClassifyItemList `description:"收到的共享"`
 }

+ 2 - 2
models/data_manage/response/edb_info_share.go

@@ -12,6 +12,6 @@ type EdbInfoShareUserResp struct {
 // EdbShareListResp
 // @Description: 共享列表
 type EdbShareListResp struct {
-	Send     data_manage.EdbClassifyItemList
-	Received data_manage.EdbClassifyItemList `description:"收到的共享"`
+	Send     data_manage.UserShareEdbClassifyItemList
+	Received data_manage.UserShareEdbClassifyItemList `description:"收到的共享"`
 }

+ 8 - 3
services/data/chart_info_share.go

@@ -47,7 +47,7 @@ func GetAllShareChartListByReceivedUserId(sysUserId int) (item []*data_manage.Sh
 // @param items []*data_manage.ShareChartInfoQuery
 // @return item data_manage.ChartClassifyItemList
 // @return err error
-func GetChartClassifyItemListByShareChartInfoQueryList(items []*data_manage.ShareChartInfoQuery) (item []*data_manage.ChartClassifyItems, err error) {
+func GetChartClassifyItemListByShareChartInfoQueryList(items []*data_manage.ShareChartInfoQuery) (item []*data_manage.UserShareChartClassifyItem, err error) {
 	// 所有分类
 	chartClassifyItemListMap := make(map[int][]*data_manage.ChartClassifyItems)
 	classifyIdList := make([]int, 0)
@@ -76,7 +76,7 @@ func GetChartClassifyItemListByShareChartInfoQueryList(items []*data_manage.Shar
 			//Children:            nil,
 			Button:           data_manage.ChartClassifyItemsButton{},
 			IsJoinPermission: v.IsJoinPermission,
-			//HaveOperaAuth:       false,
+			HaveOperaAuth:    true,
 			//ChartClassifyIdPath: "",
 		}
 		chartClassifyItemList, ok := chartClassifyItemListMap[v.ChartClassifyId]
@@ -119,7 +119,12 @@ func GetChartClassifyItemListByShareChartInfoQueryList(items []*data_manage.Shar
 			return
 		}
 
-		item = GetChartClassifyTreeRecursiveAndInsert(classifyItemsList, 0, chartClassifyItemListMap)
+		tmpList := GetChartClassifyTreeRecursiveAndInsert(classifyItemsList, 0, chartClassifyItemListMap)
+
+		// 再转一下就好了
+		obj := data_manage.ChartClassifyItems{}
+		item = obj.ToUserShareChartClassifyItemByList(tmpList)
+
 		//根据sort值排序
 		//sort.Sort(item)
 	}

+ 2 - 2
services/data/edb_info.go

@@ -1709,12 +1709,12 @@ func EdbInfoReplace(oldEdbInfo, newEdbInfo *data_manage.EdbInfo, sysAdminId int,
 	}()
 
 	// 替换关联表中的source_edb_info_id
-	relationEdbInfoIdList, replaceChartTotal, replaceCalculateTotal, err := data_manage.ReplaceChartEdb(oldEdbInfo, newEdbInfo)
+	relationEdbInfoIdList, replaceChartTotal, replaceCalculateTotal, err := data_manage.ReplaceChartEdb(oldEdbInfo, newEdbInfo, sysAdminId)
 	if err != nil {
 		return
 	}
 	//加入到缓存队列中处理
-	go cache.AddReplaceEdbInfo(oldEdbInfo, newEdbInfo)
+	go cache.AddReplaceEdbInfo(oldEdbInfo, newEdbInfo, sysAdminId)
 	// 更新所有的关联指标
 	err, _ = EdbInfoRefreshAllFromBaseV3(relationEdbInfoIdList, true, true, true)
 	return

+ 6 - 3
services/data/edb_info_share.go

@@ -49,7 +49,7 @@ func GetAllShareEdbListByReceivedUserId(sysUserId int) (item []*data_manage.Shar
 // @param items []*data_manage.ShareEdbInfoQuery
 // @return item data_manage.EdbClassifyItemList
 // @return err error
-func GetEdbClassifyItemListByShareEdbInfoQueryList(items []*data_manage.ShareEdbInfoQuery) (item data_manage.EdbClassifyItemList, err error) {
+func GetEdbClassifyItemListByShareEdbInfoQueryList(items []*data_manage.ShareEdbInfoQuery) (item data_manage.UserShareEdbClassifyItemList, err error) {
 	// 所有分类
 	edbClassifyItemListMap := make(map[int][]*data_manage.EdbClassifyItems)
 	classifyIdList := make([]int, 0)
@@ -74,7 +74,7 @@ func GetEdbClassifyItemListByShareEdbInfoQueryList(items []*data_manage.ShareEdb
 			//Children:         nil,
 			Button:           data_manage.EdbClassifyItemsButton{},
 			IsJoinPermission: v.IsJoinPermission,
-			HaveOperaAuth:    false,
+			HaveOperaAuth:    true,
 			ClassifyIdPath:   "",
 		}
 		edbClassifyItemList, ok := edbClassifyItemListMap[v.ClassifyId]
@@ -116,8 +116,11 @@ func GetEdbClassifyItemListByShareEdbInfoQueryList(items []*data_manage.ShareEdb
 		if err != nil {
 			return
 		}
+		tmpItem := GetClassifyTreeRecursiveAndInsert(classifyItemsList, 0, edbClassifyItemListMap)
 
-		item = GetClassifyTreeRecursiveAndInsert(classifyItemsList, 0, edbClassifyItemListMap)
+		// 再转一下就好了
+		obj := data_manage.EdbClassifyItems{}
+		item = obj.ToUserShareEdbClassifyItemByList(tmpItem)
 		//根据sort值排序
 		sort.Sort(item)
 	}

+ 10 - 8
services/edb_info_replace.go

@@ -33,9 +33,10 @@ func DealReplaceEdbCache() {
 			}
 			oldEdbInfo := record.OldEdbInfo
 			newEdbInfo := record.NewEdbInfo
-			utils.FileLog.Info(fmt.Sprintf("指标开始替换 DealReplaceEdbCache: 旧指标ID:%d,新指标ID:%d", oldEdbInfo.EdbInfoId, newEdbInfo.EdbInfoId))
+			userId := record.UserId
+			utils.FileLog.Info(fmt.Sprintf("指标开始替换 DealReplaceEdbCache: 旧指标ID:%d,新指标ID:%d,所属用户:%d", oldEdbInfo.EdbInfoId, newEdbInfo.EdbInfoId, userId))
 			deleteCache := true
-			setNxKey := fmt.Sprintf("EDB_INFO_REPLACE:%d-%d", oldEdbInfo.EdbInfoId, newEdbInfo.EdbInfoId)
+			setNxKey := fmt.Sprintf("EDB_INFO_REPLACE:%d-%d-%d", oldEdbInfo.EdbInfoId, newEdbInfo.EdbInfoId, userId)
 			defer func() {
 				if deleteCache {
 					utils.Rc.Delete(setNxKey)
@@ -48,47 +49,48 @@ func DealReplaceEdbCache() {
 			}
 
 			// 替换相关性图表配置
-			_, err = data_manage.ReplaceMultipleGraphConfigChartEdb(oldEdbInfo, newEdbInfo)
+			_, err = data_manage.ReplaceMultipleGraphConfigChartEdb(oldEdbInfo, newEdbInfo, userId)
 			if err != nil {
 				err = fmt.Errorf("替换相关性图表配置失败,errmsg:%s", err.Error())
 				return
 			}
 			// 替换拟合方程指标
-			_, err = data_manage.ReplaceEdbInfoInLineEquationMultipleGraphConfig(oldEdbInfo, newEdbInfo)
+			_, err = data_manage.ReplaceEdbInfoInLineEquationMultipleGraphConfig(oldEdbInfo, newEdbInfo, userId)
 			if err != nil {
 				err = fmt.Errorf("替换拟合方程指标失败,errmsg:%s", err.Error())
 				return
 			}
 
 			// 替换表格中的指标
-			err = ReplaceEdbInExcel(oldEdbInfo, newEdbInfo)
+			err = ReplaceEdbInExcel(oldEdbInfo, newEdbInfo, userId)
 			if err != nil {
 				err = fmt.Errorf("替换表格中的指标失败,errmsg:%s", err.Error())
 				return
 			}
 
 			//替换逻辑图中的指标
-			err = sandbox.ReplaceEdbInSandbox(oldEdbInfo.EdbInfoId, newEdbInfo.EdbInfoId)
+			err = sandbox.ReplaceEdbInSandbox(oldEdbInfo.EdbInfoId, newEdbInfo.EdbInfoId, userId)
 			if err != nil {
 				err = fmt.Errorf("替换逻辑图中的指标失败,errmsg:%s", err.Error())
 				return
 			}
 
 			// todo 重置指标引用表
+			// TODO 只是替换部分指标,该怎么处理 ---- Roc
 			ReplaceEdbInRelation(oldEdbInfo, newEdbInfo)
 		})
 	}
 }
 
 // ReplaceEdbInExcel 替换表格中的指标
-func ReplaceEdbInExcel(oldEdbInfo, newEdbInfo *data_manage.EdbInfo) (err error) {
+func ReplaceEdbInExcel(oldEdbInfo, newEdbInfo *data_manage.EdbInfo, userId int) (err error) {
 	defer func() {
 		if err != nil {
 			go alarm_msg.SendAlarmMsg("替换表格中的指标失败提醒,errMsg:"+err.Error(), 3)
 		}
 	}()
 	//查询和指标相关的时间序列表格和混合表格
-	mappingList, err := excelModel.GetExcelEdbMappingByEdbInfoIdAndSource(oldEdbInfo.EdbInfoId, []int{utils.TIME_TABLE, utils.MIXED_TABLE})
+	mappingList, err := excelModel.GetUserExcelEdbMappingByEdbInfoIdAndSource(userId, oldEdbInfo.EdbInfoId, []int{utils.TIME_TABLE, utils.MIXED_TABLE})
 	if err != nil {
 		err = fmt.Errorf("查询和指标相关的表格失败,错误:%s", err.Error())
 		return

+ 3 - 3
services/sandbox/sandbox.go

@@ -895,7 +895,7 @@ func GetSandBoxEdbIdsByContent(content string) (edbInfoIds []int, err error) {
 	}
 	return
 }
-func ReplaceEdbInSandbox(oldEdbInfoId, newEdbInfoId int) (err error) {
+func ReplaceEdbInSandbox(oldEdbInfoId, newEdbInfoId, userId int) (err error) {
 	updateTotal := 0
 	logMsg := ""
 	//分页处理沙盘表
@@ -908,7 +908,7 @@ func ReplaceEdbInSandbox(oldEdbInfoId, newEdbInfoId int) (err error) {
 		}
 	}()
 	//查询沙盘总数
-	total, err := sandbox.GetSandboxListCountByCondition("", []interface{}{})
+	total, err := sandbox.GetSandboxListCountByCondition(" AND sys_user_id = ? ", []interface{}{userId})
 	if err != nil {
 		err = fmt.Errorf("查询沙盘总数失败 Err:%s", err)
 		return
@@ -922,7 +922,7 @@ func ReplaceEdbInSandbox(oldEdbInfoId, newEdbInfoId int) (err error) {
 	//查询沙盘列表
 	for i := 0; i < totalPage; i += 1 {
 		startSize := i * 100
-		list, e := sandbox.GetSandboxListByCondition("", []interface{}{}, startSize, 100)
+		list, e := sandbox.GetSandboxListByCondition(" AND sys_user_id = ? ", []interface{}{userId}, startSize, 100)
 		if e != nil {
 			err = fmt.Errorf("查询沙盘列表失败 Err:%s", e)
 			return