custom_analysis.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. package excel
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/controllers"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/data_manage"
  7. excelModel "eta/eta_api/models/data_manage/excel"
  8. "eta/eta_api/models/data_manage/excel/response"
  9. "eta/eta_api/models/data_manage/request"
  10. "eta/eta_api/services/data/excel"
  11. "eta/eta_api/utils"
  12. "strconv"
  13. "strings"
  14. "time"
  15. )
  16. // CustomAnalysisController 自定义分析
  17. type CustomAnalysisController struct {
  18. controllers.BaseAuthController
  19. }
  20. // GetExcelByName
  21. // @Title 根据excel名称获取表格详情(基础信息+第一页初始化数据)
  22. // @Description 根据excel名称获取表格详情(基础信息+第一页初始化数据)
  23. // @Param ExcelName query string true "搜索关键词"
  24. // @Success 200 {object} response.ExcelListResp
  25. // @router /excel_by_name [get]
  26. func (c *CustomAnalysisController) GetExcelByName() {
  27. br := new(models.BaseResponse).Init()
  28. defer func() {
  29. c.Data["json"] = br
  30. c.ServeJSON()
  31. }()
  32. sysUser := c.SysUser
  33. if sysUser == nil {
  34. br.Msg = "请登录"
  35. br.ErrMsg = "请登录,SysUser Is Empty"
  36. br.Ret = 408
  37. return
  38. }
  39. excelName := c.GetString("ExcelName")
  40. if excelName == `` {
  41. br.Msg = "请选择表格"
  42. br.ErrMsg = "ExcelName未传"
  43. br.IsSendEmail = false
  44. return
  45. }
  46. resp := response.FindExcelInfoResp{}
  47. excelName = utils.TrimLRStr(excelName)
  48. // 获取数据详情
  49. excelDetail, err := data_manage.GetNoContentExcelInfoByName(excelName, utils.CUSTOM_ANALYSIS_TABLE)
  50. if err != nil {
  51. if err.Error() == utils.ErrNoRow() {
  52. br.Ret = 200
  53. br.Success = true
  54. br.Msg = "获取成功"
  55. br.Data = resp
  56. return
  57. }
  58. br.Msg = "获取表格事变"
  59. br.ErrMsg = err.Error()
  60. return
  61. }
  62. resp.IsFind = true
  63. resp.ExcelInfo = excelDetail
  64. if excelDetail != nil {
  65. sheetList, err := excelModel.GetAllSheetItemList(excelDetail.ExcelInfoId)
  66. if err != nil {
  67. br.Msg = "获取sheet失败"
  68. br.ErrMsg = "获取sheet失败,err:" + err.Error()
  69. return
  70. }
  71. if len(sheetList) > 0 {
  72. sheetIdList := make([]int, 0)
  73. for _, v := range sheetList {
  74. sheetIdList = append(sheetIdList, v.ExcelSheetId)
  75. }
  76. // 获取所有sheet的第一页的数据
  77. sheetDataList, err := excelModel.GetSheetDataListBySheetIdListAndPage(sheetIdList, 1)
  78. if err != nil {
  79. br.Msg = "获取sheet中的数据失败"
  80. br.ErrMsg = "获取sheet中的数据失败,err:" + err.Error()
  81. return
  82. }
  83. sheetDataMap := make(map[int]*excelModel.ExcelSheetData)
  84. for _, v := range sheetDataList {
  85. sheetDataMap[v.ExcelSheetId] = v
  86. }
  87. for k, v := range sheetList {
  88. sheetData, ok := sheetDataMap[v.ExcelSheetId]
  89. if !ok {
  90. continue
  91. }
  92. v.Data = sheetData
  93. sheetList[k] = v
  94. }
  95. }
  96. // TODO 合并单元格信息、计算公式
  97. resp.SheetList = sheetList
  98. }
  99. //resp := response.ExcelListResp{
  100. // Paging: page,
  101. // List: list,
  102. //}
  103. br.Ret = 200
  104. br.Success = true
  105. br.Msg = "获取成功"
  106. br.Data = resp
  107. }
  108. // Add
  109. // @Title 新增表格接口
  110. // @Description 新增表格接口
  111. // @Param request body request.AddExcelInfoReq true "type json string"
  112. // @Success 200 {object} response.AddExcelInfoResp
  113. // @router /add [post]
  114. func (c *CustomAnalysisController) Add() {
  115. br := new(models.BaseResponse).Init()
  116. defer func() {
  117. c.Data["json"] = br
  118. c.ServeJSON()
  119. }()
  120. sysUser := c.SysUser
  121. if sysUser == nil {
  122. br.Msg = "请登录"
  123. br.ErrMsg = "请登录,SysUser Is Empty"
  124. br.Ret = 408
  125. return
  126. }
  127. deleteCache := true
  128. cacheKey := "CACHE_EXCEL_TABLE_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
  129. defer func() {
  130. if deleteCache {
  131. _ = utils.Rc.Delete(cacheKey)
  132. }
  133. }()
  134. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  135. deleteCache = false
  136. br.Msg = "系统处理中,请稍后重试!"
  137. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  138. return
  139. }
  140. var req request.AddExcelInfoReq
  141. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  142. if err != nil {
  143. br.Msg = "参数解析异常!"
  144. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  145. return
  146. }
  147. req.ExcelName = strings.Trim(req.ExcelName, " ")
  148. if req.ExcelName == "" {
  149. br.Msg = "请填写表格名称!"
  150. br.IsSendEmail = false
  151. return
  152. }
  153. if req.ExcelClassifyId <= 0 {
  154. br.Msg = "分类参数错误!"
  155. br.IsSendEmail = false
  156. return
  157. }
  158. _, err, errMsg, isSendEmail := excel.AddCustomAnalysisTable(utils.TrimLRStr(req.ExcelName), req.Content, req.ExcelImage, req.ExcelClassifyId, sysUser)
  159. if err != nil {
  160. br.Msg = "保存失败"
  161. if errMsg != `` {
  162. br.Msg = errMsg
  163. }
  164. br.ErrMsg = "保存失败,Err:" + err.Error()
  165. br.IsSendEmail = isSendEmail
  166. return
  167. }
  168. // 更新excel下载地址(默认的EXCEL需要更新,自定义表格不需要更新)
  169. //if req.Source == 1 {
  170. // go UpdateExcelInfoFileUrl(excelInfo)
  171. //}
  172. //
  173. //resp := new(response.AddExcelInfoResp)
  174. //resp.ExcelInfoId = excelInfo.ExcelInfoId
  175. //resp.UniqueCode = excelInfo.UniqueCode
  176. //新增操作日志
  177. //{
  178. // excelLog := &data_manage.ExcelInfoLog{
  179. // //ExcelInfoLogId: 0,
  180. // ExcelInfoId: excelInfo.ExcelInfoId,
  181. // ExcelName: req.ExcelName,
  182. // ExcelClassifyId: req.ExcelClassifyId,
  183. // SysUserId: sysUser.AdminId,
  184. // SysUserRealName: sysUser.RealName,
  185. // UniqueCode: excelInfo.UniqueCode,
  186. // CreateTime: time.Now(),
  187. // Content: string(c.Ctx.Input.RequestBody),
  188. // Status: "新增表格",
  189. // Method: c.Ctx.Input.URI(),
  190. // }
  191. // go data_manage.AddExcelInfoLog(excelLog)
  192. //}
  193. br.Ret = 200
  194. br.Success = true
  195. br.Msg = "保存成功"
  196. //br.Data = resp
  197. br.IsAddLog = false //数据量太大了,不写入日志吧
  198. }