mixed_table.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package excel
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/models"
  5. "eta/eta_api/models/data_manage"
  6. "eta/eta_api/models/data_manage/excel/request"
  7. "eta/eta_api/services/data"
  8. excel2 "eta/eta_api/services/data/excel"
  9. "fmt"
  10. "strconv"
  11. )
  12. // GetSystemDate
  13. // @Title 获取系统日期(包含计算日期)
  14. // @Description 获取系统日期(包含计算日期)
  15. // @Param request body request.MixedTableCellDataReq true "type json string"
  16. // @router /excel_info/get_system_date [post]
  17. func (c *ExcelInfoController) GetSystemDate() {
  18. br := new(models.BaseResponse).Init()
  19. defer func() {
  20. c.Data["json"] = br
  21. c.ServeJSON()
  22. }()
  23. sysUser := c.SysUser
  24. if sysUser == nil {
  25. br.Msg = "请登录"
  26. br.ErrMsg = "请登录,SysUser Is Empty"
  27. br.Ret = 408
  28. return
  29. }
  30. var req request.MixedTableCellDataReq
  31. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  32. if err != nil {
  33. br.Msg = "参数解析异常!"
  34. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  35. return
  36. }
  37. date, err, errMsg := excel2.HandleDate(req.DataTimeType, req.Value)
  38. if err != nil {
  39. br.Msg = "获取系统日期失败"
  40. if errMsg != `` {
  41. br.Msg = errMsg
  42. }
  43. br.ErrMsg = "获取系统日期失败,Err:" + err.Error()
  44. return
  45. }
  46. type resp struct {
  47. Date string
  48. }
  49. br.Ret = 200
  50. br.Success = true
  51. br.Msg = "获取系统日期成功"
  52. br.Data = resp{
  53. Date: date,
  54. }
  55. }
  56. // CalculateData
  57. // @Title 公式计算(混合表格)
  58. // @Description 公式计算(混合表格)
  59. // @Param request body request.CalculateConf true "type json string"
  60. // @router /excel_info/mixed/calculate [post]
  61. func (c *ExcelInfoController) CalculateData() {
  62. br := new(models.BaseResponse).Init()
  63. defer func() {
  64. c.Data["json"] = br
  65. c.ServeJSON()
  66. }()
  67. sysUser := c.SysUser
  68. if sysUser == nil {
  69. br.Msg = "请登录"
  70. br.ErrMsg = "请登录,SysUser Is Empty"
  71. br.Ret = 408
  72. return
  73. }
  74. var req request.CalculateConf
  75. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  76. if err != nil {
  77. br.Msg = "参数解析异常!"
  78. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  79. return
  80. }
  81. edbInfo, err := data_manage.GetEdbInfoById(req.EdbInfoId)
  82. if err != nil {
  83. br.Msg = "获取指标信息失败!"
  84. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  85. return
  86. }
  87. dataList := make([]*data_manage.EdbDataList, 0)
  88. switch edbInfo.EdbInfoType {
  89. case 0:
  90. dataList, _ = data_manage.GetEdbDataList(edbInfo.Source, edbInfo.EdbInfoId, ``, ``)
  91. case 1:
  92. _, dataList, _, _, _, _ = data.GetPredictDataListByPredictEdbInfoId(edbInfo.EdbInfoId, ``, ``, false)
  93. default:
  94. br.Msg = "指标类型异常!"
  95. br.ErrMsg = "指标类型异常,Err:" + strconv.Itoa(edbInfo.EdbInfoType)
  96. return
  97. }
  98. //获取所有数据,计算所有数据
  99. //获取部分数据,计算部分数据
  100. // BaseCalculate 数据计算的结构体
  101. type BaseCalculate struct {
  102. DataList []*data_manage.EdbDataList
  103. Frequency string `description:"需要转换的频度"`
  104. Formula interface{}
  105. Calendar string `description:"公历/农历"`
  106. MoveType int `description:"移动方式:1:领先(默认),2:滞后"`
  107. MoveFrequency string `description:"移动频度"`
  108. FromFrequency string `description:"来源的频度"`
  109. Source int `description:"1:累计值转月;2:累计值转季;3:同比值;4:同差值;5:N数值移动平均数计算;6:环比值;7:环差值;8:升频;9:降频;10:时间移位;11:超季节性;12:年化;13:累计值;14:累计值年初至今;15:指数修匀;16:日均值"`
  110. }
  111. req2 := &BaseCalculate{
  112. DataList: dataList,
  113. Frequency: req.Frequency,
  114. Formula: req.Formula,
  115. Calendar: req.Calendar,
  116. MoveType: req.MoveType,
  117. MoveFrequency: req.MoveFrequency,
  118. FromFrequency: edbInfo.Frequency,
  119. Source: req.Source,
  120. }
  121. // 调用指标库去更新
  122. reqJson, tmpErr := json.Marshal(req2)
  123. if tmpErr != nil {
  124. err = tmpErr
  125. return
  126. }
  127. respItem, tmpErr := data.BaseCalculate(string(reqJson))
  128. if tmpErr != nil {
  129. err = tmpErr
  130. return
  131. }
  132. if respItem.Ret != 200 {
  133. br.Msg = respItem.Msg
  134. br.ErrMsg = respItem.ErrMsg
  135. return
  136. }
  137. // 数据处理成需要返回的样式
  138. //num := 5
  139. lenDate := len(respItem.Data.DateList)
  140. //if lenDate < 5 {
  141. // num = lenDate
  142. //}
  143. dataListResp := make([]data_manage.DataList, 0)
  144. //for i := 1; i <= num; i++ {
  145. // date := respItem.Data.DateList[lenDate-i]
  146. // val, ok := respItem.Data.DataMap[date]
  147. // if !ok {
  148. // continue
  149. // }
  150. //
  151. // dataListResp = append(dataListResp, data_manage.DataList{
  152. // Value: fmt.Sprint(val),
  153. // DataTime: date,
  154. // })
  155. //}
  156. for i := lenDate - 1; i >= 0; i-- {
  157. date := respItem.Data.DateList[i]
  158. val, ok := respItem.Data.DataMap[date]
  159. if !ok {
  160. continue
  161. }
  162. dataListResp = append(dataListResp, data_manage.DataList{
  163. Value: fmt.Sprint(val),
  164. DataTime: date,
  165. })
  166. }
  167. br.Ret = 200
  168. br.Success = true
  169. br.Msg = "计算成功"
  170. br.Data = dataListResp
  171. }