123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- package excel
- import (
- "encoding/json"
- "eta/eta_api/models"
- "eta/eta_api/models/data_manage"
- "eta/eta_api/models/data_manage/excel/request"
- "eta/eta_api/services/data"
- excel2 "eta/eta_api/services/data/excel"
- "strconv"
- )
- // GetSystemDate
- // @Title 获取系统日期(包含计算日期)
- // @Description 获取系统日期(包含计算日期)
- // @Param request body request.MixedTableCellDataReq true "type json string"
- // @router /excel_info/get_system_date [post]
- func (c *ExcelInfoController) GetSystemDate() {
- 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.MixedTableCellDataReq
- err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
- if err != nil {
- br.Msg = "参数解析异常!"
- br.ErrMsg = "参数解析失败,Err:" + err.Error()
- return
- }
- date, err, errMsg := excel2.HandleDate(req.DataTimeType, req.Value)
- if err != nil {
- br.Msg = "获取系统日期失败"
- if errMsg != `` {
- br.Msg = errMsg
- }
- br.ErrMsg = "获取系统日期失败,Err:" + err.Error()
- return
- }
- type resp struct {
- Date string
- }
- br.Ret = 200
- br.Success = true
- br.Msg = "获取系统日期成功"
- br.Data = resp{
- Date: date,
- }
- }
- // CalculateData
- // @Title 公式计算(混合表格)
- // @Description 公式计算(混合表格)
- // @Param request body request.CalculateConf true "type json string"
- // @router /excel_info/mixed/calculate [post]
- func (c *ExcelInfoController) CalculateData() {
- 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.CalculateConf
- err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
- if err != nil {
- br.Msg = "参数解析异常!"
- br.ErrMsg = "参数解析失败,Err:" + err.Error()
- return
- }
- edbInfo, err := data_manage.GetEdbInfoById(req.EdbInfoId)
- if err != nil {
- br.Msg = "获取指标信息失败!"
- br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
- return
- }
- dataList := make([]*data_manage.EdbDataList, 0)
- switch edbInfo.EdbInfoType {
- case 0:
- dataList, _ = data_manage.GetEdbDataList(edbInfo.Source, edbInfo.EdbInfoId, ``, ``)
- case 1:
- _, dataList, _, _, _, _ = data.GetPredictDataListByPredictEdbInfoId(edbInfo.EdbInfoId, ``, ``, false)
- default:
- br.Msg = "指标类型异常!"
- br.ErrMsg = "指标类型异常,Err:" + strconv.Itoa(edbInfo.EdbInfoType)
- return
- }
- //获取所有数据,计算所有数据
- //获取部分数据,计算部分数据
- // BaseCalculate 数据计算的结构体
- type BaseCalculate struct {
- DataList []*data_manage.EdbDataList
- Frequency string `description:"需要转换的频度"`
- Formula interface{}
- Calendar string `description:"公历/农历"`
- MoveType int `description:"移动方式:1:领先(默认),2:滞后"`
- MoveFrequency string `description:"移动频度"`
- FromFrequency string `description:"来源的频度"`
- Source int `description:"1:累计值转月;2:累计值转季;3:同比值;4:同差值;5:N数值移动平均数计算;6:环比值;7:环差值;8:升频;9:降频;10:时间移位;11:超季节性;12:年化;13:累计值;14:累计值年初至今;15:指数修匀;16:日均值"`
- }
- req2 := &BaseCalculate{
- DataList: dataList,
- Frequency: req.Frequency,
- Formula: req.Formula,
- Calendar: req.Calendar,
- MoveType: req.MoveType,
- MoveFrequency: req.MoveFrequency,
- FromFrequency: edbInfo.Frequency,
- Source: req.Source,
- }
- // 调用指标库去更新
- reqJson, tmpErr := json.Marshal(req2)
- if tmpErr != nil {
- err = tmpErr
- return
- }
- respItem, tmpErr := data.BaseCalculate(string(reqJson))
- if tmpErr != nil {
- err = tmpErr
- return
- }
- if respItem.Ret != 200 {
- br.Msg = respItem.Msg
- br.ErrMsg = respItem.ErrMsg
- return
- }
- // 数据处理成需要返回的样式
- num := 5
- lenDate := len(respItem.Data.DateList)
- if lenDate < 5 {
- num = lenDate
- }
- var currDate string // 当前日期
- dataListResp := make([]*data_manage.EdbDataList, 0)
- if req.DataTime == `` {
- for i := 1; i <= num; i++ {
- date := respItem.Data.DateList[lenDate-i]
- val, ok := respItem.Data.DataMap[date]
- if !ok {
- continue
- }
- dataListResp = append(dataListResp, &data_manage.EdbDataList{
- Value: val,
- DataTime: date,
- })
- }
- } else {
- if val, ok := respItem.Data.DataMap[req.DataTime]; ok {
- for i, tmpDate := range respItem.Data.DateList {
- if tmpDate == req.DataTime {
- if i+3 <= lenDate {
- t1Date := respItem.Data.DateList[i+2]
- if tmpVal, ok2 := respItem.Data.DataMap[t1Date]; ok2 {
- // 当前日期
- dataListResp = append(dataListResp, &data_manage.EdbDataList{
- Value: tmpVal,
- DataTime: t1Date,
- })
- }
- }
- if i+2 <= lenDate {
- t1Date := respItem.Data.DateList[i+1]
- if tmpVal, ok2 := respItem.Data.DataMap[t1Date]; ok2 {
- // 当前日期
- dataListResp = append(dataListResp, &data_manage.EdbDataList{
- Value: tmpVal,
- DataTime: t1Date,
- })
- }
- }
- // 当前日期
- dataListResp = append(dataListResp, &data_manage.EdbDataList{
- Value: val,
- DataTime: req.DataTime,
- })
- if i >= 1 {
- t1Date := respItem.Data.DateList[i-1]
- if tmpVal, ok2 := respItem.Data.DataMap[t1Date]; ok2 {
- // 当前日期
- dataListResp = append(dataListResp, &data_manage.EdbDataList{
- Value: tmpVal,
- DataTime: t1Date,
- })
- }
- }
- if i >= 2 {
- t1Date := respItem.Data.DateList[i-2]
- if tmpVal, ok2 := respItem.Data.DataMap[t1Date]; ok2 {
- // 当前日期
- dataListResp = append(dataListResp, &data_manage.EdbDataList{
- Value: tmpVal,
- DataTime: t1Date,
- })
- }
- }
- }
- }
- }
- }
- resp := data_manage.BeforeAndAfterDateDataResp{
- List: dataListResp,
- Date: currDate,
- }
- br.Ret = 200
- br.Success = true
- br.Msg = "计算成功"
- br.Data = resp
- }
|