custom_analysis_edb.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package excel
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "eta/eta_api/models/data_manage/excel"
  6. excelServices "eta/eta_api/services/excel"
  7. "eta/eta_api/utils"
  8. "fmt"
  9. "github.com/araddon/dateparse"
  10. "github.com/shopspring/decimal"
  11. )
  12. // GetCustomAnalysisExcelData 获取自定义分析的表格data数据
  13. func GetCustomAnalysisExcelData(excelInfo *excel.ExcelInfo) (luckySheet excelServices.LuckySheet, err error, errMsg string) {
  14. // 查找当前excel的sheet列表
  15. sheetList, err := excel.GetAllSheetList(excelInfo.ExcelInfoId)
  16. if err != nil {
  17. errMsg = "保存失败"
  18. err = errors.New("查找当前excel的sheet列表失败,Err:" + err.Error())
  19. return
  20. }
  21. currSheetMap := make(map[string]string)
  22. for _, sheet := range sheetList {
  23. currSheetMap[sheet.SheetName] = sheet.SheetName
  24. }
  25. sheetCellDataMapList := make(map[int][]excelServices.LuckySheetCellData)
  26. // 通过excel的id获取各个sheet的单元格数据map
  27. {
  28. dataList, tmpErr := excel.GetSheetDataListByExcelInfoId(excelInfo.ExcelInfoId)
  29. if tmpErr != nil {
  30. err = tmpErr
  31. return
  32. }
  33. for _, cellData := range dataList {
  34. sheetDataList, ok := sheetCellDataMapList[cellData.ExcelSheetId]
  35. if !ok {
  36. sheetDataList = make([]excelServices.LuckySheetCellData, 0)
  37. }
  38. tmpSheetDataList := make([]excelServices.LuckySheetCellData, 0)
  39. err = json.Unmarshal([]byte(cellData.Data), &tmpSheetDataList)
  40. if err != nil {
  41. return
  42. }
  43. sheetCellDataMapList[cellData.ExcelSheetId] = append(sheetDataList, tmpSheetDataList...)
  44. }
  45. }
  46. // 转成luckySheet的数据格式
  47. luckySheet = excelServices.LuckySheet{
  48. SheetList: make([]excelServices.LuckySheetData, 0),
  49. }
  50. for _, sheet := range sheetList {
  51. var luckySheetDataConfig excelServices.LuckySheetDataConfig
  52. err = json.Unmarshal([]byte(sheet.Config), &luckySheetDataConfig)
  53. if err != nil {
  54. return
  55. }
  56. tmpLuckySheetDataInfo := excelServices.LuckySheetData{
  57. Name: sheet.SheetName,
  58. Index: sheet.Sort,
  59. CellData: sheetCellDataMapList[sheet.ExcelSheetId],
  60. Config: luckySheetDataConfig,
  61. }
  62. luckySheet.SheetList = append(luckySheet.SheetList, tmpLuckySheetDataInfo)
  63. }
  64. return
  65. }
  66. // GenerateExcelCustomAnalysisExcel 根据自定义分析的表格data数据生成excel
  67. func GenerateExcelCustomAnalysisExcel(excelInfo *excel.ExcelInfo) (downloadFilePath string, err error, errMsg string) {
  68. luckySheet, err, errMsg := GetCustomAnalysisExcelData(excelInfo)
  69. if err != nil {
  70. return
  71. }
  72. downloadFilePath, err = luckySheet.ToExcel()
  73. fmt.Println("生成的文件地址:", downloadFilePath)
  74. return
  75. }
  76. // HandleEdbSequenceVal 处理日期集和数据集
  77. func HandleEdbSequenceVal(dateSequenceVal, dataSequenceVal []string) {
  78. // 数据集
  79. type dataStruct struct {
  80. Value float64
  81. Ok bool
  82. }
  83. dataList := make([]dataStruct, 0)
  84. {
  85. var startData bool
  86. for _, v := range dataSequenceVal {
  87. // 如果没有数据集,那么就过滤
  88. if v == `` {
  89. // 如果开始插入数据了,那么就需要插入不存在值
  90. if startData {
  91. dataList = append(dataList, dataStruct{
  92. Value: 0,
  93. Ok: false,
  94. })
  95. }
  96. continue
  97. }
  98. startData = true
  99. tmpValDec, tmpErr := decimal.NewFromString(v)
  100. if tmpErr != nil {
  101. dataList = append(dataList, dataStruct{
  102. Value: 0,
  103. Ok: false,
  104. })
  105. continue
  106. }
  107. tmpVal, _ := tmpValDec.Float64()
  108. dataList = append(dataList, dataStruct{
  109. Value: tmpVal,
  110. Ok: true,
  111. })
  112. }
  113. }
  114. // 日期集
  115. dateList := make([]string, 0)
  116. {
  117. var startData bool
  118. for _, v := range dateSequenceVal {
  119. // 如果没有数据集,那么就过滤
  120. if v == `` {
  121. // 如果开始插入数据了,那么就需要插入不存在值
  122. if startData {
  123. dateList = append(dateList, "")
  124. }
  125. continue
  126. }
  127. startData = true
  128. t1, tmpErr := dateparse.ParseAny(v)
  129. if tmpErr != nil {
  130. dateList = append(dateList, "")
  131. continue
  132. }
  133. dateList = append(dateList, t1.Format(utils.FormatDate))
  134. }
  135. }
  136. return
  137. }