Browse Source

fix:新增支持混合表格

Roc 1 năm trước cách đây
mục cha
commit
ad463bd0af

+ 24 - 2
controllers/excel_info.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"hongze/hongze_chart_lib/models"
+	"hongze/hongze_chart_lib/models/request"
 	"hongze/hongze_chart_lib/models/response"
 	"hongze/hongze_chart_lib/services/data"
 	"hongze/hongze_chart_lib/services/excel"
@@ -66,7 +67,8 @@ func (this *ExcelInfoController) GetTableDetail() {
 		return
 	}
 	var tableData excel.TableData
-	if excelInfo.Source == 1 {
+	switch excelInfo.Source {
+	case 1:
 		luckySheetData, err := excel.GetLuckySheetData(excelInfo.Content)
 		if err != nil {
 			br.Msg = "获取失败"
@@ -79,7 +81,7 @@ func (this *ExcelInfoController) GetTableDetail() {
 			br.ErrMsg = "转换成table失败,Err:" + err.Error()
 			return
 		}
-	} else {
+	case 2:
 		var tableDataConfig data.TableDataConfig
 		err = json.Unmarshal([]byte(excelInfo.Content), &tableDataConfig)
 		if err != nil {
@@ -99,6 +101,26 @@ func (this *ExcelInfoController) GetTableDetail() {
 			br.ErrMsg = "转换成table失败,Err:" + err.Error()
 			return
 		}
+	case 3:
+		var result [][]request.MixedTableCellDataReq
+		err = json.Unmarshal([]byte(excelInfo.Content), &result)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "表格json转结构体失败,Err:" + err.Error()
+			return
+		}
+		newResult, tmpErr := data.GetMixedTableCellData(result)
+		if tmpErr != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取最新的数据失败,Err:" + err.Error()
+			return
+		}
+		tableData, err = excel.GetTableDataByMixedTableData(newResult)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "转换成table失败,Err:" + err.Error()
+			return
+		}
 	}
 
 	tableData = excel.HandleTableCell(tableData)

+ 9 - 0
models/request/excel_info.go

@@ -30,3 +30,12 @@ type RelationEdbInfo struct {
 	Tag string `description:"指标标签"`
 	Row string `description:"第几行"`
 }
+
+// MixedTableCellDataReq 混合表格单元格参数
+type MixedTableCellDataReq struct {
+	DataType  int    `description:"数据类型,1:日期,2:指标,3:自定义文本,4:插值"`
+	DataTime  string `description:"所属日期"`
+	EdbInfoId int    `description:"指标id"`
+	ShowValue string `description:"展示值"`
+	Value     string `description:"实际值"`
+}

+ 67 - 0
services/data/excel_info.go

@@ -1094,3 +1094,70 @@ func calculate(calculateFormula string, TagMap map[string]float64) (calVal, errM
 
 	return
 }
+
+// GetMixedTableCellData 获取混合表格数据
+func GetMixedTableCellData(config [][]request.MixedTableCellDataReq) (newMixedTableCellDataList [][]request.MixedTableCellDataReq, err error) {
+	newMixedTableCellDataList = config
+
+	edbInfoIdList := make([]int, 0)
+	dataEdbInfoIdList := make([]int, 0)
+	for _, row := range config {
+		for _, cell := range row {
+			if cell.DataType == 2 {
+				edbInfoIdList = append(edbInfoIdList, cell.EdbInfoId)
+			} else if cell.DataType == 4 {
+				dataEdbInfoIdList = append(dataEdbInfoIdList, cell.EdbInfoId)
+			}
+		}
+	}
+
+	edbInfoList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
+	if err != nil {
+		return
+	}
+
+	// 指标信息map
+	edbInfoMap := make(map[int]*data_manage.EdbInfo)
+	// 指标数据map
+	edbDataListMap := make(map[int]map[string]float64)
+	for _, edbInfo := range edbInfoList {
+		edbInfoMap[edbInfo.EdbInfoId] = edbInfo
+
+		dataList := make([]*models.EdbDataList, 0)
+		switch edbInfo.EdbInfoType {
+		case 0:
+			dataList, _ = models.GetEdbDataList(edbInfo.Source, edbInfo.EdbInfoId, ``, ``)
+		case 1:
+			_, dataList, _, _, _, _ = GetPredictDataListByPredictEdbInfoId(edbInfo.EdbInfoId, ``, ``, false)
+		default:
+			err = errors.New(fmt.Sprint("获取失败,指标类型异常", edbInfo.EdbInfoType))
+		}
+
+		dateValMap := make(map[string]float64)
+		for _, data := range dataList {
+			dateValMap[data.DataTime] = data.Value
+		}
+		edbDataListMap[edbInfo.EdbInfoId] = dateValMap
+	}
+
+	for k, row := range newMixedTableCellDataList {
+		for i, cell := range row {
+			if cell.DataType == 2 {
+				if edbInfo, ok := edbInfoMap[cell.EdbInfoId]; ok {
+					cell.ShowValue = edbInfo.EdbName
+				}
+			} else if cell.DataType == 4 {
+				if dateValMap, ok := edbDataListMap[cell.EdbInfoId]; ok {
+					if val, ok2 := dateValMap[cell.DataTime]; ok2 {
+						cell.ShowValue = fmt.Sprint(val)
+					}
+				}
+			}
+
+			row[i] = cell
+		}
+		newMixedTableCellDataList[k] = row
+	}
+
+	return
+}

+ 26 - 0
services/excel/lucky_sheet.go

@@ -1153,3 +1153,29 @@ func GetTableDataByCustomData(excelType int, data request.TableDataReq) (selfTab
 
 	return
 }
+
+// GetTableDataByMixedTableData 通过混合表格数据获取表格数据
+func GetTableDataByMixedTableData(config [][]request.MixedTableCellDataReq) (selfTableData TableData, err error) {
+	tableDataList := make([][]LuckySheetDataValue, 0)
+	mergeList := make([]TableDataMerge, 0)
+
+	// 开始文本行了
+	{
+		for _, row := range config {
+			dataCol := make([]LuckySheetDataValue, 0)
+			for _, cell := range row {
+				dataCol = append(dataCol, LuckySheetDataValue{
+					Value:     cell.Value,
+					Monitor:   cell.ShowValue,
+					MergeCell: LuckySheetDataConfigMerge{},
+				})
+			}
+			tableDataList = append(tableDataList, dataCol)
+		}
+	}
+
+	selfTableData.MergeList = mergeList
+	selfTableData.TableDataList = tableDataList
+
+	return
+}