Quellcode durchsuchen

fix:选区范围内的数据处理的bug修复

Roc vor 1 Jahr
Ursprung
Commit
a8d9875b91

+ 2 - 0
controllers/data_manage/excel/custom_analysis.go

@@ -521,3 +521,5 @@ func (c *CustomAnalysisController) ExcelDataList() {
 	br.Msg = "获取成功"
 	br.Data = sheetList
 }
+
+// TODO 修改表格后,更新指标信息

+ 41 - 2
controllers/data_manage/excel/custom_analysis_edb.go

@@ -223,7 +223,6 @@ func (c *CustomAnalysisController) AddEdb() {
 	br.Success = true
 	br.Msg = "保存成功"
 	br.Data = resp
-	br.IsAddLog = false //数据量太大了,不写入日志吧
 }
 
 // EditEdb
@@ -396,7 +395,47 @@ func (c *CustomAnalysisController) EditEdb() {
 	br.Success = true
 	br.Msg = "保存成功"
 	br.Data = resp
-	br.IsAddLog = false //数据量太大了,不写入日志吧
+}
+
+// EdbRefresh
+// @Title 指标列表
+// @Description 指标列表
+// @Param   ExcelInfoId   query   int  true       "excel的id"
+// @Success 200 {object} []excel.ExcelEdbMappingItem
+// @router /edb/refresh [get]
+func (c *CustomAnalysisController) EdbRefresh() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	excelInfoId, _ := c.GetInt("ExcelInfoId")
+	if excelInfoId <= 0 {
+		br.Msg = "请选择excel"
+		br.IsSendEmail = false
+		return
+	}
+
+	// 获取excel表详情
+	excelInfo, err := excelModel.GetExcelInfoById(excelInfoId)
+	if err != nil {
+		br.Msg = "找不到该EXCEL!"
+		br.ErrMsg = "找不到该EXCEL!err:" + err.Error()
+		return
+	}
+
+	if excelInfo.Source != utils.CUSTOM_ANALYSIS_TABLE {
+		br.Msg = "EXCEL异常!"
+		br.IsSendEmail = false
+		return
+	}
+
+	excel.Refresh(excelInfo)
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "刷新成功"
 }
 
 //func init() {

+ 151 - 9
services/data/excel/custom_analysis_edb.go

@@ -6,9 +6,9 @@ import (
 	"eta/eta_api/models/data_manage/excel"
 	excelServices "eta/eta_api/services/excel"
 	"eta/eta_api/utils"
-	"fmt"
 	"github.com/araddon/dateparse"
 	"github.com/shopspring/decimal"
+	"strings"
 )
 
 // GetCustomAnalysisExcelData 获取自定义分析的表格data数据
@@ -81,7 +81,6 @@ func GenerateExcelCustomAnalysisExcel(excelInfo *excel.ExcelInfo) (downloadFileP
 	}
 
 	downloadFilePath, err = luckySheet.ToExcel()
-	fmt.Println("生成的文件地址:", downloadFilePath)
 
 	return
 }
@@ -111,16 +110,19 @@ func HandleEdbSequenceVal(dateSequenceVal, dataSequenceVal []string) (newDateLis
 				}
 				continue
 			}
-			startData = true
 
 			tmpValDec, tmpErr := decimal.NewFromString(v)
 			if tmpErr != nil {
-				dataList = append(dataList, dataStruct{
-					Value: 0,
-					Ok:    false,
-				})
+				if startData {
+					dataList = append(dataList, dataStruct{
+						Value: 0,
+						Ok:    false,
+					})
+				}
 				continue
 			}
+			startData = true
+
 			tmpVal, _ := tmpValDec.Float64()
 			dataList = append(dataList, dataStruct{
 				Value: tmpVal,
@@ -142,13 +144,16 @@ func HandleEdbSequenceVal(dateSequenceVal, dataSequenceVal []string) (newDateLis
 				}
 				continue
 			}
-			startData = true
 
 			t1, tmpErr := dateparse.ParseAny(v)
 			if tmpErr != nil {
-				dateList = append(dateList, "")
+				if startData {
+					dateList = append(dateList, "")
+				}
 				continue
 			}
+			startData = true
+
 			dateList = append(dateList, t1.Format(utils.FormatDate))
 		}
 	}
@@ -177,3 +182,140 @@ func HandleEdbSequenceVal(dateSequenceVal, dataSequenceVal []string) (newDateLis
 
 	return
 }
+
+func Refresh(excelInfo *excel.ExcelInfo) (err error, errMsg string, isSendEmail bool) {
+	isSendEmail = true
+
+	list, err := excel.GetAllExcelEdbMappingItemByExcelInfoId(excelInfo.ExcelInfoId)
+	if err != nil {
+		errMsg = "获取失败"
+		return
+	}
+
+	for k, v := range list {
+		var tmpCalculateFormula excel.CalculateFormula
+		err = json.Unmarshal([]byte(v.CalculateFormula), &tmpCalculateFormula)
+		if err != nil {
+			errMsg = "获取失败"
+			err = errors.New("公式转换失败,Err:" + err.Error())
+			return
+		}
+		v.DateSequenceStr = tmpCalculateFormula.DateSequenceStr
+		v.DataSequenceStr = tmpCalculateFormula.DataSequenceStr
+		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
+	//}
+
+	//xlsxFile.Sheet[]
+
+	return
+}
+
+// GetSheetStr
+// @return sheetName string 用户选择的sheet名称
+// @return startColumnName string 用户选择的开始列名称
+// @return endColumnName string 用户选择的结束列名称
+// @return startNum int 用户选择的开始列单元格位置
+// @return endNum int 用户选择的结束列单元格位置
+// @return isAll bool 是否选择整行/列数据
+// @return isRow bool 是否选择行数据
+// @return isColumn bool 是否选择列数据
+func GetSheetStr(sequenceStr string) (sheetName, startColumnName, endColumnName string, startNum, endNum int, isAll, isRow, isColumn bool, err error) {
+	// 找出sheetName
+	tmpList := strings.Split(sequenceStr, "!")
+	if len(tmpList) != 2 {
+		err = errors.New("错误的公式,查找sheet异常:" + sequenceStr)
+		return
+	}
+
+	sheetName = tmpList[0]
+
+	// 分离开始/结束单元格
+	tmpList = strings.Split(tmpList[1], ":")
+	if len(tmpList) != 2 {
+		err = errors.New("错误的公式,查找开始/结束单元格异常:" + sequenceStr)
+		return
+	}
+
+	startList := strings.Split(tmpList[0], "$")
+	endList := strings.Split(tmpList[1], "$")
+
+	lenList := len(startList)
+	if lenList != len(endList) {
+		err = errors.New("错误的公式,开始与结束单元格异常:" + sequenceStr)
+		return
+	}
+
+	if lenList != 3 && lenList != 2 {
+		err = errors.New("错误的公式:" + sequenceStr)
+		return
+	}
+
+	startColumnName = startList[1]
+	endColumnName = endList[1]
+
+	// 长度为2的话,那说明是整行或整列
+	if lenList == 2 {
+		isAll = true
+
+		startDeci, tmpErr1 := decimal.NewFromString(startList[1])
+		endDeci, tmpErr2 := decimal.NewFromString(endList[1])
+
+		if tmpErr1 == nil && tmpErr2 == nil {
+			isRow = true // 正常转换的话,那么就是整行
+			startNum = int(startDeci.IntPart())
+			endNum = int(endDeci.IntPart())
+			startColumnName = ``
+			endColumnName = ``
+
+			return
+		}
+
+		if tmpErr1 == nil || tmpErr2 == nil {
+			err = errors.New("错误的公式2:" + sequenceStr)
+			return
+		}
+
+		// 如果不能转成数字,那么就是整列
+		isColumn = true
+
+		return
+	}
+
+	// 确定行
+	startDeci, tmpErr1 := decimal.NewFromString(startList[2])
+	endDeci, tmpErr2 := decimal.NewFromString(endList[2])
+	if tmpErr1 != nil && tmpErr1 != tmpErr2 {
+		err = errors.New("错误的公式3:" + sequenceStr)
+		return
+	}
+
+	startNum = int(startDeci.IntPart())
+	endNum = int(endDeci.IntPart())
+
+	if startColumnName != endColumnName && startNum != endNum {
+		err = errors.New("选区不允许跨行或者跨列")
+	}
+
+	if startColumnName == endColumnName {
+		isColumn = true // 列数据
+	} else {
+		isRow = true // 行数据
+	}
+
+	return
+}