Forráskód Böngészése

2023-09-25 优化图表展示pdf下载

zoie 1 éve
szülő
commit
3631e733f9

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 755 - 138
controllers/Data.go


+ 1 - 1
controllers/Device.go

@@ -113,7 +113,7 @@ func (c *DeviceController) Device_Add() {
 		T_pid:      c.T_pid,
 		T_sn:       T_sn,
 		T_protocol: 3,
-		T_monitor:  1, // 监控状态 已监控
+		T_monitor:  0, // 监控状态 已监控
 		T_State:    1, // 状态 正常
 		T_ist:      1, // 温度   1开启
 		T_ish:      1, // 湿度   1开启

+ 8 - 0
controllers/lib/lib.go

@@ -328,6 +328,14 @@ func To_string(value interface{}) string {
 	return key
 }
 
+func Float32_to_string(value *float32) string {
+	var key string
+	if value == nil {
+		return key
+	}
+	return fmt.Sprintf("%.1f", *value)
+}
+
 func Random(min, max int) int {
 	rand.Seed(time.Now().Unix()) //Seed生成的随机数
 	return rand.Intn(max-min) + min

+ 33 - 0
controllers/lib/libString.go

@@ -135,3 +135,36 @@ func RoundToDecimal(num float64, decimalPlaces int) float64 {
 	shift := math.Pow(10, float64(decimalPlaces))
 	return math.Round(num*shift) / shift
 }
+
+// 检查sn是否都相同
+// 2023103074298131,0|2023143741715643,0|
+func IsSNAllSame(T_snid string) (string, []int, bool) {
+
+	entries := strings.Split(strings.Trim(T_snid, "|"), "|")
+
+	if len(entries) == 1 {
+		fields := strings.Split(entries[0], ",")
+		if len(fields) == 2 {
+			return fields[0], []int{To_int(fields[1])}, true // 只有一个条目时,认为全相同
+		} else {
+			return "", []int{}, false
+		}
+	}
+
+	firstSN := ""
+	ids := []int{}
+	for _, entry := range entries {
+		fields := strings.Split(entry, ",")
+		if len(fields) == 2 {
+			currSN := fields[0]
+			ids = append(ids, To_int(fields[1]))
+			if firstSN == "" {
+				firstSN = currSN
+			} else if currSN != firstSN {
+				return "", []int{}, false // 发现不相同的 SN 值,直接返回 false
+			}
+		}
+	}
+
+	return firstSN, ids, true
+}

+ 1 - 1
models/Device/Device.go

@@ -36,7 +36,7 @@ type Device struct {
 	T_Dattery  int    `orm:"size(4);null"`             // 电量
 	T_Site     string `orm:"size(200);null"`           // GPS
 	T_monitor  int    `orm:"index;size(2);null"`       // 监控状态 0 未监控 1 监控  停止记录
-	T_online   int    `orm:"index;size(2);default(1)"` // 在线状态 0 未启用  1 在线  2 离线
+	T_online   int    `orm:"index;size(2);default(0)"` // 在线状态 0 未启用  1 在线  2 离线
 	T_online_s int    `orm:"index;size(2);default(0)"` // 在线状态-备用  0 未启用  1 在线  2 离线
 
 	// 硬件信息

+ 107 - 2
models/Device/DeviceData.go

@@ -58,6 +58,13 @@ type DeviceData_R struct {
 	T_remark string  // 备注
 }
 
+type DeviceData_Pdf struct {
+	T_time string  // sn
+	T_id1  *float32 // 传感器id1温度
+	T_id2  *float32 // 传感器id2温度
+
+}
+
 type DeviceData_BackUp struct {
 	T_sn   string
 	T_id   int    // 传感器id
@@ -296,7 +303,7 @@ func Read_DeviceData_ById_List(SN string, T_id int, Time_start_ string, Time_end
 	}
 	//fmt.Println("maps_z;",maps_z[0][0])
 	//t_tl,t_tu,t_rhl,t_rhu,
-	sql = "SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_" + SN + " WHERE " + sql_time + " t_id = " + strconv.Itoa(T_id) + " ORDER BY t_time1 DESC "
+	sql = "SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_" + SN + " WHERE " + sql_time + " t_id = " + strconv.Itoa(T_id) + " ORDER BY t_time1,t_id DESC "
 	if page_z != 9999 {
 		sql = sql + " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(page_z)
 	}
@@ -321,6 +328,104 @@ func Read_DeviceData_ById_List(SN string, T_id int, Time_start_ string, Time_end
 	return r, key
 }
 
+func Read_DeviceData_ByIds(SN string, ids []int, Time_start_ string, Time_end_ string, page int, page_z int) ([]DeviceData_R, int) {
+	o := orm.NewOrm()
+	var maps []DeviceData_
+	var maps_z []orm2.ParamsList
+	var r []DeviceData_R
+	var offset int
+	if page_z == 0 {
+		page_z = conf.Page_size
+	}
+
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = (page - 1) * page_z
+	}
+	sql_time := ""
+
+	if len(Time_start_) > 1 {
+		sql_time += " t_time >= '" + Time_start_ + "' AND "
+	}
+
+	if len(Time_end_) > 1 {
+		sql_time += " t_time <= '" + Time_end_ + "' AND "
+	}
+
+	sql := "SELECT COUNT(t_id) FROM z_device_data_" + SN + " WHERE " + sql_time + " t_id in (" + lib.IntListToDotStr(ids) + ")"
+	fmt.Println(sql)
+	_, err := o.Raw(sql).ValuesList(&maps_z)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return r, 0
+	}
+	if len(maps_z) == 0 {
+		return r, 0
+	}
+	//fmt.Println("maps_z;",maps_z[0][0])
+	//t_tl,t_tu,t_rhl,t_rhu,
+	sql = "SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_" + SN + " WHERE " + sql_time + " t_id in (" + lib.IntListToDotStr(ids) + ") ORDER BY t_time1,t_id DESC "
+	if page_z != 9999 {
+		sql = sql + " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(page_z)
+	}
+
+	fmt.Println(sql)
+	_, err = o.Raw(sql).QueryRows(&maps)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return r, 0
+	}
+
+	key, _ := strconv.Atoi(maps_z[0][0].(string))
+	device, err := Read_Device_ByT_sn(SN)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+	}
+	for _, v := range maps {
+		r = append(r, DeviceData_ToDeviceData_R(device, v))
+	}
+
+	return r, key
+}
+func Read_DeviceData_ByIds_ForPDF(SN string, ids []int, Time_start_ string, Time_end_ string) []DeviceData_Pdf {
+	o := orm.NewOrm()
+	var r []DeviceData_Pdf
+	if len(ids) == 0 || len(ids) > 2 {
+		return r
+	}
+
+	sql_time := ""
+
+	if len(Time_start_) > 1 {
+		sql_time += " t_time >= '" + Time_start_ + "' AND "
+	}
+
+	if len(Time_end_) > 1 {
+		sql_time += " t_time <= '" + Time_end_ + "' AND "
+	}
+
+	//fmt.Println("maps_z;",maps_z[0][0])
+	//t_tl,t_tu,t_rhl,t_rhu,
+
+	selectSql := ""
+	for i, v := range ids {
+		selectSql += fmt.Sprintf("MAX(CASE WHEN t_id = %d THEN t_t END) AS t_id%d,", v, i+1)
+	}
+	selectSql = strings.Trim(selectSql, ",")
+
+	sql := "SELECT DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time," + selectSql + " FROM z_device_data_" + SN + " WHERE " + sql_time + " t_id in (" + lib.IntListToDotStr(ids) + ") GROUP BY t_time ORDER BY t_time"
+
+	fmt.Println(sql)
+	_, err := o.Raw(sql).QueryRows(&r)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return r
+	}
+
+	return r
+}
+
 func Read_SqlRawL(T_SQL string, T_data []string) (string, []orm2.Params) {
 	o := orm.NewOrm()
 	var lists []orm2.Params
@@ -335,7 +440,7 @@ func Read_SqlRawL(T_SQL string, T_data []string) (string, []orm2.Params) {
 }
 
 func Read_DeviceData_By_T_snid_List(T_snid string, Time_start_ string, Time_end_ string, page int, page_z int) ([]DeviceData_R, int64) {
-	T_snid_list := strings.Split(T_snid, "|")
+	T_snid_list := strings.Split(strings.Trim(T_snid, "|"), "|")
 	var maps []DeviceData_R
 	var maps_num int64
 	var offset, offset_z int

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott