Browse Source

add:传感器数据,增加备注

zoie 1 year ago
parent
commit
ff7f015b06

+ 19 - 18
controllers/Data.go

@@ -217,12 +217,14 @@ func (c *DataController) Device_Sensor_Data_Excel() {
 	f.SetCellValue("Sheet1", "E1", "温度范围 ℃")
 	f.SetCellValue("Sheet1", "E1", "温度范围 ℃")
 	f.SetCellValue("Sheet1", "F1", "湿度范围 %")
 	f.SetCellValue("Sheet1", "F1", "湿度范围 %")
 	f.SetCellValue("Sheet1", "G1", "记录时间")
 	f.SetCellValue("Sheet1", "G1", "记录时间")
+	f.SetCellValue("Sheet1", "H1", "备注")
 	// 设置列宽
 	// 设置列宽
 	f.SetColWidth("Sheet1", "A", "A", 10)
 	f.SetColWidth("Sheet1", "A", "A", 10)
 	f.SetColWidth("Sheet1", "B", "B", 15)
 	f.SetColWidth("Sheet1", "B", "B", 15)
 	f.SetColWidth("Sheet1", "C", "D", 10)
 	f.SetColWidth("Sheet1", "C", "D", 10)
 	f.SetColWidth("Sheet1", "E", "F", 15)
 	f.SetColWidth("Sheet1", "E", "F", 15)
 	f.SetColWidth("Sheet1", "G", "G", 22)
 	f.SetColWidth("Sheet1", "G", "G", 22)
+	f.SetColWidth("Sheet1", "H", "H", 22)
 
 
 	line := 1
 	line := 1
 
 
@@ -258,6 +260,7 @@ func (c *DataController) Device_Sensor_Data_Excel() {
 		}
 		}
 
 
 		f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time)
 		f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time)
+		f.SetCellValue("Sheet1", fmt.Sprintf("H%d", line), v.T_remark)
 		//if v.T_ist == 1 && (v.T_t < v.T_tl || v.T_t > v.T_tu) {
 		//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)
 		//	f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower)
 		//}
 		//}
@@ -566,13 +569,14 @@ func (c *DataController) Device_Sensor_Data_PDF() {
 
 
 	lib.RectFillColor(pdf, "序号", 12, 22, 120, 30, 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, 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, 152, 120, 50, 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, 202, 120, 50, 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)
+	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)
 
 
 	var y float64 = 140
 	var y float64 = 140
 
 
@@ -598,30 +602,27 @@ func (c *DataController) Device_Sensor_Data_PDF() {
 		T_Tlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_tl, v.T_tu)
 		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_Rlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_rhl, v.T_rhu)
 		T_time := fmt.Sprintf("%s", v.T_time)
 		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 {
 		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)
+			lib.RectFillColor(pdf, T_t, 10, 152, y, 50, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+			lib.RectFillColor(pdf, T_Tlu, 10, 252, y, 80, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
 		} else {
 		} 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)
+			lib.RectFillColor(pdf, "", 10, 152, y, 50, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+			lib.RectFillColor(pdf, "", 10, 252, y, 80, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
 		}
 		}
 		if v.T_ish == 1 {
 		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)
+			lib.RectFillColor(pdf, T_rh, 10, 202, y, 50, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+			lib.RectFillColor(pdf, T_Rlu, 10, 332, y, 80, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
 		} else {
 		} 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, "", 10, 202, y, 50, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+			lib.RectFillColor(pdf, "", 10, 332, y, 80, 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, 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, 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)
+		lib.RectFillColor(pdf, T_time, 10, 412, y, 120, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+		lib.RectFillColor(pdf, v.T_remark, 10, 532, y, 40, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
 		y += 20
 		y += 20
 	}
 	}
 	timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf"
 	timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf"

+ 1 - 1
controllers/User.go

@@ -59,7 +59,7 @@ func (c *UserController) User_WxQRCode() {
 	return
 	return
 }
 }
 
 
-// 公司管理
+// 用户绑定的公司列表
 func (c *UserController) Company_Tree() {
 func (c *UserController) Company_Tree() {
 	var r_jsons lib.R_JSONS
 	var r_jsons lib.R_JSONS
 
 

+ 8 - 4
controllers/Warning.go

@@ -399,7 +399,6 @@ func (c *DeviceController) Read_WarningRate_List() {
 		page_z = conf.Page_size
 		page_z = conf.Page_size
 	}
 	}
 
 
-	T_type := c.GetString("T_type")
 	T_uuid := c.GetString("T_uuid")
 	T_uuid := c.GetString("T_uuid")
 	T_year, _ := c.GetInt("T_year")
 	T_year, _ := c.GetInt("T_year")
 	T_month, _ := c.GetInt("T_month")
 	T_month, _ := c.GetInt("T_month")
@@ -416,15 +415,20 @@ func (c *DeviceController) Read_WarningRate_List() {
 		month = time.Month(T_month)
 		month = time.Month(T_month)
 	}
 	}
 
 
+	T_type := Warning.WarningRateDay
+	if T_month == 0 {
+		T_type = Warning.WarningRateMonth
+	}
+
 	if T_type == Warning.WarningRateDay {
 	if T_type == Warning.WarningRateDay {
 		startTime = time.Date(T_year, month, 1, 0, 0, 0, 0, time.Local).Format("2006-01-02")
 		startTime = time.Date(T_year, month, 1, 0, 0, 0, 0, time.Local).Format("2006-01-02")
-		endTime = time.Date(T_year, month+1, -1, 0, 0, 0, 0, time.Local).Format("2006-01-02")
+		endTime = time.Date(T_year, month+1, 0, 0, 0, 0, 0, time.Local).Format("2006-01-02")
 	}
 	}
 
 
 	// 默认本年
 	// 默认本年
 	if T_type == Warning.WarningRateMonth {
 	if T_type == Warning.WarningRateMonth {
-		startTime = time.Date(T_year, 1, 0, 0, 0, 0, 0, time.Local).Format("2006-01")
-		endTime = time.Date(T_year, 12, 0, 0, 0, 0, 0, time.Local).Format("2006-01")
+		startTime = time.Date(T_year, 1, 1, 0, 0, 0, 0, time.Local).Format("2006-01")
+		endTime = time.Date(T_year, 12, 31, 0, 0, 0, 0, time.Local).Format("2006-01")
 	}
 	}
 
 
 	if len(T_uuid) == 0 {
 	if len(T_uuid) == 0 {

+ 6 - 2
models/Account/Admin.go

@@ -278,8 +278,12 @@ func Read_Admin_List(T_pid int, T_name string, page int, page_z int) (AdminList
 	if len(T_name) > 0 {
 	if len(T_name) > 0 {
 		cond1 = cond1.AndCond(cond.Or("T_name__icontains", T_name).Or("T_user__icontains", T_name))
 		cond1 = cond1.AndCond(cond.Or("T_name__icontains", T_name).Or("T_user__icontains", T_name))
 	}
 	}
-
-	_, err := qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("Id").All(&maps)
+	var err error
+	if page_z == 9999 {
+		_, err = qs.SetCond((*orm2.Condition)(cond1)).OrderBy("Id").All(&maps)
+	} else {
+		_, err = qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("Id").All(&maps)
+	}
 	if err != nil {
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		logs.Error(lib.FuncName(), err)
 	}
 	}

+ 36 - 16
models/Account/Company.go

@@ -265,10 +265,15 @@ func Read_Company_Tree(admin_r Admin, T_name string) (CompanyList []Company_R) {
 				continue
 				continue
 			}
 			}
 			r := Company_R{
 			r := Company_R{
-				Id:       maps[i].Id,
-				T_mid:    maps[i].T_mid,
-				T_name:   maps[i].T_name,
-				Children: nil,
+				Id:        maps[i].Id,
+				T_mid:     maps[i].T_mid,
+				T_name:    maps[i].T_name,
+				T_plan:    maps[i].T_plan,
+				T_data:    maps[i].T_data,
+				T_v3d:     maps[i].T_v3d,
+				T_money:   maps[i].T_money,
+				T_warning: maps[i].T_warning,
+				Children:  nil,
 			}
 			}
 			info := CompanyCall(maps, r)
 			info := CompanyCall(maps, r)
 			CompanyList = append(CompanyList, info)
 			CompanyList = append(CompanyList, info)
@@ -276,10 +281,15 @@ func Read_Company_Tree(admin_r Admin, T_name string) (CompanyList []Company_R) {
 	} else {
 	} else {
 		for i := 0; i < len(maps); i++ {
 		for i := 0; i < len(maps); i++ {
 			r := Company_R{
 			r := Company_R{
-				Id:       maps[i].Id,
-				T_mid:    maps[i].T_mid,
-				T_name:   maps[i].T_name,
-				Children: nil,
+				Id:        maps[i].Id,
+				T_mid:     maps[i].T_mid,
+				T_name:    maps[i].T_name,
+				T_plan:    maps[i].T_plan,
+				T_data:    maps[i].T_data,
+				T_v3d:     maps[i].T_v3d,
+				T_money:   maps[i].T_money,
+				T_warning: maps[i].T_warning,
+				Children:  nil,
 			}
 			}
 			info := CompanyCall(maps, r)
 			info := CompanyCall(maps, r)
 			CompanyList = append(CompanyList, info)
 			CompanyList = append(CompanyList, info)
@@ -398,10 +408,15 @@ func Read_Company_List(T_name string) (CompanyList []Company_R) {
 				continue
 				continue
 			}
 			}
 			r := Company_R{
 			r := Company_R{
-				Id:       maps[i].Id,
-				T_mid:    maps[i].T_mid,
-				T_name:   maps[i].T_name,
-				Children: nil,
+				Id:        maps[i].Id,
+				T_mid:     maps[i].T_mid,
+				T_name:    maps[i].T_name,
+				T_plan:    maps[i].T_plan,
+				T_data:    maps[i].T_data,
+				T_v3d:     maps[i].T_v3d,
+				T_money:   maps[i].T_money,
+				T_warning: maps[i].T_warning,
+				Children:  nil,
 			}
 			}
 			info := CompanyCall(maps, r)
 			info := CompanyCall(maps, r)
 			CompanyList = append(CompanyList, info)
 			CompanyList = append(CompanyList, info)
@@ -409,10 +424,15 @@ func Read_Company_List(T_name string) (CompanyList []Company_R) {
 	} else {
 	} else {
 		for i := 0; i < len(maps); i++ {
 		for i := 0; i < len(maps); i++ {
 			r := Company_R{
 			r := Company_R{
-				Id:       maps[i].Id,
-				T_mid:    maps[i].T_mid,
-				T_name:   maps[i].T_name,
-				Children: nil,
+				Id:        maps[i].Id,
+				T_mid:     maps[i].T_mid,
+				T_name:    maps[i].T_name,
+				T_plan:    maps[i].T_plan,
+				T_data:    maps[i].T_data,
+				T_v3d:     maps[i].T_v3d,
+				T_money:   maps[i].T_money,
+				T_warning: maps[i].T_warning,
+				Children:  nil,
 			}
 			}
 			info := CompanyCall(maps, r)
 			info := CompanyCall(maps, r)
 			CompanyList = append(CompanyList, info)
 			CompanyList = append(CompanyList, info)

+ 20 - 14
models/Device/DeviceData.go

@@ -41,20 +41,21 @@ type DeviceData_ struct {
 
 
 // 模板
 // 模板
 type DeviceData_R struct {
 type DeviceData_R struct {
-	T_sn   string  // sn
-	T_id   int     // 传感器id
-	T_name string  // 传感器名称
-	T_t    float32 // 温度
-	T_rh   float32 // 湿度
-	T_site string  // GPS
-	T_tl   float32 // 温度下限
-	T_tu   float32 // 温度上限
-	T_rhl  float32 // 湿度下限
-	T_rhu  float32 // 湿度上限
-	T_time string  // 采集时间
-	T_sp   int     // 传感器参数id
-	T_ist  int     // 温度   1开启   2关闭
-	T_ish  int     // 湿度   1开启   2关闭
+	T_sn     string  // sn
+	T_id     int     // 传感器id
+	T_name   string  // 传感器名称
+	T_t      float32 // 温度
+	T_rh     float32 // 湿度
+	T_site   string  // GPS
+	T_tl     float32 // 温度下限
+	T_tu     float32 // 温度上限
+	T_rhl    float32 // 湿度下限
+	T_rhu    float32 // 湿度上限
+	T_time   string  // 采集时间
+	T_sp     int     // 传感器参数id
+	T_ist    int     // 温度   1开启   2关闭
+	T_ish    int     // 湿度   1开启   2关闭
+	T_remark string  // 备注
 }
 }
 
 
 type DeviceData_BackUp struct {
 type DeviceData_BackUp struct {
@@ -98,6 +99,11 @@ func DeviceData_ToDeviceData_R(d Device, r DeviceData_) (t DeviceData_R) {
 	t.T_tu = sp.T_Tupper
 	t.T_tu = sp.T_Tupper
 	t.T_rhl = sp.T_RHlower
 	t.T_rhl = sp.T_RHlower
 	t.T_rhu = sp.T_RHupper
 	t.T_rhu = sp.T_RHupper
+	if sp.T_free == 1 {
+		t.T_remark = "空库"
+	} else {
+		t.T_remark = "-"
+	}
 
 
 	t.T_sn = d.T_sn
 	t.T_sn = d.T_sn
 	t.T_ist = d.T_ist
 	t.T_ist = d.T_ist

+ 3 - 1
models/Device/DeviceSensorParameter.go

@@ -66,7 +66,7 @@ type DeviceSensorParameter_R struct {
 	T_hpreu  float32 //  温度预警上限
 	T_hpreu  float32 //  温度预警上限
 
 
 	T_speed int // 传感器采样率   s(1~240) 默认:15 *
 	T_speed int // 传感器采样率   s(1~240) 默认:15 *
-	T_sense int  // 传感器灵敏度   s(0~10) 默认:5
+	T_sense int // 传感器灵敏度   s(0~10) 默认:5
 	T_en    int // en:是否启用传感器,
 	T_en    int // en:是否启用传感器,
 	T_free  int // free:监测点是否为闲置状态(空库,只监测不报警)
 	T_free  int // free:监测点是否为闲置状态(空库,只监测不报警)
 
 
@@ -80,6 +80,7 @@ type DeviceSensorParameter_M struct {
 	T_Tupper  float32 //  温度上限
 	T_Tupper  float32 //  温度上限
 	T_RHlower float32 //  湿度下限
 	T_RHlower float32 //  湿度下限
 	T_RHupper float32 //  湿度上限
 	T_RHupper float32 //  湿度上限
+	T_free    int
 }
 }
 
 
 type DeviceSensorParameter_T struct {
 type DeviceSensorParameter_T struct {
@@ -113,6 +114,7 @@ func DeviceSensorParameterToDeviceSensorParameter_M(r DeviceSensorParameter) (t
 	t.T_Tupper = r.T_Tupper
 	t.T_Tupper = r.T_Tupper
 	t.T_RHlower = r.T_RHlower
 	t.T_RHlower = r.T_RHlower
 	t.T_RHupper = r.T_RHupper
 	t.T_RHupper = r.T_RHupper
+	t.T_free = r.T_free
 	return t
 	return t
 }
 }
 
 

+ 11 - 4
models/Warning/WarningRate.go

@@ -33,7 +33,7 @@ type WarningRate_R struct {
 	T_date        string  // 记薪日期,2023-03-01
 	T_date        string  // 记薪日期,2023-03-01
 	T_device_num  int64   // 探头数量
 	T_device_num  int64   // 探头数量
 	T_warning_num int64   // 报警数量
 	T_warning_num int64   // 报警数量
-	T_rate        float32 // 报警率
+	Value         float32 // 报警率
 }
 }
 type WarningRate_User struct {
 type WarningRate_User struct {
 	T_uuid string // 用户uuid
 	T_uuid string // 用户uuid
@@ -46,7 +46,7 @@ func WarningRateToWarningRate_R(t WarningRate) (r WarningRate_R) {
 	r.T_date = t.T_date
 	r.T_date = t.T_date
 	r.T_device_num = t.T_device_num
 	r.T_device_num = t.T_device_num
 	r.T_warning_num = t.T_warning_num
 	r.T_warning_num = t.T_warning_num
-	r.T_rate = t.T_rate
+	r.Value = t.T_rate
 	return r
 	return r
 }
 }
 
 
@@ -68,7 +68,7 @@ func Add_WarningRate(m WarningRate) (id int64, err error) {
 	return id, err
 	return id, err
 }
 }
 
 
-func Read_WarningRate_List(T_uuid, T_type string, startTime, endTime string) (r []WarningRate_R) {
+func Read_WarningRate_List(T_uuid, T_type string, startTime, endTime string) (r []map[string]interface{}) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(WarningRate))
 	qs := o.QueryTable(new(WarningRate))
 	cond := orm.NewCondition()
 	cond := orm.NewCondition()
@@ -88,7 +88,14 @@ func Read_WarningRate_List(T_uuid, T_type string, startTime, endTime string) (r
 	}
 	}
 
 
 	for _, v := range maps {
 	for _, v := range maps {
-		r = append(r, WarningRateToWarningRate_R(v))
+		rate := map[string]interface{}{
+			"T_uuid":        v.T_uuid,
+			"T_date":        v.T_date,
+			"T_device_num":  v.T_device_num,
+			"T_warning_num": v.T_warning_num,
+			"value":         v.T_rate,
+		}
+		r = append(r, rate)
 	}
 	}
 
 
 	return r
 	return r

+ 2 - 1
routers/Warning.go

@@ -30,7 +30,8 @@ func init() {
 		),
 		),
 		// 内部用户设备报警率
 		// 内部用户设备报警率
 		beego.NSNamespace("/WarningRate",
 		beego.NSNamespace("/WarningRate",
-			beego.NSRouter("/List", &controllers.DeviceController{}, "*:Read_WarningRate_List"), // 内部用户设备报警率列表
+			beego.NSRouter("/List", &controllers.DeviceController{}, "*:Read_WarningRate_List"),      // 内部用户设备报警率列表
+			beego.NSRouter("/User_List", &controllers.DeviceController{}, "*:Read_WarningRate_List"), // 内部用户设备报警率列表
 		),
 		),
 	)
 	)