浏览代码

Merge branch 'feature/eta1.8.5_excel_balance' into debug

xyxie 10 月之前
父节点
当前提交
2d0757cbb8

+ 99 - 23
controllers/data_manage/excel/balance_table.go

@@ -332,14 +332,14 @@ func (c *ExcelInfoController) GetWorker() {
 // @Param	request	body data_manage.AddChartInfoReq true "type json string"
 // @Success 200 {object} data_manage.AddChartInfoResp
 // @router /excel_info/balance/chart_add [post]
-func (this *ExcelInfoController) BalanceChartInfoAdd() {
+func (c *ExcelInfoController) BalanceChartInfoAdd() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -356,11 +356,11 @@ func (this *ExcelInfoController) BalanceChartInfoAdd() {
 	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
 		deleteCache = false
 		br.Msg = "系统处理中,请稍后重试!"
-		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
+		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
 		return
 	}
 	var req request.AddBalanceTableChartReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -397,9 +397,9 @@ func (this *ExcelInfoController) BalanceChartInfoAdd() {
 		chartLog.SysUserRealName = sysUser.RealName
 		chartLog.UniqueCode = chartInfo.UniqueCode
 		chartLog.CreateTime = time.Now()
-		chartLog.Content = string(this.Ctx.Input.RequestBody)
+		chartLog.Content = string(c.Ctx.Input.RequestBody)
 		chartLog.Status = "新增图表"
-		chartLog.Method = this.Ctx.Input.URI()
+		chartLog.Method = c.Ctx.Input.URI()
 		go data_manage.AddChartInfoLog(chartLog)
 	}
 
@@ -431,14 +431,14 @@ func (this *ExcelInfoController) BalanceChartInfoAdd() {
 // @Param	request	body data_manage.AddChartInfoReq true "type json string"
 // @Success 200 {object} data_manage.AddChartInfoResp
 // @router /excel_info/balance/chart_edit [post]
-func (this *ExcelInfoController) BalanceChartInfoEdit() {
+func (c *ExcelInfoController) BalanceChartInfoEdit() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -455,11 +455,11 @@ func (this *ExcelInfoController) BalanceChartInfoEdit() {
 	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
 		deleteCache = false
 		br.Msg = "系统处理中,请稍后重试!"
-		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
+		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
 		return
 	}
 	var req request.AddBalanceTableChartReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -501,9 +501,9 @@ func (this *ExcelInfoController) BalanceChartInfoEdit() {
 		chartLog.SysUserRealName = sysUser.RealName
 		chartLog.UniqueCode = chartItem.UniqueCode
 		chartLog.CreateTime = time.Now()
-		chartLog.Content = string(this.Ctx.Input.RequestBody)
+		chartLog.Content = string(c.Ctx.Input.RequestBody)
 		chartLog.Status = "编辑图表"
-		chartLog.Method = this.Ctx.Input.URL()
+		chartLog.Method = c.Ctx.Input.URL()
 		go data_manage.AddChartInfoLog(chartLog)
 	}
 
@@ -608,14 +608,14 @@ func (c *ExcelInfoController) GetBalanceChartList() {
 // @Param	request	body data_manage.DeleteChartClassifyReq true "type json string"
 // @Success 200 Ret=200 删除成功
 // @router /excel_info/balance/chart_del [post]
-func (this *ExcelInfoController) DeleteBalanceChart() {
+func (c *ExcelInfoController) DeleteBalanceChart() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -624,7 +624,7 @@ func (this *ExcelInfoController) DeleteBalanceChart() {
 	}
 
 	var req data_manage.DeleteChartClassifyReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -736,9 +736,9 @@ func (this *ExcelInfoController) DeleteBalanceChart() {
 			chartLog.SysUserRealName = sysUser.RealName
 			chartLog.UniqueCode = chartInfo.UniqueCode
 			chartLog.CreateTime = time.Now()
-			chartLog.Content = string(this.Ctx.Input.RequestBody)
+			chartLog.Content = string(c.Ctx.Input.RequestBody)
 			chartLog.Status = "删除图表"
-			chartLog.Method = this.Ctx.Input.URI()
+			chartLog.Method = c.Ctx.Input.URI()
 			go data_manage.AddChartInfoLog(chartLog)
 		}
 	}
@@ -747,3 +747,79 @@ func (this *ExcelInfoController) DeleteBalanceChart() {
 	br.Success = true
 	br.IsAddLog = true
 }
+
+// BalanceSeasonChartLegendPreview
+// @Title 季节性图例预览接口
+// @Description 季节性图例预览接口
+// @Param	request	body request.BalanceSeasonChartLegendPreviewReq true "type json string"
+// @Success 200 {object} data_manage.BalanceSeasonChartLegendPreviewResp
+// @router /excel_info/balance/chartLegend/preview [post]
+func (c *ExcelInfoController) BalanceSeasonChartLegendPreview() {
+	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.BalanceSeasonChartLegendPreviewReq
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if len(req.DateArr) == 0 || len(req.DateArr) == 0 || len(req.DateArr) != len(req.DataArr) {
+		br.Msg = "请输入正确的日期和数据"
+		return
+	}
+	newDataMap := make(map[int]float64)
+	for i, v := range req.DataArr {
+		newDataMap[i] = v
+	}
+	//组装成excelEdbData
+	dataList := make([]*data_manage.EdbDataList, 0)
+
+	for i, v := range req.DateArr {
+		// todo 处理DataTimestamp
+		dataTime, e := time.ParseInLocation(utils.FormatDate, v, time.Local)
+		if e != nil {
+			br.Msg = "日期格式错误"
+			br.ErrMsg = v + "日期格式错误,Err:" + e.Error()
+			return
+		}
+		timestamp := dataTime.UnixNano() / 1e6
+		tmp := &data_manage.EdbDataList{
+			EdbDataId:     i,
+			DataTime:      v,
+			DataTimestamp: timestamp,
+			Value:         newDataMap[i],
+		}
+		dataList = append(dataList, tmp)
+	}
+
+	list, err, errMsg := data.GetBalanceExcelSeasonChartLegendPreview(dataList, req.Calendar, req.SeasonExtraConfig)
+	if err != nil {
+		if errMsg != "" {
+			br.Msg = errMsg
+		} else {
+			br.Msg = "预览失败"
+		}
+		br.ErrMsg = err.Error()
+		return
+	}
+
+	ret := &data_manage.BalanceSeasonChartLegendPreviewResp{List: list}
+	br.Data = ret
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}

+ 5 - 0
models/data_manage/chart_info.go

@@ -1537,6 +1537,11 @@ func (m QuarterDataList) Swap(i, j int) {
 	m[i], m[j] = m[j], m[i]
 }
 
+// BalanceSeasonChartLegendPreviewResp 表格中季节性图表预览接口
+type BalanceSeasonChartLegendPreviewResp struct {
+	List QuarterDataList
+}
+
 // 判断图表指标是否已经存在
 func ChartInfoExist(condition, edbInfoIdStr string) (count int, err error) {
 	sql := `SELECT COUNT(1) AS count FROM (

+ 7 - 0
models/data_manage/excel/request/balance_table.go

@@ -61,3 +61,10 @@ type AddBalanceTableChartReq struct {
 	//UnitEn            string          `description:"英文单位名称"`
 	ChartEdbInfoList []AddBalanceTableChartEdbItem
 }
+
+type BalanceSeasonChartLegendPreviewReq struct {
+	Calendar          string                      `description:"公历/农历"`
+	SeasonExtraConfig data_manage.SeasonExtraItem `description:"季节性图表中的配置,json数据"`
+	DataArr           []float64
+	DateArr           []string
+}

+ 9 - 0
routers/commentsRouter.go

@@ -817,6 +817,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: "BalanceSeasonChartLegendPreview",
+            Router: `/excel_info/balance/chartLegend/preview`,
+            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: "BalanceChartInfoAdd",

+ 80 - 0
services/data/chart_info_excel_balance.go

@@ -1118,3 +1118,83 @@ func CheckBalanceChartCacheAndPermission(chartInfo *data_manage.ChartInfoView, i
 	}
 	return
 }
+
+// GetBalanceExcelSeasonChartLegendPreview 获取预览的季节性图例
+func GetBalanceExcelSeasonChartLegendPreview(dataList []*data_manage.EdbDataList, calendar string, seasonExtraConfigReq data_manage.SeasonExtraItem) (quarterDataList data_manage.QuarterDataList, err error, errMsg string) {
+	seasonExtraConfig := ""
+	if seasonExtraConfigReq.XEndDate != "" {
+		if seasonExtraConfigReq.XStartDate > seasonExtraConfigReq.XEndDate && seasonExtraConfigReq.JumpYear != 1 {
+			errMsg = "季节性图表配置信息异常:横坐标日期配置错误"
+			err = fmt.Errorf("季节性图表配置信息异常: 横坐标日期配置错误")
+			return
+		}
+		seasonExtra, tErr := json.Marshal(seasonExtraConfigReq)
+		if tErr != nil {
+			errMsg = "季节性图表配置信息异常"
+			err = fmt.Errorf("季节性图表配置信息异常,Err:" + tErr.Error())
+			return
+		}
+
+		seasonExtraConfig = string(seasonExtra)
+	}
+	var latestDate time.Time //最新日期
+	startDate, endDate, _, _ := getBalanceDataListStartDateAndValue(dataList)
+	calendarPreYear := 0
+	startDateReal := startDate
+	latestDate, _ = time.ParseInLocation(utils.FormatDate, endDate, time.Local)
+	if calendar == "农历" {
+		newStartDateReal, e := time.Parse(utils.FormatDate, startDateReal)
+		if e != nil {
+			err = fmt.Errorf("开始时间解析失败 time.Parse:" + e.Error())
+			return
+		}
+		calendarPreYear = newStartDateReal.Year() - 1
+		newStartDateReal = newStartDateReal.AddDate(-1, 0, 0)
+		startDateReal = newStartDateReal.Format(utils.FormatDate)
+	}
+	if calendar == "农历" {
+		if len(dataList) <= 0 {
+			return
+		} else {
+			result, tmpErr := data_manage.AddCalculateQuarterV6(dataList)
+			if tmpErr != nil {
+				err = errors.New("获取农历数据失败,Err:" + tmpErr.Error())
+				return
+			}
+			quarterDataList, err = GetSeasonEdbInfoDataListByXDateNong(result, latestDate, seasonExtraConfig, calendarPreYear)
+			if err != nil {
+				err = errors.New("获取季节性图表数据失败,Err:" + err.Error())
+				return
+			}
+		}
+
+	} else {
+		quarterDataList, err = GetSeasonEdbInfoDataListByXDate(dataList, latestDate, seasonExtraConfig)
+		if err != nil {
+			err = errors.New("获取季节性图表数据失败,Err:" + err.Error())
+			return
+		}
+	}
+	return
+}
+
+func getBalanceDataListStartDateAndValue(dataList []*data_manage.EdbDataList) (startDate, endDate string, startVal, endVal float64) {
+	if len(dataList) == 0 {
+		return
+	}
+	startDate = dataList[0].DataTime
+	startVal = dataList[0].Value
+	endDate = dataList[len(dataList)-1].DataTime
+	endVal = dataList[len(dataList)-1].Value
+	for _, v := range dataList {
+		if v.DataTime < startDate {
+			startDate = v.DataTime
+			startVal = v.Value
+		}
+		if v.DataTime > endDate {
+			endDate = v.DataTime
+			endVal = v.Value
+		}
+	}
+	return
+}