Browse Source

混合表格小数点位数和百分数处理

xyxie 1 year ago
parent
commit
00574eb8be

+ 29 - 8
controllers/data_manage/excel/mixed_table.go

@@ -7,6 +7,7 @@ import (
 	"eta/eta_api/models/data_manage/excel/request"
 	"eta/eta_api/services/data"
 	excel2 "eta/eta_api/services/data/excel"
+	"eta/eta_api/utils"
 	"strconv"
 )
 
@@ -78,7 +79,7 @@ func (c *ExcelInfoController) CalculateData() {
 		br.Ret = 408
 		return
 	}
-
+	requestBody := string(c.Ctx.Input.RequestBody)
 	var req request.CalculateConf
 	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
@@ -155,26 +156,45 @@ func (c *ExcelInfoController) CalculateData() {
 		num = lenDate
 	}
 
-	var currDate string // 当前日期
 	dataListResp := make([]*data_manage.EdbDataList, 0)
 
+	var newDate string
+	if req.DataTime == `` { //选择前移几期数
+		newDate, err = excel2.GetEdbDateByMoveForwardByDateList(requestBody, respItem.Data.DateList)
+		if err != nil {
+			return
+		}
+	} else {
+		newDate = req.DataTime //选择表格中的日期
+	}
+	// 开始做日期变换
+	newDate, err = excel2.HandleMixTableDateChange(newDate, requestBody)
+	if err != nil {
+		return
+	}
+	var finalVal float64
 	if req.DataTime == `` {
 		for i := 1; i <= num; i++ {
 			date := respItem.Data.DateList[lenDate-i]
+
 			val, ok := respItem.Data.DataMap[date]
 			if !ok {
 				continue
 			}
-
+			if date == newDate {
+				finalVal = val
+			}
 			dataListResp = append(dataListResp, &data_manage.EdbDataList{
 				Value:    val,
 				DataTime: date,
 			})
 		}
 	} else {
-		if val, ok := respItem.Data.DataMap[req.DataTime]; ok {
+		// todo 如果选择了表格中的日期应该如何处理
+		if val, ok := respItem.Data.DataMap[newDate]; ok {
+			finalVal = val
 			for i, tmpDate := range respItem.Data.DateList {
-				if tmpDate == req.DataTime {
+				if tmpDate == newDate {
 					if i+3 <= lenDate {
 						t1Date := respItem.Data.DateList[i+2]
 						if tmpVal, ok2 := respItem.Data.DataMap[t1Date]; ok2 {
@@ -200,7 +220,7 @@ func (c *ExcelInfoController) CalculateData() {
 					// 当前日期
 					dataListResp = append(dataListResp, &data_manage.EdbDataList{
 						Value:    val,
-						DataTime: req.DataTime,
+						DataTime: newDate,
 					})
 					if i >= 1 {
 						t1Date := respItem.Data.DateList[i-1]
@@ -227,8 +247,9 @@ func (c *ExcelInfoController) CalculateData() {
 		}
 	}
 	resp := data_manage.BeforeAndAfterDateDataResp{
-		List: dataListResp,
-		Date: currDate,
+		List:      dataListResp,
+		Date:      newDate,
+		ShowValue: utils.FormatTableDataShowValue(finalVal),
 	}
 	br.Ret = 200
 	br.Success = true

+ 3 - 2
models/data_manage/edb_info.go

@@ -1651,8 +1651,9 @@ type TraceEdbInfoResp struct {
 
 // BeforeAndAfterDateDataResp 前后几期数据
 type BeforeAndAfterDateDataResp struct {
-	List []*EdbDataList `description:"list"`
-	Date string         `description:"实际日期"`
+	List      []*EdbDataList `description:"list"`
+	Date      string         `description:"实际日期"`
+	ShowValue string         `description:"展示值"`
 }
 
 // GetEdbInfoAdminList

+ 46 - 5
services/data/excel/mixed_table.go

@@ -1206,12 +1206,13 @@ func handleMixCellShowStyle(showStyleList []string, calculateCellMap map[string]
 				err = fmt.Errorf("日期计算配置json解析失败失败: %s, Err:%s", config, err.Error())
 				return
 			}
-			// todo 处理百分号,和小数点位数增加或者减少
+
 			if styleConf.NumberStyle.AddPointNum != 0 {
 				//val = CountDecimalPlaces(val)
+				val = changePointDecimalPlaces(cell.ShowStyle, styleConf.NumberStyle.AddPointNum)
 			}
 			if styleConf.NumberStyle.IsPercent == 1 {
-
+				val = changeToPercent(cell.ShowStyle)
 			}
 			cell.ShowValue = val
 			config[cellPosition.Column][cellPosition.Row] = cell
@@ -1219,11 +1220,51 @@ func handleMixCellShowStyle(showStyleList []string, calculateCellMap map[string]
 	}
 	return
 }
-func CountDecimalPlaces(str string) int {
+
+// changePointDecimalPlaces 小数点位数加减
+func changePointDecimalPlaces(str string, changeNum int) (newStr string) {
+	newStr = str
+	if changeNum == 0 { //无需改变
+		return
+	}
+	dotIndex := strings.Index(str, ".") // 查找小数点的位置
+	if dotIndex == -1 {
+		return // 没有小数点,返回0
+	}
+	decimalPlaces := len(str) - dotIndex - 1 // 计算小数位数
+	numbers := strings.Split(str, ".")
+	number1 := numbers[0] //整数部分
+	number2 := numbers[1] //小数部分
+	if changeNum > 0 {    // 增加小数位数
+		newStr = number1 + "." + number2 + strings.Repeat("0", changeNum)
+	} else if changeNum < 0 { // 减少小数位数
+		newStr = number1 + "." + number2[:decimalPlaces+changeNum]
+	}
+	fmt.Println(newStr)
+	return
+}
+
+// changeToPercent 展示成百分比
+func changeToPercent(str string) (newStr string) {
+	newStr = str
 	dotIndex := strings.Index(str, ".") // 查找小数点的位置
 	if dotIndex == -1 {
-		return 0 // 没有小数点,返回0
+		newStr = newStr + "00%"
+		return // 没有小数点,返回0
 	}
 	decimalPlaces := len(str) - dotIndex - 1 // 计算小数位数
-	return decimalPlaces
+	numbers := strings.Split(str, ".")
+	number1 := numbers[0] //整数部分
+	number2 := numbers[1] //小数部分
+	if decimalPlaces == 1 {
+		newStr = number1 + number2 + "0%"
+		return
+	}
+	if decimalPlaces == 2 {
+		newStr = number1 + number2 + "%"
+		return
+	}
+	newStr = number1 + number2[:2] + "." + number2[2:] + "%"
+	fmt.Println(newStr)
+	return
 }