package controllers import ( "Cold_Api/Nats/NatsServer" "Cold_Api/conf" "Cold_Api/controllers/lib" "Cold_Api/logs" "Cold_Api/models/Account" "Cold_Api/models/Device" "fmt" beego "github.com/beego/beego/v2/server/web" "github.com/signintech/gopdf" "github.com/xuri/excelize/v2" "math" "os" "strconv" "time" ) type DataController struct { beego.Controller Admin_r Account.Admin // 登陆的用户 T_pid int // 公司id } func (c *DataController) Prepare() { GetCookie := c.Ctx.GetCookie("User_tokey") GetString := c.GetString("User_tokey") User_tokey := GetCookie if len(User_tokey) == 0 { User_tokey = GetString } if Account.Admin_r == nil { return } c.Admin_r = *Account.Admin_r T_pid := c.Admin_r.T_pid EntryPid, _ := Account.Redis_Tokey_T_pid_Get(User_tokey) if EntryPid > 0 { T_pid = EntryPid } c.T_pid = T_pid } // 获取传感器 func (c *DataController) Device_Sensor_Get() { T_sn := c.GetString("T_sn") T_id, _ := c.GetInt("T_id") //c.Data["Class_List"] = Device.Read_Class_All_1() DeviceSensor_r, err := Device.Read_DeviceSensor_ByTsn_Tid(T_sn, T_id) if err != nil { c.Data["json"] = lib.JSONS{Code: 202, Msg: "获取失败!"} c.ServeJSON() return } c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.DeviceSensorToDeviceSensor_R(DeviceSensor_r)} c.ServeJSON() return } // 传感器列表 func (c *DataController) Device_Sensor_List() { type R_JSONS struct { //必须的大写开头 DeviceSensor_lite []Device.DeviceSensor_R Num int Page int Page_size int Pages []lib.Page_T } var r_jsons R_JSONS page, _ := c.GetInt("page") if page < 1 { page = 1 } page_z, _ := c.GetInt("page_z") if page_z == 0 { page_z = conf.Page_size } T_Class_id, _ := c.GetInt("T_calssid") T_type, T_type_err := c.GetInt("T_type") if T_type_err != nil { T_type = -1 } T_name := c.GetString("T_name") // 数据展示页面 T_RealTime, T_RealTime_err := c.GetInt("T_RealTime") if T_RealTime_err != nil { T_RealTime = 0 } // 轨迹展示页面 T_MapShow, T_MapShow_err := c.GetInt("T_MapShow") if T_MapShow_err != nil { T_MapShow = 0 } var cnt int64 Device.Read_DeviceSensorParameter_All_Map("", 0) r_jsons.DeviceSensor_lite, cnt = Device.Read_DeviceSensor_List_For_Data(c.T_pid, T_name, T_Class_id, T_type, T_RealTime, T_MapShow, page, page_z) page_size := math.Ceil(float64(cnt) / float64(page_z)) r_jsons.Page = page r_jsons.Page_size = int(page_size) r_jsons.Pages = lib.Func_page(int64(page), int64(page_size)) r_jsons.Num = int(cnt) c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons} c.ServeJSON() return } // 传感器数据列表 func (c *DataController) Device_Sensor_Data() { page, _ := c.GetInt("page") page_z, _ := c.GetInt("page_z") T_id, _ := c.GetInt("T_id") SN := c.GetString("T_sn") Time_start := c.GetString("Time_start") Time_end := c.GetString("Time_end") type R_JSONS struct { //必须的大写开头 DeviceSensor_data []Device.DeviceData_R Num int Page int Page_size int Pages []lib.Page_T } var r_jsons R_JSONS var cnt int Device.Read_DeviceSensorParameter_All_Map(SN, T_id) r_jsons.DeviceSensor_data, cnt = Device.Read_DeviceData_ById_List(SN, T_id, Time_start, Time_end, page, page_z) page_size := math.Ceil(float64(cnt) / float64(page_z)) r_jsons.Page = page r_jsons.Page_size = int(page_size) r_jsons.Pages = lib.Func_page(int64(page), int64(page_size)) r_jsons.Num = cnt c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons} c.ServeJSON() return } // 设备数据 func (c *DataController) Device_Sensor_Data_More() { page, _ := c.GetInt("page") if page < 1 { page = 1 } page_z, _ := c.GetInt("page_z") if page_z < 1 { page_z = conf.Page_size } T_snid := c.GetString("T_snid") Time_start := c.GetString("Time_start") Time_end := c.GetString("Time_end") if len(T_snid) < 10 { c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"} c.ServeJSON() return } type R_JSONS struct { //必须的大写开头 Data []Device.DeviceData_R Num int64 Page int Page_size int } var r_jsons R_JSONS r_jsons.Data, r_jsons.Num = Device.Read_DeviceData_By_T_snid_List(T_snid, Time_start, Time_end, page, page_z) r_jsons.Page = page r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z))) c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons} c.ServeJSON() return } // ------------------------------------- // 导出传感器数据列表 func (c *DataController) Device_Sensor_Data_Excel() { T_snid := c.GetString("T_snid") Time_start := c.GetString("Time_start") Time_end := c.GetString("Time_end") if len(T_snid) < 10 { c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"} c.ServeJSON() return } var DeviceSensor_data []Device.DeviceData_R DeviceSensor_data, _ = Device.Read_DeviceData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999) f := excelize.NewFile() // 设置单元格的值 // 这里设置表头 f.SetCellValue("Sheet1", "A1", "编号") f.SetCellValue("Sheet1", "B1", "传感器名称") f.SetCellValue("Sheet1", "C1", "温度℃") f.SetCellValue("Sheet1", "D1", "湿度%") f.SetCellValue("Sheet1", "E1", "温度范围 ℃") f.SetCellValue("Sheet1", "F1", "湿度范围 %") f.SetCellValue("Sheet1", "G1", "记录时间") // 设置列宽 f.SetColWidth("Sheet1", "A", "A", 10) f.SetColWidth("Sheet1", "B", "B", 15) f.SetColWidth("Sheet1", "C", "D", 10) f.SetColWidth("Sheet1", "E", "F", 15) f.SetColWidth("Sheet1", "G", "G", 22) line := 1 headStyleLower, _ := f.NewStyle( &excelize.Style{ Font: &excelize.Font{Size: 11, Color: "#ff8585", Family: "arial"}, }) headStyleUpper, _ := f.NewStyle( &excelize.Style{ Font: &excelize.Font{Size: 11, Color: "#ff8585", Family: "arial"}, }) // 循环写入数据 for _, v := range DeviceSensor_data { line++ f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1) f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]") if v.T_ist == 1 { f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t) f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_tl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_tu), 'f', 2, 64)) if v.T_t < v.T_tl || v.T_t > v.T_tu { f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower) } } if v.T_ish == 1 { f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh) f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_rhl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_rhu), 'f', 2, 64)) if v.T_rh < v.T_rhl || v.T_rh > v.T_rhu { f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper) } } f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time) //if v.T_ist == 1 && (v.T_t < v.T_tl || v.T_t > v.T_tu) { // f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower) //} //if v.T_ish == 1 && (v.T_rh < v.T_rhl || v.T_rh > v.T_rhu) { // f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper) //} } timeStr := time.Now().Format("20060102150405") // 保存文件 if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil { fmt.Println(err) } // 上传 OSS url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx") if !is { c.Data["json"] = lib.JSONS{Code: 202, Msg: "oss!"} c.ServeJSON() return } //删除目录 err := os.Remove("ofile/" + timeStr + ".xlsx") if err != nil { fmt.Println(err) } c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url} c.ServeJSON() return } // 列表 - 接口 func (c *DataController) Device_Sensor_Data_Excel_m() { T_snid := c.GetString("T_snid") Time_start := c.GetString("Time_start") Time_end := c.GetString("Time_end") t_x, _ := c.GetInt("t_x") if len(T_snid) < 10 { c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"} c.ServeJSON() return } var DeviceSensor_data []Device.DeviceData_R DeviceSensor_data, _ = Device.Read_DeviceData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999) f := excelize.NewFile() // 设置单元格的值 // 这里设置表头 f.SetCellValue("Sheet1", "A1", "编号") f.SetCellValue("Sheet1", "B1", "传感器名称") f.SetCellValue("Sheet1", "C1", "温度℃") f.SetCellValue("Sheet1", "D1", "湿度%") f.SetCellValue("Sheet1", "E1", "温度范围 ℃") f.SetCellValue("Sheet1", "F1", "湿度范围 %") f.SetCellValue("Sheet1", "G1", "记录时间") // 设置列宽 f.SetColWidth("Sheet1", "A", "A", 10) f.SetColWidth("Sheet1", "B", "B", 15) f.SetColWidth("Sheet1", "C", "D", 10) f.SetColWidth("Sheet1", "E", "F", 15) f.SetColWidth("Sheet1", "G", "G", 22) line := 1 headStyleLower, _ := f.NewStyle( &excelize.Style{ Font: &excelize.Font{Size: 11, Color: "#a8f7ff", Family: "arial"}, }) headStyleUpper, _ := f.NewStyle( &excelize.Style{ Font: &excelize.Font{Size: 11, Color: "#ff8585", Family: "arial"}, }) atime, _ := time.ParseDuration("-1m") // Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". // 循环写入数据 for v_i, v := range DeviceSensor_data { line++ f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1) f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]") f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t) f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh) f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_tl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_tu), 'f', 2, 64)) f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_rhl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_rhu), 'f', 2, 64)) f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time) if v.T_t < v.T_tl || v.T_t > v.T_tu { f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower) } if v.T_rh < v.T_rhl || v.T_rh > v.T_rhu { f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper) } if len(DeviceSensor_data)-1 == v_i { break } cha_v := ((DeviceSensor_data[v_i+1].T_t - v.T_t) / 3) println("t_x:", t_x) for i := 0; i < t_x; i++ { println("// -------", i) v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v))) fTime, _ := time.Parse("2006-01-02 15:04:05", v.T_time) fTime = fTime.Add(atime) v.T_time = fTime.Format("2006-01-02 15:04:05") line++ f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1) f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]") f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t) f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh) f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_tl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_tu), 'f', 2, 64)) f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_rhl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_rhu), 'f', 2, 64)) f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time) if v.T_t < v.T_tl || v.T_t > v.T_tu { f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower) } if v.T_rh < v.T_rhl || v.T_rh > v.T_rhu { f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper) } } } timeStr := time.Now().Format("20060102150405") // 保存文件 if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil { fmt.Println(err) } // 上传 OSS url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx") if !is { c.Data["json"] = lib.JSONS{Code: 202, Msg: "oss!"} c.ServeJSON() return } //删除目录 //err := os.Remove("ofile/" + timeStr + ".xlsx") //if err != nil { // fmt.Println(err) //} c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url} c.ServeJSON() return } // 小程序 - 打印 func (c *DataController) DeviceSensor_Data_Print() { SN := c.GetString("T_sn") Time_start := c.GetString("Time_start") Time_end := c.GetString("Time_end") type R_JSONS struct { //必须的大写开头 T_time string T1 interface{} T2 interface{} T3 interface{} T4 interface{} } r_jsons := make(map[string]R_JSONS) type JSONS struct { //必须的大写开头 Code int16 Msg string DeviceSensorNum int DeviceSensor Device.DeviceSensor_Applet AdminNane string Data interface{} // 泛型 } GROUP_BY_t_time := Device.Read_DeviceData_List_GROUP_BY_t_time(SN, Time_start, Time_end) // 时间 MAP for _, vt := range GROUP_BY_t_time { stamp, _ := time.Parse("2006-1-02 15:04:05", lib.To_string(vt[0])) T_time := stamp.Format("2006-01-02 15:04:05") r_jsons[T_time] = R_JSONS{T_time: T_time, T1: nil, T2: nil, T3: nil, T4: nil} } dsList := Device.Read_DeviceSensor_List_T_sn_T_datashow(SN) if len(dsList) == 0 { c.Data["json"] = JSONS{Code: 200, Msg: "ok!", DeviceSensorNum: len(dsList), Data: r_jsons} c.ServeJSON() return } company, _ := Account.Read_Company_ById(c.T_pid) for i, v := range dsList { if i >= 4 { break } // 记录传感器 maps, num := Device.Read_DeviceData_ById_List(SN, v.T_id, Time_start, Time_end, 1, 9999) if num > 0 { for _, v_map := range maps { ws, ok := r_jsons[v_map.T_time] if ok { switch i { case 0: ws.T1 = v_map case 1: ws.T2 = v_map case 2: ws.T3 = v_map case 3: ws.T4 = v_map } r_jsons[v_map.T_time] = ws } } } } c.Data["json"] = JSONS{Code: 200, Msg: "ok!", DeviceSensorNum: len(dsList), DeviceSensor: Device.DeviceSensorToDeviceSensor_Applet(dsList[0]), AdminNane: company.T_name, Data: r_jsons} c.ServeJSON() return } // 列表 - 接口 func (c *DataController) Device_Sensor_Data_PDF() { T_snid := c.GetString("T_snid") Time_start := c.GetString("Time_start") Time_end := c.GetString("Time_end") if len(T_snid) < 10 { c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_snid Err!"} c.ServeJSON() return } var DeviceSensor_data []Device.DeviceData_R DeviceSensor_data, _ = Device.Read_DeviceData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999) var err error pdf := &gopdf.GoPdf{} pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4 //err = GetFont(pdf, "LiberationSerif-Regular.ttf") //if err != nil { // log.Fatalln(err) //} //err = pdf.SetFont("Ubuntu-L", "", 14) //if err != nil { // log.Fatalln(err) //} err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf") if err != nil { c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()} c.ServeJSON() return } err = pdf.SetFont("simsun", "", 24) if err != nil { c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()} c.ServeJSON() return } pdf.SetGrayFill(0.5) pdf.SetMargins(0, 20, 0, 20) pdf.AddPage() //use path //pdf.Image("logo.png", 100, 50, &gopdf.Rect{W: 50, H: 50}) company, _ := Account.Read_Company_ById(c.T_pid) textw, _ := pdf.MeasureTextWidth(company.T_name) pdf.SetX((595 / 2) - (textw / 2)) pdf.SetY(40) pdf.Text(company.T_name) // 线 pdf.SetLineWidth(2) pdf.SetLineType("dashed") pdf.Line(10, 60, 585, 60) err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf") if err != nil { c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()} c.ServeJSON() return } err = pdf.SetFont("wts", "", 12) if err != nil { c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()} c.ServeJSON() return } var s_time, e_time string if len(DeviceSensor_data) > 0 { s_time = fmt.Sprintf("%s", DeviceSensor_data[0].T_time) e_time = fmt.Sprintf("%s", DeviceSensor_data[len(DeviceSensor_data)-1].T_time) } //fmt.Sprintf(" %.1f ", v.T_t) lib.RectFillColor(pdf, "历史数据["+e_time+" / "+s_time+"]", 14, 22, 80, 550, 40, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "序号", 12, 22, 120, 30, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "传感器名称", 12, 52, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "温度℃", 12, 152, 120, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "湿度%", 12, 212, 120, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "温度范围", 12, 272, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "湿度范围", 12, 362, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "记录时间", 12, 452, 120, 120, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) var y float64 = 140 err = pdf.SetFont("wts", "", 10) if err != nil { c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()} c.ServeJSON() return } for i, v := range DeviceSensor_data { text := fmt.Sprintf(" %d ", i+1) var textH float64 = 25 // if text height is 25px. pdf.SetNewY(y, textH) y = pdf.GetY() //pdf.SetX(x) // must after pdf.SetNewY() called. //err = pdf.Text(text) //if err != nil { // log.Fatalln(err) //} T_t := fmt.Sprintf(" %.1f ", v.T_t) T_rh := fmt.Sprintf(" %.1f ", v.T_rh) T_Tlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_tl, v.T_tu) T_Rlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_rhl, v.T_rhu) T_time := fmt.Sprintf("%s", v.T_time) //if user_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD") { // T_rh = "-" // T_Rlu = "-" //} if v.T_ist == 1 { lib.RectFillColor(pdf, T_t, 10, 152, y, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, T_Tlu, 10, 272, y, 90, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) } else { lib.RectFillColor(pdf, "", 10, 152, y, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "", 10, 272, y, 90, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) } if v.T_ish == 1 { lib.RectFillColor(pdf, T_rh, 10, 212, y, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, T_Rlu, 10, 362, y, 90, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) } else { lib.RectFillColor(pdf, "", 10, 212, y, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "", 10, 362, y, 90, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) } lib.RectFillColor(pdf, text, 10, 22, y, 30, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, v.T_name, 10, 52, y, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, T_time, 10, 452, y, 120, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) y += 20 } timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf" err = pdf.WritePdf(timeStr) if err != nil { c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()} c.ServeJSON() return } // 上传 OSS url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr) if !is { c.Data["json"] = lib.JSONS{Code: 202, Msg: "oss!"} c.ServeJSON() return } //删除目录 err = os.Remove(timeStr) if err != nil { fmt.Println(err) } c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url} c.ServeJSON() return } // 数据备份 func (c *DataController) Device_Sensor_Data_BackUp() { page, _ := c.GetInt("page") if page < 1 { page = 1 } page_z, _ := c.GetInt("page_z") if page_z < 1 { page_z = conf.Page_size } T_snid := c.GetString("T_snid") Time_start := c.GetString("Time_start") Time_end := c.GetString("Time_end") if len(T_snid) < 10 { c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_snid Err!"} c.ServeJSON() return } if _, is := lib.DateStrToDate(Time_start); !is { c.Data["json"] = lib.JSONS{Code: 202, Msg: "日期格式错误!"} c.ServeJSON() return } if _, is := lib.DateStrToDate(Time_end); !is { c.Data["json"] = lib.JSONS{Code: 202, Msg: "日期格式错误!"} c.ServeJSON() return } Time_start += " 00:00:00" Time_end += " 23:59:59" var r_jsons lib.R_JSONS r_jsons.Data, r_jsons.Num = Device.Read_DeviceData_BackUp_List(T_snid, Time_start, Time_end, page, page_z) r_jsons.Page = page r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z))) c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons} c.ServeJSON() return } // 数据备份pdf func (c *DataController) Device_Sensor_Data_BackUp_PDF() { T_sn := c.GetString("T_sn") T_id, _ := c.GetInt("T_id") T_date := c.GetString("T_date") T_snid := fmt.Sprintf("%s,%d", T_sn, T_id) date, is := lib.DateStrToDate(T_date) if !is { c.Data["json"] = lib.JSONS{Code: 202, Msg: "日期格式错误!"} c.ServeJSON() return } Time_start := T_date + " 00:00:00" Time_end := T_date + " 23:59:59" var DeviceSensor_data []Device.DeviceData_R DeviceSensor_data, _ = Device.Read_DeviceData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999) var err error pdf := &gopdf.GoPdf{} pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4 //err = GetFont(pdf, "LiberationSerif-Regular.ttf") //if err != nil { // log.Fatalln(err) //} //err = pdf.SetFont("Ubuntu-L", "", 14) //if err != nil { // log.Fatalln(err) //} err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf") if err != nil { c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()} c.ServeJSON() return } err = pdf.SetFont("simsun", "", 24) if err != nil { c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()} c.ServeJSON() return } pdf.SetGrayFill(0.5) pdf.SetMargins(0, 20, 0, 20) pdf.AddPage() //use path //pdf.Image("logo.png", 100, 50, &gopdf.Rect{W: 50, H: 50}) company, _ := Account.Read_Company_ById(c.T_pid) textw, _ := pdf.MeasureTextWidth(company.T_name) pdf.SetX((595 / 2) - (textw / 2)) pdf.SetY(40) pdf.Text(company.T_name) // 线 pdf.SetLineWidth(2) pdf.SetLineType("dashed") pdf.Line(10, 60, 585, 60) err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf") if err != nil { c.Data["json"] = lib.JSONS{Code: 202, Msg: "ok!", Data: err} c.ServeJSON() return } err = pdf.SetFont("wts", "", 12) if err != nil { c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()} c.ServeJSON() return } var s_time, e_time string if len(DeviceSensor_data) > 0 { s_time = fmt.Sprintf("%s", DeviceSensor_data[0].T_time) e_time = fmt.Sprintf("%s", DeviceSensor_data[len(DeviceSensor_data)-1].T_time) } //fmt.Sprintf(" %.1f ", v.T_t) lib.RectFillColor(pdf, "历史数据["+e_time+" / "+s_time+"]", 14, 22, 80, 550, 40, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "序号", 12, 22, 120, 30, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "传感器名称", 12, 52, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "温度℃", 12, 152, 120, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "湿度%", 12, 212, 120, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "温度范围", 12, 272, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "湿度范围", 12, 362, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, "记录时间", 12, 452, 120, 120, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) var y float64 = 140 err = pdf.SetFont("wts", "", 10) if err != nil { c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()} c.ServeJSON() return } for i, v := range DeviceSensor_data { text := fmt.Sprintf(" %d ", i+1) var textH float64 = 25 // if text height is 25px. pdf.SetNewY(y, textH) y = pdf.GetY() //pdf.SetX(x) // must after pdf.SetNewY() called. //err = pdf.Text(text) //if err != nil { // log.Fatalln(err) //} T_t := fmt.Sprintf(" %.1f ", v.T_t) T_rh := fmt.Sprintf(" %.1f ", v.T_rh) T_Tlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_tl, v.T_tu) T_Rlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_rhl, v.T_rhu) T_time := fmt.Sprintf("%s", v.T_time) //if user_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD") { // T_rh = "-" // T_Rlu = "-" //} lib.RectFillColor(pdf, text, 10, 22, y, 30, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, v.T_name, 10, 52, y, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, T_t, 10, 152, y, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, T_rh, 10, 212, y, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, T_Tlu, 10, 272, y, 90, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, T_Rlu, 10, 362, y, 90, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) lib.RectFillColor(pdf, T_time, 10, 452, y, 120, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle) y += 20 } deviceSensor, _ := Device.Read_DeviceSensor_ByT_sn(T_sn, T_id) rand_x := int64(lib.Random(0, 10000)) filenameStr := fmt.Sprintf("backup/sn/%s_%s(%s).pdf", lib.GetRandstring(8, "0123456789", rand_x), deviceSensor.T_name, date.Format("2006-01-02")) err = pdf.WritePdf(filenameStr) if err != nil { c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()} c.ServeJSON() return } // 上传 OSS url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+filenameStr, filenameStr) if !is { c.Data["json"] = lib.JSONS{Code: 202, Msg: "oss!"} c.ServeJSON() return } //删除目录 err = os.Remove(filenameStr) if err != nil { logs.Error(lib.FuncName(), err) } c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url} c.ServeJSON() return }