|
|
@@ -0,0 +1,501 @@
|
|
|
+package controllers
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "fmt"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ "github.com/tealeg/xlsx"
|
|
|
+
|
|
|
+ "dashoo.cn/base_common/utils"
|
|
|
+ "dashoo.cn/mcs_api/business/device"
|
|
|
+ "dashoo.cn/mcs_api/business/exporttask"
|
|
|
+ "dashoo.cn/mcs_common/business/equipment"
|
|
|
+)
|
|
|
+
|
|
|
+type ExportParams struct {
|
|
|
+ TimeInterval string
|
|
|
+ Start int64
|
|
|
+ End int64
|
|
|
+ Type string
|
|
|
+ Serials string
|
|
|
+ AccCode string
|
|
|
+ RealName string
|
|
|
+ UserId string
|
|
|
+ Host string
|
|
|
+}
|
|
|
+
|
|
|
+func ProcessExportTask(taskId int64, params ExportParams) {
|
|
|
+ svc := exporttask.GetExportTaskService(utils.DBE)
|
|
|
+ task, err := svc.GetTask(taskId)
|
|
|
+ if err != nil || task == nil {
|
|
|
+ fmt.Println("Task not found or error:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // Update status to processing
|
|
|
+ task.Status = 1
|
|
|
+ svc.UpdateTask(task)
|
|
|
+
|
|
|
+ defer func() {
|
|
|
+ if r := recover(); r != nil {
|
|
|
+ task.Status = 3
|
|
|
+ task.ErrorMessage = fmt.Sprintf("Panic: %v", r)
|
|
|
+ task.EndTime = time.Now()
|
|
|
+ svc.UpdateTask(task)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ timerange := ""
|
|
|
+ svcDevice := device.GetDeviceService(utils.DBE)
|
|
|
+ svceq := equipment.GetEquipmentService(utils.DBE)
|
|
|
+ eids := svceq.GetEquipmentidsByUid(params.UserId)
|
|
|
+ Uid := params.UserId
|
|
|
+ timeinterval := params.TimeInterval
|
|
|
+ start64 := params.Start
|
|
|
+ end64 := params.End
|
|
|
+ begin_time := time.Unix(start64/1000, 0).Format("2006-01-02")
|
|
|
+ end_time := time.Unix(end64/1000, 0).Format("2006-01-02")
|
|
|
+
|
|
|
+ if begin_time == "" {
|
|
|
+ timerange = utils.TimeFormat(time.Now().AddDate(0, 0, -7), "2006-01-02")
|
|
|
+ } else {
|
|
|
+ timerange = begin_time
|
|
|
+ }
|
|
|
+ if end_time == "" {
|
|
|
+ timerange += " 至 " + utils.TimeFormat(time.Now(), "2006-01-02")
|
|
|
+ } else {
|
|
|
+ timerange += " 至 " + end_time
|
|
|
+ }
|
|
|
+
|
|
|
+ t1, _ := utils.TimeParse(begin_time+" 00:00:00", "2006-1-2 15:4:5")
|
|
|
+ t2, _ := utils.TimeParse(end_time+" 23:59:59", "2006-1-2 15:4:5")
|
|
|
+ start := t1.Unix()
|
|
|
+ end := t2.Unix()
|
|
|
+ u, p := "seedplatform", "seed@platformDASHOO.cn"
|
|
|
+ xlsx.PagePrintfooterContant = "第 &P 页"
|
|
|
+ xlsx.PagePrintheadContant = ""
|
|
|
+ f := xlsx.NewFile()
|
|
|
+
|
|
|
+ if params.Type == "2" {
|
|
|
+ where := " (a.CreateUserId=" + params.UserId + " or a.EquipMentId in (" + eids + ")) and a.DataItem in (" + ChannelItem_Report + ") "
|
|
|
+ _, channel := svcDevice.GetChannelsList(-1, 8, where, Uid)
|
|
|
+
|
|
|
+ for i := 0; i < len(channel); i++ {
|
|
|
+ name := channel[i].Title
|
|
|
+ if name == "" {
|
|
|
+ name = channel[i].Code
|
|
|
+ }
|
|
|
+ xlssheetname := utils.ToStr(i+1) + "." + name
|
|
|
+ if DeviceItemContainint(ChannelItem_HaveO2, channel[i].DataItem) {
|
|
|
+ Saveo2Xlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_HaveCO2, channel[i].DataItem) {
|
|
|
+ Saveco2Xlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_Power, channel[i].DataItem) {
|
|
|
+ SavepowerXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_Temperature, channel[i].DataItem) {
|
|
|
+ SaveTemperatureXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_LiquidLevel, channel[i].DataItem) {
|
|
|
+ SaveliquidlevelXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_WindSpeed, channel[i].DataItem) {
|
|
|
+ SaveliquidlevelXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_Pressure, channel[i].DataItem) {
|
|
|
+ SaveliquidlevelXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_ClO2, channel[i].DataItem) {
|
|
|
+ SaveliquidlevelXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_C2H4, channel[i].DataItem) {
|
|
|
+ SaveliquidlevelXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_C2H2, channel[i].DataItem) {
|
|
|
+ SaveliquidlevelXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_H2O, channel[i].DataItem) {
|
|
|
+ SaveliquidlevelXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_SO2, channel[i].DataItem) {
|
|
|
+ SaveliquidlevelXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_Cl2, channel[i].DataItem) {
|
|
|
+ SaveliquidlevelXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_O3, channel[i].DataItem) {
|
|
|
+ SaveliquidlevelXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_TVOC, channel[i].DataItem) {
|
|
|
+ SaveliquidlevelXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else {
|
|
|
+ SaveXlsx(params.RealName, timeinterval, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ } else if params.Serials != "" {
|
|
|
+ serials := strings.Split(params.Serials, ",")
|
|
|
+ var codestring []string
|
|
|
+ for i := 0; i < len(serials); i++ {
|
|
|
+ codestring = append(codestring, "'c"+serials[i]+"'")
|
|
|
+ }
|
|
|
+ where := " (a.CreateUserId=" + params.UserId + " or a.EquipMentId in (" + eids + ")) and a.DataItem in (" + ChannelItem_Report + ") and a.Code in(" + strings.Join(codestring, ",") + ")"
|
|
|
+ _, channel := svcDevice.GetChannelsList(-1, 8, where, Uid)
|
|
|
+ for i := 0; i < len(channel); i++ {
|
|
|
+ name := channel[i].Title
|
|
|
+ if name == "" {
|
|
|
+ name = channel[i].Code
|
|
|
+ }
|
|
|
+ xlssheetname := utils.ToStr(i+1) + "." + name
|
|
|
+ if DeviceItemContainint(ChannelItem_HaveO2, channel[i].DataItem) {
|
|
|
+ Saveo2Xlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_HaveCO2, channel[i].DataItem) {
|
|
|
+ Saveco2Xlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_Power, channel[i].DataItem) {
|
|
|
+ SavepowerXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_Temperature, channel[i].DataItem) {
|
|
|
+ SaveTemperatureXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_LiquidLevel, channel[i].DataItem) {
|
|
|
+ SaveliquidlevelXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else if DeviceItemContainint(ChannelItem_WindSpeed, channel[i].DataItem) {
|
|
|
+ SaveliquidlevelXlsx(params.RealName, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ } else {
|
|
|
+ SaveXlsx(params.RealName, timeinterval, xlssheetname, channel[i].Code, timerange, u, p, f, start, end)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ dirPath := "static/file/excel/report/" + params.AccCode
|
|
|
+ SaveDirectory(dirPath)
|
|
|
+ // Use timestamp to avoid collision if task id is not unique enough (though it is)
|
|
|
+ fileName := fmt.Sprintf("devicedata_%d.xlsx", taskId)
|
|
|
+ filePath := dirPath + "/" + fileName
|
|
|
+
|
|
|
+ err = f.Save(filePath)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ task.Status = 3
|
|
|
+ task.ErrorMessage = err.Error()
|
|
|
+ } else {
|
|
|
+ task.Status = 2
|
|
|
+ task.FilePath = filePath
|
|
|
+ task.FileName = fileName
|
|
|
+ }
|
|
|
+ task.EndTime = time.Now()
|
|
|
+ svc.UpdateTask(task)
|
|
|
+}
|
|
|
+
|
|
|
+func SaveTemperatureXlsx(realname, name, code, timerange, u, p string, f *xlsx.File, start, end int64) {
|
|
|
+ sheet, _ := f.AddSheet(name)
|
|
|
+ rowname := sheet.AddRow()
|
|
|
+ celln := rowname.AddCell()
|
|
|
+ celln.Value = "名称:" + realname
|
|
|
+
|
|
|
+ rowhead := sheet.AddRow()
|
|
|
+ _, cols, data := GetChannelInfov2(code, u, p, 1, start, end)
|
|
|
+ headsname := headname{
|
|
|
+ "时间",
|
|
|
+ "温度",
|
|
|
+ "电压",
|
|
|
+ "",
|
|
|
+ timerange,
|
|
|
+ "",
|
|
|
+ }
|
|
|
+ rowhead.WriteStruct(&headsname, -1)
|
|
|
+ indext := utils.SliceIndexOf(cols, "temperature")
|
|
|
+ indexv := utils.SliceIndexOf(cols, "voltage")
|
|
|
+ indextime := utils.SliceIndexOf(cols, "time")
|
|
|
+ indexstate := utils.SliceIndexOf(cols, "devicestate") //设备状态
|
|
|
+ for j, l := 0, len(data); j < l; j++ {
|
|
|
+ row := sheet.AddRow()
|
|
|
+ valuetime, _ := data[l-j-1][indextime].(json.Number).Float64()
|
|
|
+ // valuetime, _ := data[l-j-1][indextime].(float64)
|
|
|
+ tstr := ""
|
|
|
+ if indext > -1 {
|
|
|
+ tstr = utils.ToStr(data[l-j-1][indext])
|
|
|
+ bbstate := ""
|
|
|
+ if indexstate > -1 && utils.ToStr(data[l-j-1][indexstate]) == "2" {
|
|
|
+ bbstate = " (维修)"
|
|
|
+ } else if indexstate > -1 && utils.ToStr(data[l-j-1][indexstate]) == "3" {
|
|
|
+ bbstate = " (停用)"
|
|
|
+ } else if indexstate > -1 && utils.ToStr(data[l-j-1][indexstate]) == "4" {
|
|
|
+ bbstate = " (除霜)"
|
|
|
+ }
|
|
|
+ tstr += bbstate
|
|
|
+ }
|
|
|
+ vstr := ""
|
|
|
+ if indexv > -1 {
|
|
|
+ vstr = utils.ToStr(data[l-j-1][indexv])
|
|
|
+ }
|
|
|
+ testStruct := datas{
|
|
|
+ time.Unix(int64(valuetime), 0).Format("2006-01-02 15:04:05"),
|
|
|
+ tstr,
|
|
|
+ vstr,
|
|
|
+ "",
|
|
|
+ }
|
|
|
+ row.WriteStruct(&testStruct, -1)
|
|
|
+ }
|
|
|
+ sheet.Cols[0].Width = 20 //设置时间单元格的宽度
|
|
|
+}
|
|
|
+
|
|
|
+func SaveXlsx(realname, timeinterval, name, code, timerange, u, p string, f *xlsx.File, start, end int64) {
|
|
|
+ sheet, _ := f.AddSheet(name)
|
|
|
+ rowname := sheet.AddRow()
|
|
|
+ celln := rowname.AddCell()
|
|
|
+ celln.Value = "名称:" + realname
|
|
|
+
|
|
|
+ rowhead := sheet.AddRow()
|
|
|
+ _, cols, data := GetChannelInfov2(code, u, p, 1, start, end)
|
|
|
+ if timeinterval != "" {
|
|
|
+ _, cols, data = GetChannelInfov2with30m(timeinterval, code, u, p, 1, start, end)
|
|
|
+ }
|
|
|
+
|
|
|
+ headsname := headname{
|
|
|
+ "时间",
|
|
|
+ "温度",
|
|
|
+ "湿度",
|
|
|
+ "电压",
|
|
|
+ "",
|
|
|
+ timerange,
|
|
|
+ }
|
|
|
+ rowhead.WriteStruct(&headsname, -1)
|
|
|
+ indext := utils.SliceIndexOf(cols, "temperature")
|
|
|
+ indexh := utils.SliceIndexOf(cols, "humidity")
|
|
|
+ indexv := utils.SliceIndexOf(cols, "voltage")
|
|
|
+ indextime := utils.SliceIndexOf(cols, "time")
|
|
|
+ indexstate := utils.SliceIndexOf(cols, "devicestate") //设备状态
|
|
|
+ for j, l := 0, len(data); j < l; j++ {
|
|
|
+ row := sheet.AddRow()
|
|
|
+ valuetime, _ := data[l-j-1][indextime].(json.Number).Float64()
|
|
|
+ // valuetime, _ := data[l-j-1][indextime].(float64)
|
|
|
+ tstr := ""
|
|
|
+ if indext > -1 {
|
|
|
+ tstr = utils.ToStr(data[l-j-1][indext])
|
|
|
+ bbstate := ""
|
|
|
+ if indexstate > -1 && utils.ToStr(data[l-j-1][indexstate]) == "2" {
|
|
|
+ bbstate = " (维修)"
|
|
|
+ } else if indexstate > -1 && utils.ToStr(data[l-j-1][indexstate]) == "3" {
|
|
|
+ bbstate = " (停用)"
|
|
|
+ } else if indexstate > -1 && utils.ToStr(data[l-j-1][indexstate]) == "4" {
|
|
|
+ bbstate = " (除霜)"
|
|
|
+ }
|
|
|
+ tstr += bbstate
|
|
|
+ v2, _ := strconv.ParseFloat(tstr, 64)
|
|
|
+ v1 := Decimal(v2)
|
|
|
+ s1 := strconv.FormatFloat(v1, 'f', -2, 64)
|
|
|
+ tstr = s1
|
|
|
+ }
|
|
|
+ hstr := ""
|
|
|
+ if indexh > -1 {
|
|
|
+ hstr = utils.ToStr(data[l-j-1][indexh])
|
|
|
+ v2, _ := strconv.ParseFloat(hstr, 64)
|
|
|
+ v1 := Decimal(v2)
|
|
|
+ s1 := strconv.FormatFloat(v1, 'f', -2, 64)
|
|
|
+ hstr = s1
|
|
|
+ }
|
|
|
+ vstr := ""
|
|
|
+ if indexv > -1 {
|
|
|
+ vstr = utils.ToStr(data[l-j-1][indexv])
|
|
|
+ if vstr == "<nil>" {
|
|
|
+ vstr = "---"
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ testStruct := datas{
|
|
|
+ time.Unix(int64(valuetime), 0).Format("2006-01-02 15:04:05"),
|
|
|
+ tstr,
|
|
|
+ hstr,
|
|
|
+ vstr,
|
|
|
+ }
|
|
|
+ row.WriteStruct(&testStruct, -1)
|
|
|
+ }
|
|
|
+ sheet.Cols[0].Width = 20 //设置时间单元格的宽度
|
|
|
+}
|
|
|
+
|
|
|
+func Saveo2Xlsx(realname, name, code, timerange, u, p string, f *xlsx.File, start, end int64) {
|
|
|
+ sheet, _ := f.AddSheet(name)
|
|
|
+ rowname := sheet.AddRow()
|
|
|
+ celln := rowname.AddCell()
|
|
|
+ celln.Value = "名称:" + realname
|
|
|
+
|
|
|
+ rowhead := sheet.AddRow()
|
|
|
+ _, cols, data := GetChannelInfov2(code, u, p, 1, start, end)
|
|
|
+ headsname := headnameo2{
|
|
|
+ "时间",
|
|
|
+ "温度",
|
|
|
+ "湿度",
|
|
|
+ "电压",
|
|
|
+ "氧气",
|
|
|
+ "",
|
|
|
+ timerange,
|
|
|
+ }
|
|
|
+ rowhead.WriteStruct(&headsname, -1)
|
|
|
+ indext := utils.SliceIndexOf(cols, "temperature")
|
|
|
+ indexh := utils.SliceIndexOf(cols, "humidity")
|
|
|
+ indexv := utils.SliceIndexOf(cols, "voltage")
|
|
|
+ indextime := utils.SliceIndexOf(cols, "time")
|
|
|
+ indexo2 := utils.SliceIndexOf(cols, "o2")
|
|
|
+
|
|
|
+ for j, l := 0, len(data); j < l; j++ {
|
|
|
+ row := sheet.AddRow()
|
|
|
+ valuetime, _ := data[l-j-1][indextime].(json.Number).Float64()
|
|
|
+ //valuetime, _ := data[l-j-1][indextime].(float64)
|
|
|
+ tstr := ""
|
|
|
+ if indext > -1 {
|
|
|
+ tstr = utils.ToStr(data[l-j-1][indext])
|
|
|
+ }
|
|
|
+ hstr := ""
|
|
|
+ if indexh > -1 {
|
|
|
+ hstr = utils.ToStr(data[l-j-1][indexh])
|
|
|
+ }
|
|
|
+ vstr := ""
|
|
|
+ if indexv > -1 {
|
|
|
+ vstr = utils.ToStr(data[l-j-1][indexv])
|
|
|
+ }
|
|
|
+ o2str := ""
|
|
|
+ if indexo2 > -1 {
|
|
|
+ o2str = utils.ToStr(data[l-j-1][indexo2])
|
|
|
+ }
|
|
|
+
|
|
|
+ testStruct := dataso2{
|
|
|
+ time.Unix(int64(valuetime), 0).Format("2006-01-02 15:04:05"),
|
|
|
+ tstr,
|
|
|
+ hstr,
|
|
|
+ vstr,
|
|
|
+ o2str,
|
|
|
+ }
|
|
|
+ row.WriteStruct(&testStruct, -1)
|
|
|
+ }
|
|
|
+ sheet.Cols[0].Width = 20 //设置时间单元格的宽度
|
|
|
+}
|
|
|
+
|
|
|
+func Saveco2Xlsx(realname, name, code, timerange, u, p string, f *xlsx.File, start, end int64) {
|
|
|
+ sheet, _ := f.AddSheet(name)
|
|
|
+ rowname := sheet.AddRow()
|
|
|
+ celln := rowname.AddCell()
|
|
|
+ celln.Value = "名称:" + realname
|
|
|
+
|
|
|
+ rowhead := sheet.AddRow()
|
|
|
+ _, cols, data := GetChannelInfov2(code, u, p, 1, start, end)
|
|
|
+ headsname := headnameo2{
|
|
|
+ "时间",
|
|
|
+ "温度",
|
|
|
+ "湿度",
|
|
|
+ "电压",
|
|
|
+ "二氧化碳",
|
|
|
+ "",
|
|
|
+ timerange,
|
|
|
+ }
|
|
|
+ rowhead.WriteStruct(&headsname, -1)
|
|
|
+ indext := utils.SliceIndexOf(cols, "temperature")
|
|
|
+ indexh := utils.SliceIndexOf(cols, "humidity")
|
|
|
+ indexv := utils.SliceIndexOf(cols, "voltage")
|
|
|
+ indextime := utils.SliceIndexOf(cols, "time")
|
|
|
+ indexco2 := utils.SliceIndexOf(cols, "co2")
|
|
|
+ for j, l := 0, len(data); j < l; j++ {
|
|
|
+ row := sheet.AddRow()
|
|
|
+ valuetime, _ := data[l-j-1][indextime].(json.Number).Float64()
|
|
|
+ // valuetime, _ := data[l-j-1][indextime].(float64)
|
|
|
+ tstr := ""
|
|
|
+ if indext > -1 {
|
|
|
+ tstr = utils.ToStr(data[l-j-1][indext])
|
|
|
+ }
|
|
|
+ hstr := ""
|
|
|
+ if indexh > -1 {
|
|
|
+ hstr = utils.ToStr(data[l-j-1][indexh])
|
|
|
+ }
|
|
|
+ vstr := ""
|
|
|
+ if indexv > -1 {
|
|
|
+ vstr = utils.ToStr(data[l-j-1][indexv])
|
|
|
+ }
|
|
|
+ co2str := ""
|
|
|
+ if indexco2 > -1 {
|
|
|
+ co2str = utils.ToStr(data[l-j-1][indexco2])
|
|
|
+ }
|
|
|
+ testStruct := datasco2{
|
|
|
+ time.Unix(int64(valuetime), 0).Format("2006-01-02 15:04:05"),
|
|
|
+ tstr,
|
|
|
+ hstr,
|
|
|
+ vstr,
|
|
|
+ co2str,
|
|
|
+ }
|
|
|
+ row.WriteStruct(&testStruct, -1)
|
|
|
+ }
|
|
|
+ sheet.Cols[0].Width = 20 //设置时间单元格的宽度
|
|
|
+}
|
|
|
+
|
|
|
+func SavepowerXlsx(realname, name, code, timerange, u, p string, f *xlsx.File, start, end int64) {
|
|
|
+ sheet, _ := f.AddSheet(name)
|
|
|
+ rowname := sheet.AddRow()
|
|
|
+ celln := rowname.AddCell()
|
|
|
+ celln.Value = "名称:" + realname
|
|
|
+
|
|
|
+ rowhead := sheet.AddRow()
|
|
|
+ _, cols, data := GetChannelInfov2(code, u, p, 1, start, end)
|
|
|
+ headsname := headnamepower{
|
|
|
+ "时间",
|
|
|
+ "功率",
|
|
|
+ "电量",
|
|
|
+ "",
|
|
|
+ timerange,
|
|
|
+ }
|
|
|
+ rowhead.WriteStruct(&headsname, -1)
|
|
|
+ indexp := utils.SliceIndexOf(cols, "electricalpower")
|
|
|
+ indexs := utils.SliceIndexOf(cols, "electricalsupply")
|
|
|
+ indextime := utils.SliceIndexOf(cols, "time")
|
|
|
+ for j, l := 0, len(data); j < l; j++ {
|
|
|
+ row := sheet.AddRow()
|
|
|
+ valuetime, _ := data[l-j-1][indextime].(json.Number).Float64()
|
|
|
+ // valuetime, _ := data[l-j-1][indextime].(float64)
|
|
|
+
|
|
|
+ pstr := ""
|
|
|
+ if indexp > -1 {
|
|
|
+ pstr = utils.ToStr(data[l-j-1][indexp])
|
|
|
+ }
|
|
|
+ sstr := ""
|
|
|
+ if indexs > -1 {
|
|
|
+ sstr = utils.ToStr(data[l-j-1][indexs])
|
|
|
+ }
|
|
|
+ testStruct := dataspower{
|
|
|
+ time.Unix(int64(valuetime), 0).Format("2006-01-02 15:04:05"),
|
|
|
+ pstr,
|
|
|
+ sstr,
|
|
|
+ }
|
|
|
+ row.WriteStruct(&testStruct, -1)
|
|
|
+ }
|
|
|
+ sheet.Cols[0].Width = 20 //设置时间单元格的宽度
|
|
|
+}
|
|
|
+
|
|
|
+func SaveliquidlevelXlsx(realname, name, code, timerange, u, p string, f *xlsx.File, start, end int64) {
|
|
|
+ sheet, _ := f.AddSheet(name)
|
|
|
+ rowname := sheet.AddRow()
|
|
|
+ celln := rowname.AddCell()
|
|
|
+ celln.Value = "名称:" + realname
|
|
|
+
|
|
|
+ rowhead := sheet.AddRow()
|
|
|
+ _, cols, data := GetChannelInfov2(code, u, p, 1, start, end)
|
|
|
+ headsname := headnameliquidlevel{
|
|
|
+ "时间",
|
|
|
+ "温度",
|
|
|
+ "液位",
|
|
|
+ "",
|
|
|
+ timerange,
|
|
|
+ }
|
|
|
+ rowhead.WriteStruct(&headsname, -1)
|
|
|
+ indext := utils.SliceIndexOf(cols, "temperature")
|
|
|
+ indexl := utils.SliceIndexOf(cols, "liquidlevel")
|
|
|
+ indextime := utils.SliceIndexOf(cols, "time")
|
|
|
+ for j, l := 0, len(data); j < l; j++ {
|
|
|
+ row := sheet.AddRow()
|
|
|
+ valuetime, _ := data[l-j-1][indextime].(json.Number).Float64()
|
|
|
+ // valuetime, _ := data[l-j-1][indextime].(float64)
|
|
|
+
|
|
|
+ pstr := ""
|
|
|
+ if indext > -1 {
|
|
|
+ pstr = utils.ToStr(data[l-j-1][indext])
|
|
|
+ }
|
|
|
+ sstr := ""
|
|
|
+ if indexl > -1 {
|
|
|
+ sstr = utils.ToStr(data[l-j-1][indexl])
|
|
|
+ }
|
|
|
+ testStruct := dataspower{
|
|
|
+ time.Unix(int64(valuetime), 0).Format("2006-01-02 15:04:05"),
|
|
|
+ pstr,
|
|
|
+ sstr,
|
|
|
+ }
|
|
|
+ row.WriteStruct(&testStruct, -1)
|
|
|
+ }
|
|
|
+ sheet.Cols[0].Width = 20 //设置时间单元格的宽度
|
|
|
+}
|