123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- package excel
- import (
- "encoding/json"
- "errors"
- "eta/eta_api/models/data_manage/excel"
- excelServices "eta/eta_api/services/excel"
- "eta/eta_api/utils"
- "fmt"
- "github.com/araddon/dateparse"
- "github.com/shopspring/decimal"
- )
- // GetCustomAnalysisExcelData 获取自定义分析的表格data数据
- func GetCustomAnalysisExcelData(excelInfo *excel.ExcelInfo) (luckySheet excelServices.LuckySheet, err error, errMsg string) {
- // 查找当前excel的sheet列表
- sheetList, err := excel.GetAllSheetList(excelInfo.ExcelInfoId)
- if err != nil {
- errMsg = "保存失败"
- err = errors.New("查找当前excel的sheet列表失败,Err:" + err.Error())
- return
- }
- currSheetMap := make(map[string]string)
- for _, sheet := range sheetList {
- currSheetMap[sheet.SheetName] = sheet.SheetName
- }
- sheetCellDataMapList := make(map[int][]excelServices.LuckySheetCellData)
- // 通过excel的id获取各个sheet的单元格数据map
- {
- dataList, tmpErr := excel.GetAllSheetDataListByExcelInfoId(excelInfo.ExcelInfoId)
- if tmpErr != nil {
- err = tmpErr
- return
- }
- for _, cellData := range dataList {
- sheetDataList, ok := sheetCellDataMapList[cellData.ExcelSheetId]
- if !ok {
- sheetDataList = make([]excelServices.LuckySheetCellData, 0)
- }
- tmpSheetDataList := make([]excelServices.LuckySheetCellData, 0)
- err = json.Unmarshal([]byte(cellData.Data), &tmpSheetDataList)
- if err != nil {
- return
- }
- sheetCellDataMapList[cellData.ExcelSheetId] = append(sheetDataList, tmpSheetDataList...)
- }
- }
- // 转成luckySheet的数据格式
- luckySheet = excelServices.LuckySheet{
- SheetList: make([]excelServices.LuckySheetData, 0),
- }
- for _, sheet := range sheetList {
- var luckySheetDataConfig excelServices.LuckySheetDataConfig
- err = json.Unmarshal([]byte(sheet.Config), &luckySheetDataConfig)
- if err != nil {
- return
- }
- tmpLuckySheetDataInfo := excelServices.LuckySheetData{
- Name: sheet.SheetName,
- Index: sheet.Sort,
- CellData: sheetCellDataMapList[sheet.ExcelSheetId],
- Config: luckySheetDataConfig,
- }
- luckySheet.SheetList = append(luckySheet.SheetList, tmpLuckySheetDataInfo)
- }
- return
- }
- // GenerateExcelCustomAnalysisExcel 根据自定义分析的表格data数据生成excel
- func GenerateExcelCustomAnalysisExcel(excelInfo *excel.ExcelInfo) (downloadFilePath string, err error, errMsg string) {
- luckySheet, err, errMsg := GetCustomAnalysisExcelData(excelInfo)
- if err != nil {
- return
- }
- downloadFilePath, err = luckySheet.ToExcel()
- fmt.Println("生成的文件地址:", downloadFilePath)
- return
- }
- // HandleEdbSequenceVal 处理日期集和数据集(获取可用的日期、数据集)
- func HandleEdbSequenceVal(dateSequenceVal, dataSequenceVal []string) (newDateList []string, newDataList []float64, err error, errMsg string) {
- newDateList = make([]string, 0)
- newDataList = make([]float64, 0)
- // 数据集
- type dataStruct struct {
- Value float64
- Ok bool
- }
- dataList := make([]dataStruct, 0)
- {
- var startData bool
- for _, v := range dataSequenceVal {
- // 如果没有数据集,那么就过滤
- if v == `` {
- // 如果开始插入数据了,那么就需要插入不存在值
- if startData {
- dataList = append(dataList, dataStruct{
- Value: 0,
- Ok: false,
- })
- }
- continue
- }
- startData = true
- tmpValDec, tmpErr := decimal.NewFromString(v)
- if tmpErr != nil {
- dataList = append(dataList, dataStruct{
- Value: 0,
- Ok: false,
- })
- continue
- }
- tmpVal, _ := tmpValDec.Float64()
- dataList = append(dataList, dataStruct{
- Value: tmpVal,
- Ok: true,
- })
- }
- }
- // 日期集
- dateList := make([]string, 0)
- {
- var startData bool
- for _, v := range dateSequenceVal {
- // 如果没有数据集,那么就过滤
- if v == `` {
- // 如果开始插入数据了,那么就需要插入不存在值
- if startData {
- dateList = append(dateList, "")
- }
- continue
- }
- startData = true
- t1, tmpErr := dateparse.ParseAny(v)
- if tmpErr != nil {
- dateList = append(dateList, "")
- continue
- }
- dateList = append(dateList, t1.Format(utils.FormatDate))
- }
- }
- lenData := len(dataList)
- lenDate := len(dateList)
- // 最小个数
- num := lenDate
- if num > lenData {
- num = lenData
- }
- for i := 0; i < num; i++ {
- date := dateList[i]
- data := dataList[i]
- // 日期为空、数据为空
- if !data.Ok || date == `` {
- continue
- }
- newDateList = append(newDateList, date)
- newDataList = append(newDataList, data.Value)
- }
- return
- }
|