package controllers import ( "Cold_Api/Nats" "Cold_Api/conf" "Cold_Api/controllers/lib" "Cold_Api/models/Admin" "Cold_Api/models/Device" "Cold_Api/models/System" "fmt" beego "github.com/beego/beego/v2/server/web" "github.com/signintech/gopdf" "github.com/xuri/excelize/v2" "math" "os" "strconv" "strings" "time" ) type DataController struct { beego.Controller } // 列表 - func (c *DataController) DataPlane() { // 验证登录 b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } c.TplName = "Data/DataPlane.html" } // 列表 - func (c *DataController) DataReal_html() { // 验证登录 b_, R_u := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } Name := c.GetString("Name") c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(R_u.Admin_uuid) c.Data["Name"] = Name c.TplName = "Data/DataReal.html" } // 列表 - func (c *DataController) DataRealCalss_html() { // 验证登录 b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } c.Data["Admin_r"] = admin_r Name := c.GetString("Name") c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(admin_r.Admin_uuid) c.Data["Name"] = Name c.TplName = "Data/DataRealCalss.html" } // 列表 - func (c *DataController) DataList_html() { // 验证登录 b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } c.Data["Admin_r"] = admin_r Name := c.GetString("Name") c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(admin_r.Admin_uuid) c.Data["Name"] = Name c.TplName = "Data/DataList.html" } // 列表 - func (c *DataController) DataLine_html() { // 验证登录 b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } c.Data["Admin_r"] = admin_r Name := c.GetString("Name") c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(admin_r.Admin_uuid) c.Data["Name"] = Name c.TplName = "Data/DataLine.html" } // 列表 - func (c *DataController) DataMap_html() { // 验证登录 b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } c.Data["Admin_r"] = admin_r Name := c.GetString("Name") c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(admin_r.Admin_uuid) c.Data["Name"] = Name c.TplName = "Data/DataMap.html" } func (c *DataController) Device_Sensor() { // 验证登录 b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } 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: 201, Msg: "err!"} 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() { // 验证登录 b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } type R_JSONS struct { //必须的大写开头 DeviceSensor_lite []Device.DeviceSensor Num int Page int Page_size int Pages []lib.Page_T } var r_jsons R_JSONS page, _ := c.GetInt("page") println(page) if page < 1 { page = 1 } page_z, _ := c.GetInt("page_z") println(page_z) if page_z == 0 { page_z = conf.Page_size } T_sn := c.GetString("T_sn") T_Calss_id, _ := c.GetInt("T_class_id") T_name := c.GetString("T_name") SN_type := c.GetString("SN_type") //c.Data["Class_List"] = Device.Read_Class_All_1() var cnt int64 r_jsons.DeviceSensor_lite, cnt = Device.Read_DeviceSensor_class_ALL_1(admin_r, T_Calss_id, page, page_z, T_sn, T_name, SN_type) page_size := math.Ceil(float64(cnt) / float64(page_z)) r_jsons.Page = int(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") println(page) if page < 1 { page = 1 } if page_z < 1 { page_z = 10 } 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_ Num int Page int Page_size int Pages []lib.Page_T } var r_jsons R_JSONS var cnt int r_jsons.DeviceSensor_data, cnt = Device.Read_DeviceSensorData_ById_List(SN, T_id, Time_start, Time_end, page, page_z) page_size := math.Ceil(float64(cnt) / float64(page_z)) r_jsons.Page = int(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_More() { page, _ := c.GetInt("page") page_z, _ := c.GetInt("page_z") println(page) if page < 1 { page = 1 } if page_z < 1 { page_z = 10 } 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 { //必须的大写开头 DeviceSensor_data []Device.DeviceData_ Num int Page int Page_size int Pages []lib.Page_T } var r_jsons R_JSONS var cnt int r_jsons.DeviceSensor_data, cnt = Device.Read_DeviceSensorData_By_T_snid_List(T_snid, Time_start, Time_end, page, page_z) page_size := math.Ceil(float64(cnt) / float64(page_z)) r_jsons.Page = int(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_Excel() { // 验证登录 b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } 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_ DeviceSensor_data, _ = Device.Read_DeviceSensorData_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(`{ "font":{ "color":"#a8f7ff", "size":11, "family":"arial" } }`) headStyleUpper, _ := f.NewStyle(`{ "font":{ "color":"#ff8585", "size":11, "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)+"]") f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t) if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) { f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh) } f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64)) if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) { f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64)) } f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time) if v.T_t < v.T_Tlower || v.T_rh < v.T_RHlower { f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower) } if v.T_t > v.T_Tupper || v.T_rh > v.T_RHupper { 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 := Nats.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx") if !is { c.Data["json"] = lib.JSONS{Code: 203, 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() { // 验证登录 b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } 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_ DeviceSensor_data, _ = Device.Read_DeviceSensorData_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(`{ "font":{ "color":"#a8f7ff", "size":11, "family":"arial" } }`) headStyleUpper, _ := f.NewStyle(`{ "font":{ "color":"#ff8585", "size":11, "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) if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) { f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh) } f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64)) if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) { f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64)) } f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time) if v.T_t < v.T_Tlower || v.T_rh < v.T_RHlower { f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower) } if v.T_t > v.T_Tupper || v.T_rh > v.T_RHupper { 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("cha_v:",cha_v) // ------- v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v))) //println("v.T_t:",v.T_t) fTime, _ := time.Parse("2006-1-2 15:04:05", v.T_time) fTime = fTime.Add(atime) v.T_time = fTime.Format("2006-1-2 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) if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) { f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh) } f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64)) if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) { f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64)) } f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time) if v.T_t < v.T_Tlower || v.T_rh < v.T_RHlower { f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower) } if v.T_t > v.T_Tupper || v.T_rh > v.T_RHupper { f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper) } // ------- v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v))) //println("v.T_t:",v.T_t) fTime, _ = time.Parse("2006-1-2 15:04:05", v.T_time) fTime = fTime.Add(atime) v.T_time = fTime.Format("2006-1-2 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) if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) { f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh) } f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64)) if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) { f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64)) } f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time) if v.T_t < v.T_Tlower || v.T_rh < v.T_RHlower { f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower) } if v.T_t > v.T_Tupper || v.T_rh > v.T_RHupper { f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper) } // ------- v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v))) //println("v.T_t:",v.T_t) fTime, _ = time.Parse("2006-1-2 15:04:05", v.T_time) fTime = fTime.Add(atime) v.T_time = fTime.Format("2006-1-2 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) if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) { f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh) } f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64)) if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) { f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64)) } f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time) if v.T_t < v.T_Tlower || v.T_rh < v.T_RHlower { f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower) } if v.T_t > v.T_Tupper || v.T_rh > v.T_RHupper { f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper) } // //// ------- //v.T_t = float32(lib.Decimal(float64(v.T_t+cha_v))) //println("v.T_t:",v.T_t) // //fTime,_ = time.Parse("2006-1-2 15:04:05", v.T_time) //fTime = fTime.Add(atime) //v.T_time = fTime.Format("2006-1-2 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) //if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) { // f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh) //} // //f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64)) //if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) { // f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64)) //} //f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time) // //if v.T_t < v.T_Tlower || v.T_rh < v.T_RHlower { // f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower) //} //if v.T_t > v.T_Tupper || v.T_rh > v.T_RHupper { // f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper) //} // ------- v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v))) //println("v.T_t:",v.T_t) fTime, _ = time.Parse("2006-1-2 15:04:05", v.T_time) fTime = fTime.Add(atime) v.T_time = fTime.Format("2006-1-2 15:04:05") } timeStr := time.Now().Format("20060102150405") // 保存文件 if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil { fmt.Println(err) } // 上传 OSS url, is := Nats.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx") if !is { c.Data["json"] = lib.JSONS{Code: 203, 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) DataScreen() { // 验证登录 b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } c.TplName = "Data/DataScreen.html" } // 大数据 数据 func (c *DataController) DataScreen_Data() { // 验证登录 b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } Device_YD_1_Count_use := 0 Device_YD_2_Count_use := 0 Data := make(map[string]interface{}) if admin_r.Admin_power == 10 { admin_r.Id = admin_r.Admin_master } // ----------------- 左上角 ----------------- //仓库端总数 Data["KF_Count"] = Device.Read_Device_ALL_T_Bind_Count(admin_r, "KF", 0) //运输端总数 Data["YD_Count"] = Device.Read_Device_ALL_T_Bind_Count(admin_r, "YD", 0) // 仓库报备数 Data["KF_Warning_Count"] = Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(admin_r, "KF") // 运输报警数 Data["YD_Warning_Count"] = Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(admin_r, "YD") // 仓库端分公司数据统计 分公司名 终端总数 报警设备数 设备报警率 var KF_list []map[string]interface{} Admin_maps := Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id) for _, v := range Admin_maps { Data_KF := make(map[string]interface{}) Data_KF["Name"] = v.Admin_name Device_Count := Device.Read_Device_ALL_T_Bind_Count(v, "KF", 0) Data_KF["Device_Count"] = Device_Count Warning_Count := Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "KF") Data_KF["Warning_Count"] = Warning_Count // 强制 报警数 不超过 设备数量 if Warning_Count > Device_Count { Warning_Count = Device_Count } //fmt.Println("Device_Count:",Device_Count,"Warning_Count:",Warning_Count) if Warning_Count == 0 || Device_Count == 0 { Data_KF["Ratio"] = 0 } else { Data_KF["Ratio"] = int((float32(Warning_Count) / float32(Device_Count)) * 100) } KF_list = append(KF_list, Data_KF) } // 运输报警数 Data["KF_list"] = KF_list // 运输端分公司数据统计 分公司名 终端总数 报警设备数 设备报警率 var YD_list []map[string]interface{} Admin_maps = Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id) for _, v := range Admin_maps { Data_YD := make(map[string]interface{}) Data_YD["Name"] = v.Admin_name Device_Count := Device.Read_Device_ALL_T_Bind_Count(v, "YD", 0) Data_YD["Device_Count"] = Device_Count Warning_Count := Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "YD") Data_YD["Warning_Count"] = Warning_Count //fmt.Println("Device_Count:",Device_Count,"Warning_Count:",Warning_Count) if Warning_Count == 0 || Device_Count == 0 { Data_YD["Ratio"] = 0 } else { Data_YD["Ratio"] = int((float32(Warning_Count) / float32(Device_Count)) * 100) } YD_list = append(YD_list, Data_YD) } // 运输报警数 Data["YD_list"] = YD_list // 分公司名 终端总数 报警设备数 设备报警率 var KF_YD_list []map[string]interface{} Admin_maps = Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id) for _, v := range Admin_maps { Data_KF_YD := make(map[string]interface{}) Data_KF_YD["Name"] = v.Admin_name Device_Count := Device.Read_Device_ALL_T_Bind_Count(v, "", 0) Data_KF_YD["Device_Count"] = Device_Count Warning_Count := Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "") Data_KF_YD["Warning_Count"] = Warning_Count //fmt.Println("Device_Count:",Device_Count,"Warning_Count:",Warning_Count) if Warning_Count == 0 || Device_Count == 0 { Data_KF_YD["Ratio"] = 0 } else { Data_KF_YD["Ratio"] = int((float32(Warning_Count) / float32(Device_Count)) * 100) } KF_YD_list = append(KF_YD_list, Data_KF_YD) } // 报警率排名 Data["Warning_KF_YD_list"] = KF_YD_list //每个时间段使用数量走势(物流曲线/药店曲线) // 年 Device_list := Device.Read_Device_ALL_bind(admin_r) var Sales_Year_z_list_1 [12]int var Sales_Year_z_list_2 [12]int for _, D_v := range Device_list { for _, v := range Device.Read_DeviceData_ById_Year_List(D_v.T_sn) { switch D_v.T_l_p { case 1: Sales_Year_z_list_1[lib.To_int(v[0])-1] += 1 break case 2: Sales_Year_z_list_2[lib.To_int(v[0])-1] += 1 break } } } Data["Sales_Year_z_list_1"] = Sales_Year_z_list_1 Data["Sales_Year_z_list_2"] = Sales_Year_z_list_2 // 月 currentTime := time.Now() Month_z := lib.GetYearMonthToDay(currentTime.Year(), int(currentTime.Month())) var Sales_Month_z_list_1 = make([]int, Month_z) var Sales_Month_z_list_2 = make([]int, Month_z) for _, D_v := range Device_list { for _, v := range Device.Read_DeviceData_ById_Month_List(D_v.T_sn) { switch D_v.T_l_p { case 1: Sales_Month_z_list_1[lib.To_int(v[0])-1] += 1 break case 2: Sales_Month_z_list_2[lib.To_int(v[0])-1] += 1 break } } } Data["Sales_Month_z_list_1"] = Sales_Month_z_list_1 Data["Sales_Month_z_list_2"] = Sales_Month_z_list_2 // 日 var Sales_Day_z_list_1 [24]int var Sales_Day_z_list_2 [24]int for _, D_v := range Device_list { for _, v := range Device.Read_DeviceSensorData_ById_Day_List(D_v.T_sn) { switch D_v.T_l_p { case 1: Sales_Day_z_list_1[lib.To_int(v[0])] += 1 break case 2: Sales_Day_z_list_2[lib.To_int(v[0])] += 1 break } } } Data["Sales_Day_z_list_1"] = Sales_Day_z_list_1 Data["Sales_Day_z_list_2"] = Sales_Day_z_list_2 // 物流端使用占比 var DY_pie_1 []map[string]interface{} Admin_maps = Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id) for _, Admin_maps_v := range Admin_maps { Day_x := 0 Device_l := Device.Read_Device_ALL_bind_T_l_p(Admin_maps_v, 1) if len(Device_l) == 0 { continue } for _, Device_list_v := range Device_l { // 今天 次数(每小时一次) if len(Device.Read_DeviceSensorData_ById_Day_List(Device_list_v.T_sn)) > 0 { Day_x += 1 } } Data_YD := make(map[string]interface{}) Data_YD["Name"] = Admin_maps_v.Admin_name Data_YD["Ratio"] = Day_x Device_YD_1_Count_use += Day_x // 统计 使用次数 DY_pie_1 = append(DY_pie_1, Data_YD) } Data["YD_pie_1"] = DY_pie_1 // 药店端使用占比 var DY_pie_2 []map[string]interface{} Admin_maps = Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id) for _, Admin_maps_v := range Admin_maps { Day_x := 0 Device_l := Device.Read_Device_ALL_bind_T_l_p(Admin_maps_v, 2) if len(Device_l) == 0 { continue } for _, Device_list_v := range Device_l { // 今天 次数(每小时一次) if len(Device.Read_DeviceSensorData_ById_Day_List(Device_list_v.T_sn)) > 0 { Day_x += 1 } } Data_YD := make(map[string]interface{}) Data_YD["Name"] = Admin_maps_v.Admin_name Data_YD["Ratio"] = Day_x Device_YD_1_Count_use += Day_x // 统计 使用次数 DY_pie_2 = append(DY_pie_2, Data_YD) } Data["YD_pie_2"] = DY_pie_2 // 运输端数据统计 var YD_1_2 = make(map[string]interface{}) Device_YD_1_Count := Device.Read_Device_ALL_T_Bind_Count(admin_r, "YD", 1) YD_1_2["Device_YD_1_Count"] = Device_YD_1_Count Device_YD_2_Count := Device.Read_Device_ALL_T_Bind_Count(admin_r, "YD", 2) YD_1_2["Device_YD_2_Count"] = Device_YD_2_Count YD_1_2["Device_YD_1_Count_use"] = Device_YD_1_Count_use YD_1_2["Device_YD_2_Count_use"] = Device_YD_2_Count_use Data["YD_1_2"] = YD_1_2 c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Data} c.ServeJSON() return } // 大数据平台 func (c *DataController) DataScreen_Map() { // 验证登录 b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } if admin_r.Admin_power == 10 { admin_r.Id = admin_r.Admin_master } data := Device.Read_DeviceSensor_Map_ALL_1(admin_r, 0, "", "", "YD") for i, v := range data { DeviceSensorData, is := Device.Read_DeviceSensorData_ById_New(v.T_sn, v.T_id) if !is { continue } data[i].T_t = DeviceSensorData.T_t data[i].T_rh = DeviceSensorData.T_rh data[i].T_Site = DeviceSensorData.T_Site data[i].T_Dattery = DeviceSensorData.T_Dattery data[i].T_time = DeviceSensorData.T_time } c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: data} 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) GROUP_BY_t_time := Device.Read_DeviceSensorData_List_GROUP_BY_t_time(SN, Time_start, Time_end) // 时间 MAP for _, vt := range GROUP_BY_t_time { tt := lib.To_string(vt[0]) r_jsons[tt] = R_JSONS{T_time: tt, T1: nil, T2: nil, T3: nil, T4: nil} } // 记录传感器 maps, num := Device.Read_DeviceSensorData_ById_List(SN, 1, Time_start, Time_end, 1, 9999) if num > 0 { for _, v_map := range maps { ws, ok := r_jsons[v_map.T_time] /*如果确定是真实的,则存在,否则不存在 */ if ok { ws.T1 = v_map r_jsons[v_map.T_time] = ws } } } maps, num = Device.Read_DeviceSensorData_ById_List(SN, 2, Time_start, Time_end, 1, 9999) if num > 0 { for _, v_map := range maps { ws, ok := r_jsons[v_map.T_time] /*如果确定是真实的,则存在,否则不存在 */ if ok { ws.T2 = v_map r_jsons[v_map.T_time] = ws } } } maps, num = Device.Read_DeviceSensorData_ById_List(SN, 3, Time_start, Time_end, 1, 9999) if num > 0 { for _, v_map := range maps { ws, ok := r_jsons[v_map.T_time] /*如果确定是真实的,则存在,否则不存在 */ if ok { ws.T3 = v_map r_jsons[v_map.T_time] = ws } } } maps, num = Device.Read_DeviceSensorData_ById_List(SN, 4, Time_start, Time_end, 1, 9999) if num > 0 { for _, v_map := range maps { ws, ok := r_jsons[v_map.T_time] /*如果确定是真实的,则存在,否则不存在 */ if ok { ws.T4 = v_map r_jsons[v_map.T_time] = ws } } } c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons} c.ServeJSON() return } // 列表 - 接口 func (c *DataController) Device_Sensor_Data_PDF() { // 验证登录 b_, user_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } 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_ DeviceSensor_data, _ = Device.Read_DeviceSensorData_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: 204, Msg: "ok!", Data: err} c.ServeJSON() return } err = pdf.SetFont("simsun", "", 24) if err != nil { c.Data["json"] = lib.JSONS{Code: 205, Msg: "ok!", Data: err} 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}) textw, _ := pdf.MeasureTextWidth(user_r.Admin_name) pdf.SetX((595 / 2) - (textw / 2)) pdf.SetY(40) pdf.Text(user_r.Admin_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: 206, Msg: "ok!", Data: err} c.ServeJSON() return } err = pdf.SetFont("wts", "", 12) if err != nil { c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err} c.ServeJSON() return } //fmt.Sprintf(" %.1f ", v.T_t) lib.RectFillColor(pdf, "历史数据["+Time_start+" / "+Time_end+"]", 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: 207, Msg: "ok!", Data: err} 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_Tlower, v.T_Tupper) T_Rlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_RHlower, v.T_RHupper) 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 } timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf" err = pdf.WritePdf(timeStr) if err != nil { c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err} c.ServeJSON() return } // 上传 OSS url, is := Nats.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr) if !is { c.Data["json"] = lib.JSONS{Code: 203, 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) Raw() { // 验证登录 b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey")) if !b_ { c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"} c.ServeJSON() return } T_SQL := c.GetString("T_SQL") T_SQL_ := strings.ToLower(T_SQL) if strings.Contains(T_SQL_, ";") || //strings.Contains(T_SQL, "Admin")|| //strings.Contains(T_SQL, "Device ")|| //strings.Contains(T_SQL, "DeviceParameter")|| //strings.Contains(T_SQL, "DeviceSensor")|| //strings.Contains(T_SQL, "DeviceSnOld")|| //strings.Contains(T_SQL, "DeviceTask")|| //strings.Contains(T_SQL, "DeviceWarning")|| strings.Contains(T_SQL, "Logs") || strings.Contains(T_SQL, "SqlLogs") || strings.Contains(T_SQL, "Tokey") || strings.Contains(T_SQL, "UserLogs") || strings.Contains(T_SQL_, "show") || strings.Contains(T_SQL_, "create") || strings.Contains(T_SQL_, "drop") || strings.Contains(T_SQL_, "desc") || strings.Contains(T_SQL_, "alter") || strings.Contains(T_SQL_, "insert") || strings.Contains(T_SQL_, "update") || strings.Contains(T_SQL_, "delete") { System.Add_SqlLogs(admin_r.Admin_uuid, "Err:"+admin_r.Admin_user, T_SQL) c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!", Data: admin_r.Admin_name + " :你的行为 也被记录"} c.ServeJSON() return } if //!strings.Contains(T_SQL, "Z_DeviceData_") || !strings.Contains(T_SQL_, "select") { System.Add_SqlLogs(admin_r.Admin_uuid, "Err:"+admin_r.Admin_user, T_SQL) c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!", Data: admin_r.Admin_name + " :你的行为 也被记录"} c.ServeJSON() return } System.Add_SqlLogs(admin_r.Admin_uuid, "ok", T_SQL) c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.Read_SqlRaw(T_SQL)} c.ServeJSON() return }