Browse Source

单个单元格计算

xyxie 1 year ago
parent
commit
91f7037baf

+ 68 - 0
controllers/data_manage/excel/mixed_table.go

@@ -8,7 +8,10 @@ import (
 	"eta/eta_api/services/data"
 	excel2 "eta/eta_api/services/data/excel"
 	"eta/eta_api/utils"
+	"fmt"
 	"strconv"
+	"strings"
+	"time"
 )
 
 // GetSystemDate
@@ -256,3 +259,68 @@ func (c *ExcelInfoController) CalculateData() {
 	br.Msg = "计算成功"
 	br.Data = resp
 }
+
+// GetMixDateCalculate
+// @Title 获取混合表格日期计算
+// @Description 获取混合表格日期计算
+// @Param	request	body request.MixedTableCellDataReq true "type json string"
+// @router /excel_info/mixed/date_calculate [post]
+func (c *ExcelInfoController) GetMixDateCalculate() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	sysUser := c.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	var req request.MixedDateCalculateReq
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	valMap := make(map[string]int)
+	for _, v := range req.DateList {
+		// 查找单元格数据
+		// 如果不是基础计算单元格,直接返回
+		_, err = time.ParseInLocation(utils.FormatDate, v.Date, time.Local)
+		if err != nil {
+			br.Msg = "日期计算失败!"
+			br.ErrMsg = fmt.Sprintf("%s 的单元格非日期类型, Err: %s", v.Date, err.Error())
+			return
+		}
+		// todo 把日期转换成excel里的天数
+		realDiffDay := utils.GetDaysDiff1900(v.Date)
+
+		valMap[strings.ToUpper(v.Tag)] = realDiffDay
+	}
+
+	// 计算
+	val, errMsg, err := excel2.DateCalculateFormula(valMap, strings.ToUpper(req.Formula))
+	if err != nil {
+		br.Msg = "日期计算失败"
+		br.ErrMsg = errMsg
+		return
+	}
+
+	showValue := utils.FormatTableDataShowValue(val)
+
+	type resp struct {
+		ShowValue string
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+	br.Data = resp{
+		ShowValue: showValue,
+	}
+}

+ 12 - 0
models/data_manage/excel/request/mixed_table.go

@@ -104,6 +104,12 @@ type EdbDateConfFrequencyChange struct {
 	FrequencyDay string `description:"频度的固定日期"`
 }
 
+// MixedDateCalculateReq 混合表格日期计算
+type MixedDateCalculateReq struct {
+	Formula  string                   `description:"计算公式"`
+	DateList []MixDateCalculateTagReq `description:"表格中的单元格"`
+}
+
 // MixDateCalculateConf 混合表格中的日期计算
 type MixDateCalculateConf struct {
 	Formula          string                `description:"计算公式"`
@@ -116,6 +122,12 @@ type MixDateCalculateTag struct {
 	Tag string `description:"指标对应标签"`
 }
 
+// MixDateCalculateTagReq 混合表格中的日期计算的关联单元格
+type MixDateCalculateTagReq struct {
+	Date string `description:"日期"`
+	Tag  string `description:"指标对应标签"`
+}
+
 // MixCellShowStyle 混合表格 单元格样式展示计算
 type MixCellShowStyle struct {
 	NumberStyle MixNumberShowStyle `description:"小数点位数增加或减少,百分比"`

+ 9 - 0
routers/commentsRouter.go

@@ -718,6 +718,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:ExcelInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:ExcelInfoController"],
+        beego.ControllerComments{
+            Method: "GetMixDateCalculate",
+            Router: `/excel_info/mixed/date_calculate`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:ExcelInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:ExcelInfoController"],
         beego.ControllerComments{
             Method: "Move",

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

@@ -1072,7 +1072,7 @@ func handlerDateCalculate(dateCalculateList []string, calculateCellMap map[strin
 				continue
 			}
 
-			val, tmpErr, tmpErrMsg := dateCalculatePrepare(calculateCellMap, cell.Value)
+			val, tmpErr, tmpErrMsg := DateCalculatePrepare(calculateCellMap, cell.Value)
 			if tmpErr != nil {
 				errMsg = tmpErrMsg
 				err = tmpErr
@@ -1087,7 +1087,8 @@ func handlerDateCalculate(dateCalculateList []string, calculateCellMap map[strin
 	return
 }
 
-func dateCalculatePrepare(calculateCellMap map[string]Cell, config string) (val float64, err error, errMsg string) {
+// DateCalculatePrepare 单个单元格的日期计算
+func DateCalculatePrepare(calculateCellMap map[string]Cell, config string) (val float64, err error, errMsg string) {
 	var edbDateConf request.MixDateCalculateConf
 	err = json.Unmarshal([]byte(config), &edbDateConf)
 	if err != nil {
@@ -1121,14 +1122,14 @@ func dateCalculatePrepare(calculateCellMap map[string]Cell, config string) (val
 	}
 
 	// 计算
-	val, errMsg, err = dateCalculateFormula(valMap, strings.ToUpper(edbDateConf.Formula))
+	val, errMsg, err = DateCalculateFormula(valMap, strings.ToUpper(edbDateConf.Formula))
 	if err != nil {
 		return
 	}
 	return
 }
 
-func dateCalculateFormula(valTagMap map[string]int, calculateFormula string) (calVal float64, errMsg string, err error) {
+func DateCalculateFormula(valTagMap map[string]int, calculateFormula string) (calVal float64, errMsg string, err error) {
 	if calculateFormula == "" {
 		errMsg = "公式异常"
 		err = errors.New(errMsg)