excel_info.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/hongze_chart_lib/models"
  6. "hongze/hongze_chart_lib/models/response"
  7. "hongze/hongze_chart_lib/services/data"
  8. "hongze/hongze_chart_lib/services/excel"
  9. "hongze/hongze_chart_lib/utils"
  10. "time"
  11. )
  12. // ExcelInfoController excel表格
  13. type ExcelInfoController struct {
  14. BaseAuthController
  15. }
  16. // GetTableDetail
  17. // @Title 获取表格表详情
  18. // @Description 获取表格表详情接口
  19. // @Param UniqueCode query string true "表格表唯一编码,如果是管理后台访问,传固定字符串:7c69b590249049942070ae9dcd5bf6dc"
  20. // @Success 200 {object} response.ExcelTableDetailResp
  21. // @router /detail [get]
  22. func (this *ExcelInfoController) GetTableDetail() {
  23. br := new(models.BaseResponse).Init()
  24. defer func() {
  25. this.Data["json"] = br
  26. this.ServeJSON()
  27. }()
  28. uniqueCode := this.GetString("UniqueCode")
  29. if uniqueCode == "" {
  30. br.Msg = "参数错误"
  31. br.ErrMsg = "参数错误,uniqueCode is empty"
  32. return
  33. }
  34. key := utils.HZ_CHART_LIB_EXCEL_TABLE_DETAIL + ":" + uniqueCode
  35. resp := new(response.ExcelTableDetailResp)
  36. //判断是否有缓存
  37. if utils.Re == nil {
  38. if utils.Re == nil && utils.Rc.IsExist(key) {
  39. if data, err1 := utils.Rc.RedisBytes(key); err1 == nil {
  40. err := json.Unmarshal(data, &resp)
  41. if err == nil && resp != nil {
  42. br.Ret = 200
  43. br.Success = true
  44. br.Msg = "获取成功"
  45. br.Data = resp
  46. fmt.Println("source redis")
  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. if excelInfo.Source == 1 {
  65. luckySheetData, err := excel.GetLuckySheetData(excelInfo.Content)
  66. if err != nil {
  67. br.Msg = "获取失败"
  68. br.ErrMsg = "获取excel数据失败,Err:" + err.Error()
  69. return
  70. }
  71. tableData, err = luckySheetData.GetTableDataByLuckySheetDataStr()
  72. if err != nil {
  73. br.Msg = "获取失败"
  74. br.ErrMsg = "转换成table失败,Err:" + err.Error()
  75. return
  76. }
  77. } else {
  78. var tableDataConfig data.TableDataConfig
  79. err = json.Unmarshal([]byte(excelInfo.Content), &tableDataConfig)
  80. if err != nil {
  81. br.Msg = "获取失败"
  82. br.ErrMsg = "表格json转结构体失败,Err:" + err.Error()
  83. return
  84. }
  85. result, err := data.GetDataByTableDataConfig(tableDataConfig)
  86. if err != nil {
  87. br.Msg = "获取失败"
  88. br.ErrMsg = "获取最新的表格数据失败,Err:" + err.Error()
  89. return
  90. }
  91. tableData, err = excel.GetTableDataByCustomData(excelInfo.ExcelType, result)
  92. if err != nil {
  93. br.Msg = "获取失败"
  94. br.ErrMsg = "转换成table失败,Err:" + err.Error()
  95. return
  96. }
  97. }
  98. tableData = excel.HandleTableCell(tableData)
  99. resp.TableInfo = tableData
  100. resp.Source = excelInfo.Source
  101. resp.ExcelType = excelInfo.ExcelType
  102. resp.ExcelName = excelInfo.ExcelName
  103. resp.ExcelImage = excelInfo.ExcelImage
  104. resp.UniqueCode = excelInfo.UniqueCode
  105. if utils.Re == nil {
  106. data, _ := json.Marshal(resp)
  107. utils.Rc.Put(key, data, 10*time.Minute)
  108. }
  109. br.Ret = 200
  110. br.Success = true
  111. br.Msg = "获取成功"
  112. br.Data = resp
  113. }