Browse Source

图表预览

xyxie 9 months ago
parent
commit
f7498630f9

+ 7 - 0
controllers/chart.go

@@ -98,6 +98,13 @@ func (this *ChartController) ChartInfoDetail() {
 		resp, isOk, msg, errMsg = GetLineFeatureChartInfoDetailFromUniqueCode(chartInfo, key)
 	case utils.CHART_SOURCE_CROSS_HEDGING:
 		resp, isOk, msg, errMsg = GetCrossVarietyChartInfoDetailFromUniqueCode(chartInfo, key)
+	case utils.CHART_SOURCE_BALANCE_EXCEL:
+		resp, isOk, msg, errMsg = GetBalanceChartInfoDetailFromUniqueCode(chartInfo, key, this.Lang)
+		if !isOk {
+			br.Msg = msg
+			br.ErrMsg = errMsg
+			return
+		}
 	default:
 		br.Msg = "错误的图表"
 		br.ErrMsg = "错误的图表"

+ 3 - 3
controllers/chart_common.go

@@ -106,7 +106,7 @@ func (this *ChartController) CommonChartInfoDetailFromUniqueCode() {
 	case utils.CHART_SOURCE_CROSS_HEDGING:
 		resp, isOk, msg, errMsg = GetCrossVarietyChartInfoDetailFromUniqueCode(chartInfo, key)
 	case utils.CHART_SOURCE_BALANCE_EXCEL:
-		resp, isOk, msg, errMsg = GetBalanceChartInfoDetailFromUniqueCode(chartInfo, key)
+		resp, isOk, msg, errMsg = GetBalanceChartInfoDetailFromUniqueCode(chartInfo, key, this.Lang)
 		if !isOk {
 			br.Msg = msg
 			br.ErrMsg = errMsg
@@ -574,7 +574,7 @@ func GetCrossVarietyChartInfoDetailFromUniqueCode(chartInfo *models.ChartInfo, k
 	return
 }
 
-func GetBalanceChartInfoDetailFromUniqueCode(chartInfo *models.ChartInfo, key string) (resp *models.ChartInfoDetailResp, isOk bool, msg, errMsg string) {
+func GetBalanceChartInfoDetailFromUniqueCode(chartInfo *models.ChartInfo, key, lang string) (resp *models.ChartInfoDetailResp, isOk bool, msg, errMsg string) {
 	resp = new(models.ChartInfoDetailResp)
 	msg = `获取失败`
 	var err error
@@ -587,7 +587,7 @@ func GetBalanceChartInfoDetailFromUniqueCode(chartInfo *models.ChartInfo, key st
 		}
 	}()
 	// 相关联指标
-	mappingListTmp, dataListMap, err, errMsg := excel.GetBalanceExcelChartSingle(chartInfo, "")
+	mappingListTmp, dataListMap, err, errMsg := excel.GetBalanceExcelChartSingle(chartInfo.ChartInfoId, 0, lang)
 	if err != nil {
 		errMsg = "获取失败"
 		err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())

+ 82 - 0
models/data_manage/excel/excel_chart_data.go

@@ -1,6 +1,8 @@
 package excel
 
 import (
+	"eta/eta_chart_lib/models"
+	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
@@ -9,6 +11,7 @@ type ExcelChartData struct {
 	ExcelChartDataId int `orm:"column(excel_chart_data_id);pk"`
 	ExcelInfoId      int `description:"表格id"`
 	ExcelChartEdbId  int `description:"指标ID"`
+	ChartInfoId      int `description:"图表id"`
 	DataTime         string
 	Value            float64
 	ModifyTime       time.Time `description:"修改时间"`
@@ -42,3 +45,82 @@ func (e *ExcelChartData) Delete() (err error) {
 }
 
 // 查询
+func GetExcelChartDataByExcelInfoId(excelInfoId int) (list []*ExcelChartData, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT *
+             FROM excel_chart_data
+			 WHERE excel_info_id=? 
+             ORDER BY excel_chart_edb_id ASC, excel_chart_data_id ASC `
+	_, err = o.Raw(sql, excelInfoId).QueryRows(&list)
+	return
+}
+
+func BatchUpdateChartEdbData(excelInfoId int, excelEdbMap map[int]*ExcelChartEdb, excelDataMap map[int][]*models.EdbDataList) (err error) {
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+	//如果有数据则删除所有的数据
+	sql := `delete from excel_chart_data where excel_info_id = ?`
+	_, err = o.Raw(sql, excelInfoId).Exec()
+	if err != nil {
+		return
+	}
+
+	// 图表指标数据入库
+	addList := make([]*ExcelChartData, 0)
+	for chartEdbId, dataList := range excelDataMap {
+		chartEdb, ok := excelEdbMap[chartEdbId]
+		if !ok {
+			err = fmt.Errorf("chartEdbId:%d not exist", chartEdbId)
+			return
+		}
+		for _, v := range dataList {
+			chartData := &ExcelChartData{
+				ExcelInfoId:     chartEdb.ExcelInfoId,
+				ExcelChartEdbId: chartEdb.ExcelChartEdbId,
+				ChartInfoId:     chartEdb.ChartInfoId,
+				DataTime:        v.DataTime,
+				Value:           v.Value,
+				DataTimestamp:   v.DataTimestamp,
+				ModifyTime:      time.Now(),
+				CreateTime:      time.Now(),
+			}
+			addList = append(addList, chartData)
+			// data信息入库
+			if len(addList) > 1000 {
+				_, err = o.InsertMulti(len(addList), addList)
+				if err != nil {
+					return
+				}
+				addList = addList[:0]
+			}
+		}
+	}
+
+	// data信息入库
+	if len(addList) > 0 {
+		_, err = o.InsertMulti(len(addList), addList)
+		if err != nil {
+			return
+		}
+	}
+	return
+}
+
+func GetExcelChartDataByChartInfoId(chartInfoId int) (list []*ExcelChartData, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT *
+             FROM excel_chart_Data
+			 WHERE chart_info_id=? 
+             ORDER BY excel_chart_edb_id ASC `
+	_, err = o.Raw(sql, chartInfoId).QueryRows(&list)
+	return
+}

+ 223 - 3
models/data_manage/excel/excel_chart_edb.go

@@ -1,8 +1,12 @@
 package excel
 
 import (
+	"eta/eta_chart_lib/models"
 	"eta/eta_chart_lib/utils"
+	"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -93,8 +97,138 @@ func (e *ExcelChartEdb) Delete() (err error) {
 
 type AddChartEdbAndDataItem struct {
 	ChartEdb *ExcelChartEdb
-	DateList []string  `description:"日期列表"`
-	ValList  []float64 `description:"数据列表"`
+	DataList []*ExcelChartData `description:"数据列表"`
+}
+
+// 同时添加指标和指标数据
+func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chartInfo *models.ChartInfo, deleteEdbIds []int) (err error) {
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+
+	// 先删除原先的绑定的指标
+	if len(deleteEdbIds) > 0 && chartInfo.ChartInfoId > 0 {
+		sql := `DELETE FROM excel_chart_edb WHERE chart_info_id = ? AND excel_chart_edb_id in (` + utils.GetOrmInReplace(len(deleteEdbIds)) + `)`
+		_, err = o.Raw(sql, chartInfo.ChartInfoId, deleteEdbIds).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除原先的指标失败:%v", err)
+			return
+		}
+	}
+	// 图表指标信息入库
+	updateIds := make([]int, 0)
+	var edbInfoIdArrStr []string
+	for _, item := range list {
+		err = addChartEdbAndData(o, item.ChartEdb, item.DataList)
+		if err != nil {
+			return
+		}
+		updateIds = append(updateIds, item.ChartEdb.ExcelChartEdbId)
+		edbInfoIdArrStr = append(edbInfoIdArrStr, strconv.Itoa(item.ChartEdb.ExcelChartEdbId))
+	}
+
+	//新增图表
+	chartInfoId := chartInfo.ChartInfoId
+	if chartInfo.ChartInfoId <= 0 {
+		lastId, e := o.Insert(chartInfo)
+		if e != nil {
+			err = fmt.Errorf("新增图表失败,AddChartEdbAndData: %v", e)
+			return
+		}
+		chartInfoId = int(lastId)
+	} else {
+		_, err = o.Update(chartInfo)
+		if err != nil {
+			err = fmt.Errorf("更新图表失败,AddChartEdbAndData: %v", e)
+			return
+		}
+	}
+
+	//更新图表id
+	sql := `update excel_chart_edb set chart_info_id = ? where excel_chart_edb_id in (` + utils.GetOrmInReplace(len(updateIds)) + `) and chart_info_id=0`
+	_, err = o.Raw(sql, chartInfoId, updateIds).Exec()
+	if err != nil {
+		err = fmt.Errorf("更新图表id失败,AddChartEdbAndData: %v", err)
+		return
+	}
+
+	if len(edbInfoIdArrStr) > 0 {
+		edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
+		//更新图表关联的指标id
+		sql = `update chart_info set edb_info_ids = ? where chart_info_id = ?`
+		_, err = o.Raw(sql, edbInfoIdStr, chartInfoId).Exec()
+	}
+	return
+}
+
+func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dataList []*ExcelChartData) (err error) {
+	// 图表指标信息入库
+	excelChartEdbId := chartEdb.ExcelChartEdbId
+	if chartEdb.ExcelChartEdbId <= 0 {
+		lastId, e := o.Insert(chartEdb)
+		if e != nil {
+			err = fmt.Errorf("新增指标失败,addChartEdbAndData: %v", e)
+			return
+		}
+		excelChartEdbId = int(lastId)
+	} else {
+		_, e := o.Update(chartEdb)
+		if e != nil {
+			err = fmt.Errorf("更新指标失败,addChartEdbAndData: %v", e)
+			return
+		}
+		//如果有数据则删除所有的数据
+		sql := `delete from excel_chart_data where excel_chart_edb_id = ?`
+		_, err = o.Raw(sql, excelChartEdbId).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	chartEdb.ExcelChartEdbId = excelChartEdbId
+
+	// 图表指标数据入库
+	addList := make([]*ExcelChartData, 0)
+	if len(dataList) > 0 {
+		for _, v := range dataList {
+			chartData := &ExcelChartData{
+				ExcelInfoId:     chartEdb.ExcelInfoId,
+				ExcelChartEdbId: chartEdb.ExcelChartEdbId,
+				ChartInfoId:     chartEdb.ChartInfoId,
+				DataTime:        v.DataTime,
+				Value:           v.Value,
+				DataTimestamp:   v.DataTimestamp,
+				ModifyTime:      time.Now(),
+				CreateTime:      time.Now(),
+			}
+			addList = append(addList, chartData)
+			// data信息入库
+			if len(addList) > 1000 {
+				_, err = o.InsertMulti(len(addList), addList)
+				if err != nil {
+					return
+				}
+				addList = addList[:0]
+			}
+		}
+	}
+
+	// data信息入库
+	if len(addList) > 0 {
+		_, err = o.InsertMulti(len(addList), addList)
+		if err != nil {
+			return
+		}
+	}
+	return
 }
 
 func GetExcelChartEdbMappingByExcelInfoId(excelInfoId int) (list []*ExcelChartEdb, err error) {
@@ -102,7 +236,7 @@ func GetExcelChartEdbMappingByExcelInfoId(excelInfoId int) (list []*ExcelChartEd
 	sql := ` SELECT *
              FROM excel_chart_edb 
 			 WHERE excel_info_id=? 
-             ORDER BY excel_chart_edb_id ASC `
+             ORDER BY chart_info_id asc, excel_chart_edb_id ASC `
 	_, err = o.Raw(sql, excelInfoId).QueryRows(&list)
 	return
 }
@@ -141,3 +275,89 @@ func GetExcelInfoByChartInfoId(chartInfoId int) (item *ExcelInfo, err error) {
 	err = o.Raw(sql, chartInfoId).QueryRow(&item)
 	return
 }
+
+// 同时删除指标和指标数据
+func DeleteExcelChartEdbAndData(excelInfoIds []int, chartInfoIds []int) (err error) {
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+	// 把对应的表格状态改成删除状态
+	//更新图表id
+	sql := `update excel_info set is_delete = 1, modify_time = ? where excel_info_id in (` + utils.GetOrmInReplace(len(excelInfoIds)) + `)`
+	_, err = o.Raw(sql, time.Now(), excelInfoIds).Exec()
+	if err != nil {
+		err = fmt.Errorf("更新图表id失败,AddChartEdbAndData: %v", err)
+		return
+	}
+	// 把删除图表状态
+	if len(chartInfoIds) > 0 {
+		sql := `DELETE FROM chart_info WHERE  chart_info_id in (` + utils.GetOrmInReplace(len(chartInfoIds)) + `)`
+		_, err = o.Raw(sql, chartInfoIds).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除原先的指标失败:%v", err)
+			return
+		}
+
+		// todo 如果加入到我的图库中,则删除我的图库中的数据
+	}
+	// 删除原先的绑定的指标
+	sql = `DELETE FROM excel_chart_edb WHERE  excel_info_id in (` + utils.GetOrmInReplace(len(excelInfoIds)) + `)`
+	_, err = o.Raw(sql, excelInfoIds).Exec()
+	if err != nil {
+		err = fmt.Errorf("删除原先的指标失败:%v", err)
+		return
+	}
+	// 删除指标数据
+	sql = `DELETE FROM excel_chart_data WHERE  excel_info_id in (` + utils.GetOrmInReplace(len(excelInfoIds)) + `)`
+	_, err = o.Raw(sql, excelInfoIds).Exec()
+	if err != nil {
+		err = fmt.Errorf("删除原先的指标失败:%v", err)
+		return
+	}
+	return
+}
+
+// 删除平衡表中的指标和数据
+func DeleteBalanceExcelChartInfoAndData(chartInfoId int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+
+	sql := ` DELETE FROM chart_info WHERE chart_info_id=? `
+	_, err = to.Raw(sql, chartInfoId).Exec()
+	if err != nil {
+		err = fmt.Errorf("删除平衡表图表失败 %s", err.Error())
+		return
+	}
+	sql = ` DELETE FROM  excel_chart_edb WHERE chart_info_id=? `
+	_, err = to.Raw(sql, chartInfoId).Exec()
+	if err != nil {
+		err = fmt.Errorf("删除平衡表图表指标失败 %s", err.Error())
+		return
+	}
+	// 删除表格里的数据
+	sql = ` DELETE FROM  excel_chart_data WHERE chart_info_id=? `
+	_, err = to.Raw(sql, chartInfoId).Exec()
+	if err != nil {
+		err = fmt.Errorf("删除平衡表图表指标失败 %s", err.Error())
+		return
+	}
+	return
+}

+ 21 - 16
models/data_manage/excel/excel_info.go

@@ -9,22 +9,27 @@ import (
 
 // ExcelInfo excel表格详情表
 type ExcelInfo struct {
-	ExcelInfoId      int       `orm:"column(excel_info_id);pk"`
-	Source           int       `description:"表格来源,1:excel插件的表格,2:自定义表格,3:混合表格,4:自定义分析,默认:1"`
-	ExcelType        int       `description:"表格类型,1:指标列,2:日期列,默认:1"`
-	ExcelName        string    `description:"表格名称"`
-	UniqueCode       string    `description:"表格唯一编码"`
-	ExcelClassifyId  int       `description:"表格分类id"`
-	SysUserId        int       `description:"操作人id"`
-	SysUserRealName  string    `description:"操作人真实姓名"`
-	Content          string    `description:"表格内容"`
-	ExcelImage       string    `description:"表格图片"`
-	FileUrl          string    `description:"表格下载地址"`
-	Sort             int       `description:"排序字段,数字越小越排前面"`
-	IsDelete         int       `description:"是否删除,0:未删除,1:已删除"`
-	ModifyTime       time.Time `description:"最近修改日期"`
-	CreateTime       time.Time `description:"创建日期"`
-	IsJoinPermission int       `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	ExcelInfoId        int       `orm:"column(excel_info_id);pk"`
+	Source             int       `description:"表格来源,1:excel插件的表格,2:自定义表格,3:混合表格,4:自定义分析,默认:1"`
+	ExcelType          int       `description:"表格类型,1:指标列,2:日期列,默认:1"`
+	ExcelName          string    `description:"表格名称"`
+	UniqueCode         string    `description:"表格唯一编码"`
+	ExcelClassifyId    int       `description:"表格分类id"`
+	SysUserId          int       `description:"操作人id"`
+	SysUserRealName    string    `description:"操作人真实姓名"`
+	Content            string    `description:"表格内容"`
+	ExcelImage         string    `description:"表格图片"`
+	FileUrl            string    `description:"表格下载地址"`
+	Sort               int       `description:"排序字段,数字越小越排前面"`
+	IsDelete           int       `description:"是否删除,0:未删除,1:已删除"`
+	ModifyTime         time.Time `description:"最近修改日期"`
+	CreateTime         time.Time `description:"创建日期"`
+	IsJoinPermission   int       `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	BalanceType        int       `description:"平衡表类型:0 动态表,1静态表"`
+	UpdateUserId       int       `description:"更新人id"`
+	UpdateUserRealName string    `description:"更新人真实姓名"`
+	RelExcelInfoId     int       `description:"平衡表里静态表关联的动态表excel id"`
+	VersionName        string    `description:"静态表版本名称"`
 }
 
 // Update 更新 excel表格基础信息

+ 74 - 66
services/data/chart_info_excel_balance.go

@@ -43,68 +43,9 @@ func GetBalanceExcelChartDetail(chartInfo *models.ChartInfo, mappingListTmp []*e
 		calendar = "公历"
 	}
 
-	mappingList := make([]*models.ChartEdbInfoMapping, 0)
-	//循环组装映射关系
-	for _, v := range mappingListTmp {
-		dataList := make([]*models.EdbDataList, 0)
-		dataListTmp, ok := dataListMap[v.ExcelChartEdbId]
-		if ok {
-			dataList = dataListTmp
-		} else {
-			err = errors.New(fmt.Sprint("获取失败,指标类型异常", v.ExcelChartEdbId))
-			return
-		}
-		startDateStr, endDateStr, _, endVal, maxValue, minValue := getBalanceDataListStartDateAndValue(dataList)
-		mapping := &models.ChartEdbInfoMapping{
-			EdbInfoId:         v.ExcelChartEdbId,
-			SourceName:        "",
-			Source:            0,
-			SubSource:         0,
-			EdbCode:           v.EdbCode,
-			EdbName:           v.EdbName,
-			EdbAliasName:      v.EdbName,
-			EdbNameEn:         "",
-			EdbAliasNameEn:    "",
-			EdbType:           0,
-			Frequency:         "",
-			FrequencyEn:       "",
-			Unit:              "",
-			UnitEn:            "",
-			StartDate:         startDateStr,
-			EndDate:           endDateStr,
-			ModifyTime:        v.ModifyTime.Format(utils.FormatDateTime),
-			ChartEdbMappingId: v.ExcelChartEdbId,
-			ChartInfoId:       chartInfoId,
-			MaxData:           v.MaxData,
-			MinData:           v.MinData,
-			IsOrder:           v.IsOrder,
-			IsAxis:            v.IsAxis,
-			EdbInfoType:       v.EdbInfoType,
-			//EdbInfoCategoryType: 0,
-			LeadValue:         v.LeadValue,
-			LeadUnit:          v.LeadUnit,
-			LeadUnitEn:        "",
-			ChartStyle:        "",
-			ChartColor:        "",
-			PredictChartColor: "",
-			ChartWidth:        v.ChartWidth,
-			ChartType:         chartType,
-			LatestDate:        endDateStr,
-			LatestValue:       endVal,
-			MoveLatestDate:    "",
-			UniqueCode:        "",
-			MinValue:          minValue,
-			MaxValue:          maxValue,
-			DataList:          nil,
-			IsNullData:        false,
-			MappingSource:     0,
-			IsConvert:         0,
-			ConvertType:       0,
-			ConvertValue:      0,
-			ConvertUnit:       "",
-			ConvertEnUnit:     "",
-		}
-		mappingList = append(mappingList, mapping)
+	mappingList, err := TransferChartEdbToEdbMappingFormat(chartInfoId, chartType, mappingListTmp, dataListMap)
+	if err != nil {
+		return
 	}
 	if chartType == 2 {
 		startDate = seasonStartDate
@@ -186,6 +127,7 @@ func GetBalanceExcelChartDetail(chartInfo *models.ChartInfo, mappingListTmp []*e
 	}
 	// 图表的指标来源
 	sourceNameList, sourceNameEnList := GetEdbSourceByEdbInfoIdList(edbList)
+
 	chartInfo.ChartSource = strings.Join(sourceNameList, ",")
 	chartInfo.ChartSourceEn = strings.Join(sourceNameEnList, ",")
 
@@ -234,7 +176,7 @@ func GetBalanceExcelEdbDataMapList(chartInfoId, chartType int, calendar, startDa
 			item.EdbInfoType = 1
 			item.ChartStyle = ""
 			item.ChartColor = ""
-			item.ChartWidth = 0
+			item.ChartWidth = 1
 			item.MaxData = v.MaxValue
 			item.MinData = v.MinValue
 		} else {
@@ -326,8 +268,8 @@ func GetBalanceExcelEdbDataMapList(chartInfoId, chartType int, calendar, startDa
 		if ok {
 			dataList = dataListTmp
 		} else {
-			err = errors.New(fmt.Sprint("获取失败,指标类型异常", v.EdbInfoId))
-			return
+			//err = errors.New(fmt.Sprint("获取失败,指标类型异常", v.EdbInfoId))
+			utils.FileLog.Info(fmt.Sprintf("获取失败,指标数据异常 %d", v.EdbInfoId))
 		}
 		if v.IsConvert == 1 {
 			switch v.ConvertType {
@@ -411,7 +353,6 @@ func GetBalanceExcelEdbDataMapList(chartInfoId, chartType int, calendar, startDa
 
 	return
 }
-
 func getBalanceDataListStartDateAndValue(dataList []*models.EdbDataList) (startDate, endDate string, startVal, endVal, maxVal, minVal float64) {
 	if len(dataList) == 0 {
 		return
@@ -440,3 +381,70 @@ func getBalanceDataListStartDateAndValue(dataList []*models.EdbDataList) (startD
 	}
 	return
 }
+
+func TransferChartEdbToEdbMappingFormat(chartInfoId, chartType int, mappingListTmp []*excel.ExcelChartEdb, dataListMap map[int][]*models.EdbDataList) (mappingList []*models.ChartEdbInfoMapping, err error) {
+	mappingList = make([]*models.ChartEdbInfoMapping, 0)
+	//循环组装映射关系
+	for _, v := range mappingListTmp {
+		dataList := make([]*models.EdbDataList, 0)
+		dataListTmp, ok := dataListMap[v.ExcelChartEdbId]
+		if ok {
+			dataList = dataListTmp
+		} else {
+			//err = errors.New(fmt.Sprint("获取失败,指标类型异常", v.ExcelChartEdbId))
+			utils.FileLog.Info(fmt.Sprintf("获取失败,指标数据异常 %d", v.ExcelChartEdbId))
+		}
+		startDateStr, endDateStr, _, endVal, maxValue, minValue := getBalanceDataListStartDateAndValue(dataList)
+		mapping := &models.ChartEdbInfoMapping{
+			EdbInfoId:         v.ExcelChartEdbId,
+			SourceName:        "平衡表",
+			Source:            0,
+			SubSource:         0,
+			EdbCode:           v.EdbCode,
+			EdbName:           v.EdbName,
+			EdbAliasName:      v.EdbName,
+			EdbNameEn:         "",
+			EdbAliasNameEn:    "",
+			EdbType:           0,
+			Frequency:         "",
+			FrequencyEn:       "",
+			Unit:              "",
+			UnitEn:            "",
+			StartDate:         startDateStr,
+			EndDate:           endDateStr,
+			ModifyTime:        v.ModifyTime.Format(utils.FormatDateTime),
+			ChartEdbMappingId: v.ExcelChartEdbId,
+			ChartInfoId:       chartInfoId,
+			MaxData:           v.MaxData,
+			MinData:           v.MinData,
+			IsOrder:           v.IsOrder,
+			IsAxis:            v.IsAxis,
+			EdbInfoType:       v.EdbInfoType,
+			//EdbInfoCategoryType: 0,
+			LeadValue:         v.LeadValue,
+			LeadUnit:          v.LeadUnit,
+			LeadUnitEn:        "",
+			ChartStyle:        "",
+			ChartColor:        "",
+			PredictChartColor: "",
+			ChartWidth:        v.ChartWidth,
+			ChartType:         chartType,
+			LatestDate:        endDateStr,
+			LatestValue:       endVal,
+			MoveLatestDate:    "",
+			UniqueCode:        "",
+			MinValue:          minValue,
+			MaxValue:          maxValue,
+			DataList:          nil,
+			IsNullData:        false,
+			MappingSource:     0,
+			IsConvert:         0,
+			ConvertType:       0,
+			ConvertValue:      0,
+			ConvertUnit:       "",
+			ConvertEnUnit:     "",
+		}
+		mappingList = append(mappingList, mapping)
+	}
+	return
+}

+ 17 - 1
services/data/chart_info_interface.go

@@ -2,10 +2,12 @@ package data
 
 import (
 	"eta/eta_chart_lib/models"
+	"eta/eta_chart_lib/models/data_manage/excel"
 )
 
 type ChartInfoDataShow interface {
 	GetEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate string, mappingList []*models.ChartEdbInfoMapping, seasonExtraConfig string) (edbDataListMap map[int][]*models.EdbDataList, edbList []*models.ChartEdbInfoMapping, err error)
+	GetChartEdbMappingListByEdbInfoIdList(edbIdList []int) (mappingList []*models.ChartEdbInfoMapping, err error)
 }
 
 type BaseChartInfoDataShow struct {
@@ -18,8 +20,15 @@ func (e *BaseChartInfoDataShow) GetEdbDataMapList(chartInfoId, chartType int, ca
 	return
 }
 
+// GetChartEdbMappingListByEdbInfoIdList 获取指标最后的基础数据
+func (e *BaseChartInfoDataShow) GetChartEdbMappingListByEdbInfoIdList(edbIdList []int) (mappingList []*models.ChartEdbInfoMapping, err error) {
+	mappingList, err = models.GetChartEdbMappingListByEdbInfoIdList(edbIdList)
+	return
+}
+
 type ExcelChartInfoDataShow struct {
-	DataListMap map[int][]*models.EdbDataList
+	DataListMap    map[int][]*models.EdbDataList
+	MappingListTmp []*excel.ExcelChartEdb
 }
 
 // GetEdbDataMapList 获取指标最后的基础数据
@@ -28,3 +37,10 @@ func (e *ExcelChartInfoDataShow) GetEdbDataMapList(chartInfoId, chartType int, c
 	edbDataListMap, edbList, err = GetBalanceExcelEdbDataMapList(chartInfoId, chartType, calendar, startDate, endDate, mappingList, seasonExtraConfig, e.DataListMap)
 	return
 }
+
+// GetChartEdbMappingListByEdbInfoIdList 获取指标最后的基础数据
+func (e *ExcelChartInfoDataShow) GetChartEdbMappingListByEdbInfoIdList(edbIdList []int) (mappingList []*models.ChartEdbInfoMapping, err error) {
+	// 指标对应的所有数据
+	mappingList, err = TransferChartEdbToEdbMappingFormat(0, 0, e.MappingListTmp, e.DataListMap)
+	return
+}

+ 45 - 9
services/data/excel/balance_table.go

@@ -50,10 +50,22 @@ func GetBalanceExcelData(excelDetail *excel.ExcelInfo, lang string) (newDataMap
 	return
 }
 
-// 获取单个图表信息
-func GetBalanceExcelChartSingle(chartInfo *models.ChartInfo, lang string) (mappingListTmp []*excel.ExcelChartEdb, dataListMap map[int][]*models.EdbDataList, err error, errMsg string) {
+// 根据chartInfoId获取单个图表信息
+func GetBalanceExcelChartSingle(chartInfoId, ChartEdbId int, lang string) (mappingListTmp []*excel.ExcelChartEdb, dataListMap map[int][]*models.EdbDataList, err error, errMsg string) {
 	// 相关联指标
-	mappingListTmp, err = excel.GetExcelChartEdbMappingByChartInfoId(chartInfo.ChartInfoId)
+	if chartInfoId == 0 && ChartEdbId == 0 {
+		err = fmt.Errorf(" 获取图表,指标信息失败 Err:chartInfoId和ChartEdbId不能同时为空")
+		return
+	}
+	if chartInfoId == 0 {
+		chartEdb, e := excel.GetExcelChartEdbById(ChartEdbId)
+		if e != nil {
+			err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", e.Error())
+			return
+		}
+		chartInfoId = chartEdb.ChartInfoId
+	}
+	mappingListTmp, err = excel.GetExcelChartEdbMappingByChartInfoId(chartInfoId)
 	if err != nil {
 		errMsg = "获取失败"
 		err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())
@@ -64,8 +76,8 @@ func GetBalanceExcelChartSingle(chartInfo *models.ChartInfo, lang string) (mappi
 		err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())
 		return
 	}
-	excelInfoId := mappingListTmp[0].ExcelInfoId
 	// 查询所有子表
+	excelInfoId := mappingListTmp[0].ExcelInfoId
 	excelInfo, err := excel.GetExcelInfoById(excelInfoId)
 	if err != nil {
 		if err.Error() == utils.ErrNoRow() {
@@ -77,18 +89,42 @@ func GetBalanceExcelChartSingle(chartInfo *models.ChartInfo, lang string) (mappi
 		err = fmt.Errorf(" 查询子表失败图表,指标信息失败 Err:%s", err.Error())
 		return
 	}
+	dataListMap = make(map[int][]*models.EdbDataList)
+	if excelInfo.BalanceType == 1 {
+		//查询库里是否有值
+		chartDataList, e := excel.GetExcelChartDataByChartInfoId(chartInfoId)
+		if e != nil {
+			err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", e.Error())
+			return
+		}
+		if len(chartDataList) == 0 {
+			err = fmt.Errorf(" 获取图表,指标数据不存在")
+			return
+		}
+		for _, v := range chartDataList {
+			tmp := &models.EdbDataList{
+				EdbDataId:     v.ExcelChartDataId,
+				EdbInfoId:     v.ExcelChartEdbId,
+				DataTime:      v.DataTime,
+				DataTimestamp: v.DataTimestamp,
+				Value:         v.Value,
+			}
+			dataListMap[v.ExcelChartEdbId] = append(dataListMap[v.ExcelChartEdbId], tmp)
+		}
+		return
+	}
+
 	// 获取图表详情
 	newExcelDataMap, excelAllRows, excelAllCols, err, errMsg := GetBalanceExcelData(excelInfo, lang)
 	if err != nil {
 		return
 	}
-	dataListMap = make(map[int][]*models.EdbDataList)
 
 	for _, mapping := range mappingListTmp {
-		err, errMsg = GetBalanceExcelEdbData(mapping, newExcelDataMap, dataListMap, excelAllRows, excelAllCols)
-		if err != nil {
-			err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())
-			return
+		er, msg := GetBalanceExcelEdbData(mapping, newExcelDataMap, dataListMap, excelAllRows, excelAllCols)
+		if er != nil {
+			utils.FileLog.Info(fmt.Sprintf(" 获取图表,指标信息失败 Err:%s, %s", er.Error(), msg))
+			continue
 		}
 	}
 	return