excel_info.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_chart_lib/models"
  5. "eta/eta_chart_lib/models/request"
  6. "eta/eta_chart_lib/models/response"
  7. "eta/eta_chart_lib/services/data"
  8. "eta/eta_chart_lib/services/data/table"
  9. "eta/eta_chart_lib/services/excel"
  10. "eta/eta_chart_lib/utils"
  11. "time"
  12. )
  13. // ExcelInfoController excel表格
  14. type ExcelInfoController struct {
  15. BaseAuthController
  16. }
  17. // GetTableDetail
  18. // @Title 获取表格表详情
  19. // @Description 获取表格表详情接口
  20. // @Param UniqueCode query string true "表格表唯一编码,如果是管理后台访问,传固定字符串:7c69b590249049942070ae9dcd5bf6dc"
  21. // @Success 200 {object} response.ExcelTableDetailResp
  22. // @router /detail [get]
  23. func (this *ExcelInfoController) GetTableDetail() {
  24. br := new(models.BaseResponse).Init()
  25. defer func() {
  26. this.Data["json"] = br
  27. this.ServeJSON()
  28. }()
  29. uniqueCode := this.GetString("UniqueCode")
  30. if uniqueCode == "" {
  31. br.Msg = "参数错误"
  32. br.ErrMsg = "参数错误,uniqueCode is empty"
  33. return
  34. }
  35. key := utils.HZ_CHART_LIB_EXCEL_TABLE_DETAIL + ":" + uniqueCode
  36. resp := new(response.ExcelTableDetailResp)
  37. //判断是否有缓存
  38. if utils.Re == nil {
  39. if utils.Re == nil && utils.Rc.IsExist(key) {
  40. if data, err1 := utils.Rc.RedisBytes(key); err1 == nil {
  41. err := json.Unmarshal(data, &resp)
  42. if err == nil && resp != nil {
  43. br.Ret = 200
  44. br.Success = true
  45. br.Msg = "获取成功"
  46. br.Data = resp
  47. return
  48. }
  49. }
  50. }
  51. }
  52. excelInfo, err := models.GetExcelInfoByUniqueCode(uniqueCode)
  53. if err != nil {
  54. if err.Error() == utils.ErrNoRow() {
  55. br.Msg = "该表格已被删除,请刷新页面"
  56. br.ErrMsg = "该表格已被删除,请刷新页面,Err:" + err.Error()
  57. return
  58. }
  59. br.Msg = "获取失败"
  60. br.ErrMsg = "获取表格表信息失败,Err:" + err.Error()
  61. return
  62. }
  63. var tableData excel.TableData
  64. switch excelInfo.Source {
  65. case utils.EXCEL_DEFAULT:
  66. luckySheetData, err := excel.GetLuckySheetData(excelInfo.Content)
  67. if err != nil {
  68. br.Msg = "获取失败"
  69. br.ErrMsg = "获取excel数据失败,Err:" + err.Error()
  70. return
  71. }
  72. tableData, err = luckySheetData.GetTableDataByLuckySheetDataStr()
  73. if err != nil {
  74. br.Msg = "获取失败"
  75. br.ErrMsg = "转换成table失败,Err:" + err.Error()
  76. return
  77. }
  78. case utils.TIME_TABLE:
  79. var tableDataConfig data.TableDataConfig
  80. err = json.Unmarshal([]byte(excelInfo.Content), &tableDataConfig)
  81. if err != nil {
  82. br.Msg = "获取失败"
  83. br.ErrMsg = "表格json转结构体失败,Err:" + err.Error()
  84. return
  85. }
  86. result, err := data.GetDataByTableDataConfig(tableDataConfig)
  87. if err != nil {
  88. br.Msg = "获取失败"
  89. br.ErrMsg = "获取最新的表格数据失败,Err:" + err.Error()
  90. return
  91. }
  92. tableData, err = excel.GetTableDataByCustomData(excelInfo.ExcelType, result)
  93. if err != nil {
  94. br.Msg = "获取失败"
  95. br.ErrMsg = "转换成table失败,Err:" + err.Error()
  96. return
  97. }
  98. case utils.MIXED_TABLE:
  99. var result request.MixedTableReq
  100. err = json.Unmarshal([]byte(excelInfo.Content), &result)
  101. if err != nil {
  102. br.Msg = "获取失败"
  103. br.ErrMsg = "表格json转结构体失败,Err:" + err.Error()
  104. return
  105. }
  106. newResult, tmpErr, tmpErrMsg := table.GetMixedTableCellData(result)
  107. if tmpErr != nil {
  108. br.Msg = "获取失败"
  109. if tmpErrMsg != `` {
  110. br.Msg = tmpErrMsg
  111. }
  112. br.ErrMsg = "获取最新的数据失败,Err:" + tmpErr.Error()
  113. return
  114. }
  115. tableData, err = excel.GetTableDataByMixedTableData(newResult)
  116. if err != nil {
  117. br.Msg = "获取失败"
  118. br.ErrMsg = "转换成table失败,Err:" + err.Error()
  119. return
  120. }
  121. }
  122. tableData = excel.HandleTableCell(tableData)
  123. resp.TableInfo = tableData
  124. resp.Source = excelInfo.Source
  125. resp.ExcelType = excelInfo.ExcelType
  126. resp.ExcelName = excelInfo.ExcelName
  127. resp.ExcelImage = excelInfo.ExcelImage
  128. resp.UniqueCode = excelInfo.UniqueCode
  129. if utils.Re == nil {
  130. data, _ := json.Marshal(resp)
  131. utils.Rc.Put(key, data, 5*time.Minute)
  132. }
  133. br.Ret = 200
  134. br.Success = true
  135. br.Msg = "获取成功"
  136. br.Data = resp
  137. }