Browse Source

fix:新增自定义表格数据重置接口

Roc 1 year ago
parent
commit
1f91ca60bd

+ 20 - 0
controllers/data_manage/excel/custom_analysis_edb.go

@@ -9,6 +9,7 @@ import (
 	"eta/eta_api/services/data"
 	"eta/eta_api/services/data"
 	"eta/eta_api/services/data/excel"
 	"eta/eta_api/services/data/excel"
 	"eta/eta_api/utils"
 	"eta/eta_api/utils"
+	"fmt"
 	"strconv"
 	"strconv"
 	"strings"
 	"strings"
 	"time"
 	"time"
@@ -438,6 +439,25 @@ func (c *CustomAnalysisController) EdbRefresh() {
 	br.Msg = "刷新成功"
 	br.Msg = "刷新成功"
 }
 }
 
 
+func init() {
+	//str := `Sheet1!$A$1:$A$1331`
+	//str := `Sheet1!$A$1:$A$1331`
+	//str := `Sheet1!$A$1:$BF$1`
+	//str := `Sheet1!$A:$A`
+	//str := `Sheet1!$1:$1`
+	//fmt.Println(str)
+	//fmt.Println(excel.GetSheetStr(str))
+
+	excelInfo, err := excelModel.GetExcelInfoById(164)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	err, errMsg, _ := excel.Refresh(excelInfo)
+	fmt.Println(err)
+	fmt.Println(errMsg)
+}
+
 //func init() {
 //func init() {
 //	excelInfo, err := excelModel.GetExcelInfoById(160)
 //	excelInfo, err := excelModel.GetExcelInfoById(160)
 //	if err != nil {
 //	if err != nil {

+ 10 - 0
services/data/base_edb_lib.go

@@ -287,6 +287,16 @@ func SaveAdjustEdbInfo(param string) (resp *models.BaseResponse, err error) {
 	return
 	return
 }
 }
 
 
+// ResetCustomAnalysisData 重置自定义表格的数据
+func ResetCustomAnalysisData(reqStr string) (resp *AddPredictEdbDataResponse, err error) {
+	_, resultByte, err := postAddEdbData(reqStr, "calculate/custom_analysis/reset")
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+
 // CalculateComputeCorrelationResp 拟合残差计算相关性的值返回
 // CalculateComputeCorrelationResp 拟合残差计算相关性的值返回
 type CalculateComputeCorrelationResp struct {
 type CalculateComputeCorrelationResp struct {
 	Ret         int
 	Ret         int

+ 234 - 14
services/data/excel/custom_analysis_edb.go

@@ -4,10 +4,13 @@ import (
 	"encoding/json"
 	"encoding/json"
 	"errors"
 	"errors"
 	"eta/eta_api/models/data_manage/excel"
 	"eta/eta_api/models/data_manage/excel"
+	"eta/eta_api/services/data"
 	excelServices "eta/eta_api/services/excel"
 	excelServices "eta/eta_api/services/excel"
 	"eta/eta_api/utils"
 	"eta/eta_api/utils"
+	"fmt"
 	"github.com/araddon/dateparse"
 	"github.com/araddon/dateparse"
 	"github.com/shopspring/decimal"
 	"github.com/shopspring/decimal"
+	"github.com/xuri/excelize/v2"
 	"strings"
 	"strings"
 )
 )
 
 
@@ -183,6 +186,7 @@ func HandleEdbSequenceVal(dateSequenceVal, dataSequenceVal []string) (newDateLis
 	return
 	return
 }
 }
 
 
+// Refresh  刷新表格关联的指标信息
 func Refresh(excelInfo *excel.ExcelInfo) (err error, errMsg string, isSendEmail bool) {
 func Refresh(excelInfo *excel.ExcelInfo) (err error, errMsg string, isSendEmail bool) {
 	isSendEmail = true
 	isSendEmail = true
 
 
@@ -192,6 +196,11 @@ func Refresh(excelInfo *excel.ExcelInfo) (err error, errMsg string, isSendEmail
 		return
 		return
 	}
 	}
 
 
+	// 没有关联指标,那么就退出吧
+	if len(list) <= 0 {
+		return
+	}
+
 	for k, v := range list {
 	for k, v := range list {
 		var tmpCalculateFormula excel.CalculateFormula
 		var tmpCalculateFormula excel.CalculateFormula
 		err = json.Unmarshal([]byte(v.CalculateFormula), &tmpCalculateFormula)
 		err = json.Unmarshal([]byte(v.CalculateFormula), &tmpCalculateFormula)
@@ -205,20 +214,231 @@ func Refresh(excelInfo *excel.ExcelInfo) (err error, errMsg string, isSendEmail
 		list[k] = v
 		list[k] = v
 	}
 	}
 
 
-	//for _, v := range list {
-	//	sheetName, startColumnName, endColumnName string, startNum, endNum int, isAll, isRow, isColumn bool, err := GetSheetStr(v.DataSequenceStr)
-	//}
-
-	//luckySheet, err, errMsg := GetCustomAnalysisExcelData(excelInfo)
-	//if err != nil {
-	//	return
-	//}
-	//
-	//// 获取excel表格数据
-	//xlsxFile, err := luckySheet.GetExcelData()
-	//if err != nil {
-	//	return
-	//}
+	luckySheet, err, errMsg := GetCustomAnalysisExcelData(excelInfo)
+	if err != nil {
+		return
+	}
+
+	// 获取excel表格数据
+	xlsxFile, err := luckySheet.GetExcelData()
+	if err != nil {
+		return
+	}
+
+	fmt.Println(xlsxFile)
+
+	// ResetCustomAnalysisData 数据重置的结构体
+	type ResetCustomAnalysisData struct {
+		EdbInfoId int
+		DateList  []string
+		DataList  []float64
+	}
+
+	for _, v := range list {
+		dateList := make([]string, 0)
+		dataList := make([]string, 0)
+
+		// 日期序列
+		{
+			sheetName, startColumnName, endColumnName, startNum, endNum, isAll, isRow, isColumn, tmpErr := GetSheetStr(v.DateSequenceStr)
+			if tmpErr != nil {
+				err = tmpErr
+				return
+			}
+
+			// 查找sheet页
+			sheetInfo, ok := xlsxFile.Sheet[sheetName]
+			if !ok {
+				errMsg = "找不到" + sheetName
+				err = errors.New(errMsg)
+				return
+			}
+
+			// 选择行的数据
+			if isRow {
+				// 开始列名、结束列
+				var startColumn, endColumn int
+				if isAll {
+					// 结束列(其实也就是整列的个数)
+					endColumn = len(sheetInfo.Cols) - 1
+				} else {
+					//startNum = startNum - 1
+					//endNum = endNum - 1
+
+					tmpStartColumn, tmpErr := excelize.ColumnNameToNumber(startColumnName)
+					if tmpErr != nil {
+						errMsg = "列名异常:" + startColumnName
+						err = errors.New(errMsg)
+						return
+					}
+
+					tmpEndColumn, tmpErr := excelize.ColumnNameToNumber(endColumnName)
+					if tmpErr != nil {
+						errMsg = "列名异常:" + endColumnName
+						err = errors.New(errMsg)
+						return
+					}
+					startColumn = tmpStartColumn - 1
+					endColumn = tmpEndColumn - 1
+				}
+
+				for currColumn := startColumn; currColumn <= endColumn; currColumn++ {
+					currCell := sheetInfo.Cell(startNum, currColumn)
+					if currCell == nil {
+						errMsg = fmt.Sprintf("第%d列,第%d行数据异常", startColumn, startNum)
+						err = errors.New(errMsg)
+						return
+					}
+					dateList = append(dateList, currCell.Value)
+				}
+
+			} else if isColumn { // 选择列的数据
+				if isAll {
+					// 结束行(其实也就是整个sheet有多少行)
+					endNum = len(sheetInfo.Rows) - 1
+				} else {
+					startNum = startNum - 1
+					endNum = endNum - 1
+				}
+
+				startColumn, tmpErr := excelize.ColumnNameToNumber(startColumnName)
+				if tmpErr != nil {
+					errMsg = "列名异常:" + startColumnName
+					err = errors.New(errMsg)
+					return
+				}
+				startColumn = startColumn - 1
+
+				for currRow := startNum; currRow <= endNum; currRow++ {
+					currCell := sheetInfo.Cell(currRow, startColumn)
+					if currCell == nil {
+						errMsg = fmt.Sprintf("第%d列,第%d行数据异常", startColumn, startNum)
+						err = errors.New(errMsg)
+						return
+					}
+					dateList = append(dateList, currCell.Value)
+				}
+			}
+
+		}
+
+		// 数据序列
+		{
+			sheetName, startColumnName, endColumnName, startNum, endNum, isAll, isRow, isColumn, tmpErr := GetSheetStr(v.DataSequenceStr)
+			if tmpErr != nil {
+				err = tmpErr
+				return
+			}
+
+			// 查找sheet页
+			sheetInfo, ok := xlsxFile.Sheet[sheetName]
+			if !ok {
+				errMsg = "找不到" + sheetName
+				err = errors.New(errMsg)
+				return
+			}
+
+			// 选择行的数据
+			if isRow {
+				// 开始列名、结束列
+				var startColumn, endColumn int
+				if isAll {
+					// 结束列(其实也就是整列的个数)
+					endColumn = len(sheetInfo.Cols) - 1
+				} else {
+					//startNum = startNum - 1
+					//endNum = endNum - 1
+
+					tmpStartColumn, tmpErr := excelize.ColumnNameToNumber(startColumnName)
+					if tmpErr != nil {
+						errMsg = "列名异常:" + startColumnName
+						err = errors.New(errMsg)
+						return
+					}
+
+					tmpEndColumn, tmpErr := excelize.ColumnNameToNumber(endColumnName)
+					if tmpErr != nil {
+						errMsg = "列名异常:" + endColumnName
+						err = errors.New(errMsg)
+						return
+					}
+					startColumn = tmpStartColumn - 1
+					endColumn = tmpEndColumn - 1
+				}
+
+				for currColumn := startColumn; currColumn <= endColumn; currColumn++ {
+					currCell := sheetInfo.Cell(startNum, currColumn)
+					if currCell == nil {
+						errMsg = fmt.Sprintf("第%d列,第%d行数据异常", startColumn, startNum)
+						err = errors.New(errMsg)
+						return
+					}
+					dataList = append(dataList, currCell.Value)
+				}
+
+			} else if isColumn { // 选择列的数据
+				if isAll {
+					// 结束行(其实也就是整个sheet有多少行)
+					endNum = len(sheetInfo.Rows) - 1
+				} else {
+					startNum = startNum - 1
+					endNum = endNum - 1
+				}
+
+				startColumn, tmpErr := excelize.ColumnNameToNumber(startColumnName)
+				if tmpErr != nil {
+					errMsg = "列名异常:" + startColumnName
+					err = errors.New(errMsg)
+					return
+				}
+				startColumn = startColumn - 1
+
+				for currRow := startNum; currRow <= endNum; currRow++ {
+					currCell := sheetInfo.Cell(currRow, startColumn)
+					if currCell == nil {
+						errMsg = fmt.Sprintf("第%d列,第%d行数据异常", startColumn, startNum)
+						err = errors.New(errMsg)
+						return
+					}
+					dataList = append(dataList, currCell.Value)
+				}
+			}
+
+		}
+
+		fmt.Println("日期序列结束")
+
+		// 将excel中的日期、数据系列处理
+		relDateList, relDataList, tmpErr, tmpErrMsg := HandleEdbSequenceVal(dateList, dataList)
+		if tmpErr != nil {
+			err = tmpErr
+			errMsg = tmpErrMsg
+			return
+		}
+		req2 := &ResetCustomAnalysisData{
+			EdbInfoId: v.EdbInfoId,
+			DateList:  relDateList,
+			DataList:  relDataList,
+		}
+
+		// 调用指标库去更新
+		reqJson, tmpErr := json.Marshal(req2)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		respItem, tmpErr := data.ResetCustomAnalysisData(string(reqJson))
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		if respItem.Ret != 200 {
+			errMsg = respItem.Msg
+			err = errors.New(respItem.ErrMsg)
+			return
+		}
+		//sheetInfo.Cell()
+	}
 
 
 	//xlsxFile.Sheet[]
 	//xlsxFile.Sheet[]