Browse Source

Update:优化数据展示-实时数据,正在监控的排在最前面,优化数据展示-导出pdf,最高温湿度,最低温湿度,平均温湿度根据设备属性展示

zoie 10 tháng trước cách đây
mục cha
commit
d11511c31e
3 tập tin đã thay đổi với 173 bổ sung18 xóa
  1. 163 13
      controllers/Data.go
  2. 1 0
      models/Account/Company.go
  3. 9 5
      models/Device/DeviceSensor.go

+ 163 - 13
controllers/Data.go

@@ -636,6 +636,51 @@ func (c *DataController) Device_Sensor_Data_PDF() {
 		c.ServeJSON()
 		return
 	}
+	//T_ist   // 温度   1开启   2关闭
+	//T_ish   // 湿度   1开启   2关闭
+	T_ist_list := make([]int, 0)
+	T_ish_list := make([]int, 0)
+	T_snid_list := strings.Split(strings.Trim(T_snid, "|"), "|")
+	for _, v := range T_snid_list {
+		sn_id := strings.Split(v, ",")
+		if len(sn_id) == 2 {
+			device, _ := Device.Read_Device_ByT_sn(sn_id[0])
+			T_ist_list = append(T_ist_list, device.T_ist)
+			T_ish_list = append(T_ish_list, device.T_ish)
+		}
+	}
+	istHasOne := false
+	istHasTwo := false
+	T_ist := 1
+	for _, v := range T_ist_list {
+		if v == 1 {
+			istHasOne = true
+		}
+		if v == 2 {
+			istHasTwo = true
+		}
+	}
+	// 全部都为2 则不显示温度
+	if !istHasOne && istHasTwo {
+		T_ist = 2
+	}
+
+	ishHasOne := false
+	ishHasTwo := false
+	T_ish := 1
+	for _, v := range T_ish_list {
+		if v == 1 {
+			ishHasOne = true
+		}
+		if v == 2 {
+			ishHasTwo = true
+		}
+	}
+	// 全部都为2 则不显示湿度
+	if !ishHasOne && ishHasTwo {
+		T_ish = 2
+	}
+
 	var DeviceSensor_data []Device.DeviceData_R
 
 	DeviceSensor_data, _ = Device.Read_DeviceData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999)
@@ -656,6 +701,99 @@ func (c *DataController) Device_Sensor_Data_PDF() {
 	//	return DeviceSensor_data[i].T_time > DeviceSensor_data[j].T_time
 	//})
 
+	// -------------------获取最高温湿度、最低温湿度、平均温湿度
+	// 最高温度、最低温度
+	var maxTemp, minTemp, maxRH, minRH float32
+	// 最高温度时间、最低温度时间
+	var maxTempTime, minTempTime, maxRHTime, minRHTime string
+	// 总温度
+	var totalTemp, totalRH float32
+	// 平均温度
+	var avgTemp, avgRH float32
+	var TempCount, RHCount int
+	if len(DeviceSensor_data) > 0 {
+		// 最高温度及时刻
+		firstTempFlag := false
+		//var maxTemp,minTemp float32
+		//var maxTempTime,minTempTime string
+		//maxTemp = DeviceSensor_data[0].T_t
+		//maxTempTime = DeviceSensor_data[0].T_time
+		//// 最低温度及时刻
+		//minTemp = DeviceSensor_data[0].T_t
+		//minTempTime = DeviceSensor_data[0].T_time
+
+		// 最高湿度度及时刻
+		firstRHFlag := false
+		//maxRH = DeviceSensor_data[0].T_rh
+		//maxRHTime = DeviceSensor_data[0].T_time
+		//// 最低湿度及时刻
+		//minRH = DeviceSensor_data[0].T_rh
+		//minRHTime = DeviceSensor_data[0].T_time
+
+		for _, data := range DeviceSensor_data {
+			if data.T_ist == 1 {
+				if firstTempFlag {
+					if data.T_t > maxTemp {
+						maxTemp = data.T_t
+						maxTempTime = data.T_time
+					}
+					if data.T_t < minTemp {
+						minTemp = data.T_t
+						minTempTime = data.T_time
+					}
+					totalTemp += data.T_t
+					TempCount++
+				} else {
+					maxTemp = data.T_t
+					maxTempTime = data.T_time
+					// 最低温度及时刻
+					minTemp = data.T_t
+					minTempTime = data.T_time
+					firstTempFlag = true
+					totalTemp += data.T_t
+					TempCount = 1
+				}
+
+			}
+
+			if data.T_ish == 1 {
+				if firstRHFlag {
+					if data.T_rh > maxRH {
+						maxRH = data.T_rh
+						maxRHTime = data.T_time
+					}
+					if data.T_rh < minRH {
+						minRH = data.T_rh
+						minRHTime = data.T_time
+					}
+					totalRH += data.T_rh
+					RHCount++
+				} else {
+					maxRH = data.T_rh
+					maxRHTime = data.T_time
+					// 最低温度及时刻
+					minRH = data.T_rh
+					minRHTime = data.T_time
+					firstRHFlag = true
+					totalRH += data.T_rh
+					RHCount = 1
+				}
+			}
+		}
+		if TempCount > 0 {
+			// 平均温度
+			avgTemp = totalTemp / float32(TempCount)
+		}
+		// 平均湿度
+		if RHCount > 0 {
+			avgRH = totalRH / float32(RHCount)
+		}
+	}
+	// -------------------获取最高温湿度、最低温湿度、平均温湿度结束
+	maxTempTime = maxTempTime
+	minTempTime = minTempTime
+	maxRHTime = maxRHTime
+	minRHTime = minRHTime
 	var err error
 	pdf := &gopdf.GoPdf{}
 	pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4
@@ -716,21 +854,33 @@ func (c *DataController) Device_Sensor_Data_PDF() {
 		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)
+	var y float64 = 120
+	if T_ist == 1 {
+		lib.RectFillColor(pdf, fmt.Sprintf("最高温度: %.1f ", maxTemp), 12, 22, y, 183, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+		lib.RectFillColor(pdf, fmt.Sprintf("最低温度: %.1f ", minTemp), 12, 205, y, 183, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+		lib.RectFillColor(pdf, fmt.Sprintf("平均温度: %.1f ", avgTemp), 12, 388, y, 184, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+		y += 20
+	}
+	if T_ish == 1 {
+		lib.RectFillColor(pdf, fmt.Sprintf("最高湿度: %.1f ", maxRH), 12, 22, y, 183, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+		lib.RectFillColor(pdf, fmt.Sprintf("最低湿度: %.1f ", minRH), 12, 205, y, 183, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+		lib.RectFillColor(pdf, fmt.Sprintf("平均湿度: %.1f ", avgRH), 12, 388, y, 184, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+		y += 20
+	}
+	y += 5
+	lib.RectFillColor(pdf, "序号", 12, 22, y, 30, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	lib.RectFillColor(pdf, "传感器名称", 12, 52, y, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	lib.RectFillColor(pdf, "温度℃", 12, 152, y, 50, 20, 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, 50, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-
-	lib.RectFillColor(pdf, "湿度%", 12, 202, 120, 50, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	lib.RectFillColor(pdf, "湿度%", 12, 202, y, 50, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
 
-	lib.RectFillColor(pdf, "温度范围", 12, 252, 120, 80, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	lib.RectFillColor(pdf, "湿度范围", 12, 332, 120, 80, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	lib.RectFillColor(pdf, "记录时间", 12, 412, 120, 120, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	lib.RectFillColor(pdf, "备注", 12, 532, 120, 40, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	lib.RectFillColor(pdf, "温度范围", 12, 252, y, 80, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	lib.RectFillColor(pdf, "湿度范围", 12, 332, y, 80, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	lib.RectFillColor(pdf, "记录时间", 12, 412, y, 120, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	lib.RectFillColor(pdf, "备注", 12, 532, y, 40, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
 
-	var y float64 = 140
+	y += 20
 
 	err = pdf.SetFont("wts", "", 10)
 	if err != nil {
@@ -910,7 +1060,7 @@ func Device_Sensor_Data_ChartShow_PDF1(companyName, T_snid, Time_start, Time_end
 		return
 	}
 
-	// -------------------获取最高温湿度、温蒂温湿度、平均温湿度
+	// -------------------获取最高温湿度、最低温湿度、平均温湿度
 	// 最高温度、最低温度
 	var maxTemp, minTemp float32
 	// 最高温度时间、最低温度时间
@@ -943,7 +1093,7 @@ func Device_Sensor_Data_ChartShow_PDF1(companyName, T_snid, Time_start, Time_end
 		// 平均湿度
 		//avgHumidity = totalHumidity / float32(len(DeviceSensor_data))
 	}
-	// -------------------获取最高温湿度、温蒂温湿度、平均温湿度结束
+	// -------------------获取最高温湿度、最低温湿度、平均温湿度结束
 
 	pdf := &gopdf.GoPdf{}
 	pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4

+ 1 - 0
models/Account/Company.go

@@ -562,6 +562,7 @@ func CompanyCall(CompanyList []Company, company Company_R) Company_R {
 		mi.T_warning = list[j].T_warning
 		mi.T_Charging = list[j].T_Charging
 		mi.T_key = list[j].T_key
+		mi.T_type = list[j].T_type
 		mi.Children = []Company_R{}
 		ms := CompanyCall(CompanyList, mi)
 		min = append(min, ms)

+ 9 - 5
models/Device/DeviceSensor.go

@@ -1004,9 +1004,9 @@ func Read_DeviceSensorManageList(admin_r *Account.Admin, bindSN []string, T_pid
 		sql_WHERE += " AND t_datashow =" + strconv.Itoa(T_datashow)
 	}
 
-	sql_ORDER := " ORDER BY ds.t_sort ASC,ds.t_id"
+	sql_ORDER := " ORDER BY ds.t_sort ASC,ds.t_id,ds.id"
 	if T_sort == 1 {
-		sql_ORDER = " ORDER BY ds.t_sort DESC,ds.t_id"
+		sql_ORDER = " ORDER BY ds.t_sort DESC,ds.t_id,ds.id"
 	}
 
 	// -------------
@@ -1109,27 +1109,31 @@ func Read_DeviceSensor_List_For_Data(bindSN []string, T_pid int, T_name string,
 		if offset > offset_z {
 			offset = offset_z
 		}
-		_, err = qs.SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+		_, err = qs.SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id", "Id").All(&r)
 		if err != nil {
 			logs.Error(lib.FuncName(), err)
 			return
 		}
 		var DeviceSensor_unusual []DeviceSensor_R
+		var DeviceSensor_monitor []DeviceSensor_R
 		for _, v := range r {
 			v_r := DeviceSensorToDeviceSensor_R(v)
 			data := v_r.T_DeviceSensorData
 			// 状态在监控中,温度或者湿度不在正常区间,排在最前面
-			if (data.T_t > data.T_tu || data.T_t < data.T_tl || data.T_rh > data.T_rhu || data.T_rh < data.T_rhl) && v.T_monitor == 1 && v_r.T_DeviceSensorParameter.T_free == 0 {
+			if (data.T_t > data.T_tu || data.T_t < data.T_tl || data.T_rh > data.T_rhu || data.T_rh < data.T_rhl) && v.T_monitor == 1 && v.T_link == 1 && v_r.T_DeviceSensorParameter.T_free == 0 {
 				DeviceSensor_unusual = append(DeviceSensor_unusual, v_r)
+			} else if v.T_monitor == 1 && v.T_link == 1 && v_r.T_DeviceSensorParameter.T_free == 0 {
+				DeviceSensor_monitor = append(DeviceSensor_monitor, v_r)
 			} else {
 				DeviceSensor_r = append(DeviceSensor_r, v_r)
 			}
 		}
+		DeviceSensor_unusual = append(DeviceSensor_unusual, DeviceSensor_monitor...)
 		DeviceSensor_unusual = append(DeviceSensor_unusual, DeviceSensor_r...)
 		return DeviceSensor_unusual[offset:offset_z], cnt
 	}
 
-	_, err = qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+	_, err = qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id", "Id").All(&r)
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return