zoie 2 роки тому
батько
коміт
43fc861c16

+ 2 - 0
ColdVerify_server.go

@@ -5,6 +5,7 @@ import (
 	_ "ColdVerify_server/routers"
 	"fmt"
 	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
 	beego "github.com/beego/beego/v2/server/web"
 	"github.com/beego/beego/v2/server/web/filter/cors"
 	_ "github.com/go-sql-driver/mysql"
@@ -20,6 +21,7 @@ func init() {
 		conf.MysqlServer_Username+":"+conf.MysqlServer_Password+"@tcp("+conf.MysqlServer_UrlPort+")/"+conf.MysqlServer_Database+"?charset=utf8mb4&loc=Local&parseTime=True",
 		conf.MysqlServer_MaxIdleConnections, conf.MysqlServer_MaxOpenConnections)
 	orm.RunSyncdb("default", false, true) // 创建数据库
+	orm2.Debug = true
 
 }
 

+ 21 - 12
Nats/Nats.go

@@ -11,6 +11,7 @@ import (
 	"fmt"
 	"github.com/nats-io/nats.go"
 	"github.com/vmihailenco/msgpack/v5"
+	"strings"
 	"sync"
 )
 
@@ -55,30 +56,38 @@ func NatsInit() {
 		// 清空表
 		Task.Truncate_TaskData(Task_r.T_task_id)
 
+		// 失败重试5次
 		DeviceClassList := new(sync.Map)
 		for _, v := range resp.DeviceClassList {
-			DeviceClassList.Store(v.Id, v)
+			DeviceClassList.Store(fmt.Sprintf("%s|%s", v.T_sn, v.T_id), 5)
 		}
 
 		DeviceClassList.Range(func(k, v any) bool {
-			c := v.(Device.DeviceClassList)
-			logs.Println("DeviceClass ---- ", c.T_sn, resp.Task.T_task_id, resp.Time_start, resp.Time_end)
-			err = Task.Import_TaskData_Back(c.T_sn, c.T_id, resp.Task.T_task_id, resp.Time_start, resp.Time_end)
-			if err == nil {
+			T_snid := strings.Split(k.(string), "|")
+			T_sn := T_snid[0]
+			T_id := T_snid[1]
+			temp := v.(int)
+			temp--
+			DeviceClassList.Store(k, temp)
+
+			//logs.Println("DeviceClass ---- ", c.T_sn, resp.Task.T_task_id, resp.Time_start, resp.Time_end)
+			err = Task.Import_TaskData_Back(T_sn, T_id, resp.Task.T_task_id, resp.Time_start, resp.Time_end)
+			if err == nil || strings.Contains(err.Error(), "doesn't exist") {
 				DeviceClassList.Delete(k)
+				return true
 			}
 			return true
 		})
 
 		TaskData_Num := Task.Read_TaskData_Count(Task_r.T_task_id)
 
-		if TaskData_Num == 0 {
-			Task_r.T_collection_state = 0
-			if !Task.Update_Task(Task_r, "T_collection_state") {
-				logs.Error(lib.FuncName(), "后台执行修改任务数据失败")
-			}
-			return
-		}
+		//if TaskData_Num == 0 {
+		//	Task_r.T_collection_num = 0
+		//	if !Task.Update_Task(Task_r, "T_collection_state") {
+		//		logs.Error(lib.FuncName(), "后台执行修改任务数据失败")
+		//	}
+		//	return
+		//}
 
 		// 导入到本地数据
 		NatsServer.Import_TaskData(resp.T_uuid, Task_r.T_task_id, TaskData_Num)

+ 1 - 7
controllers/Device.go

@@ -166,7 +166,7 @@ func (c *DeviceController) Del() {
 // 列表 - 分类设备
 func (c *DeviceController) Device_Class() {
 	// 验证登录 User_is, User_r
-	User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	_, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !User_is {
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
 		c.ServeJSON()
@@ -193,12 +193,6 @@ func (c *DeviceController) Device_Class() {
 		return
 	}
 
-	if User_r.T_uuid != r.T_uuid {
-		c.Data["json"] = lib.JSONS{Code: 203, Msg: "没有权限!"}
-		c.ServeJSON()
-		return
-	}
-
 	var cnt int64
 	DeviceList, cnt := Device.Read_DeviceClassList_List(T_class, T_sn, page, page_z)
 

+ 8 - 46
controllers/DeviceClass.go

@@ -53,7 +53,7 @@ func (c *DeviceClassController) List() {
 // 获取-
 func (c *DeviceClassController) Get() {
 	// 验证登录 User_is, User_r
-	User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	_, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !User_is {
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
 		c.ServeJSON()
@@ -73,11 +73,7 @@ func (c *DeviceClassController) Get() {
 		c.ServeJSON()
 		return
 	}
-	if User_r.T_uuid != r.T_uuid {
-		c.Data["json"] = lib.JSONS{Code: 203, Msg: "没有权限!"}
-		c.ServeJSON()
-		return
-	}
+
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r}
 	c.ServeJSON()
 	return
@@ -139,11 +135,6 @@ func (c *DeviceClassController) Up() {
 		return
 	}
 
-	if User_r.T_uuid != r.T_uuid {
-		c.Data["json"] = lib.JSONS{Code: 203, Msg: "没有权限!"}
-		c.ServeJSON()
-		return
-	}
 	// .......
 	if len(T_name) > 0 {
 		r.T_name = T_name
@@ -180,12 +171,6 @@ func (c *DeviceClassController) Del() {
 
 	if r, is := Device.Read_DeviceClass_ById(Id); is {
 
-		if User_r.T_uuid != r.T_uuid {
-			c.Data["json"] = lib.JSONS{Code: 203, Msg: "没有权限!"}
-			c.ServeJSON()
-			return
-		}
-
 		if !Device.Delete_DeviceClass_(r) {
 			c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
 			c.ServeJSON()
@@ -208,7 +193,7 @@ func (c *DeviceClassController) Del() {
 // 列表 -
 func (c *DeviceClassController) List_List() {
 	// 验证登录 User_is, User_r
-	User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	_, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !User_is {
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
 		c.ServeJSON()
@@ -228,17 +213,12 @@ func (c *DeviceClassController) List_List() {
 	T_class, _ := c.GetInt("T_class")
 	T_sn := c.GetString("T_sn")
 
-	r, is := Device.Read_DeviceClass_ById(T_class)
+	_, is := Device.Read_DeviceClass_ById(T_class)
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_class 错误!"}
 		c.ServeJSON()
 		return
 	}
-	if User_r.T_uuid != r.T_uuid {
-		c.Data["json"] = lib.JSONS{Code: 203, Msg: "没有权限!"}
-		c.ServeJSON()
-		return
-	}
 
 	var cnt int64
 	List, cnt := Device.Read_DeviceClassList_List(T_class, T_sn, page, page_z)
@@ -265,22 +245,16 @@ func (c *DeviceClassController) List_Add() {
 	}
 
 	T_class, _ := c.GetInt("T_class")
-	T_id, _ := c.GetInt("T_id")
+	T_id := c.GetString("T_id")
 	T_sn := c.GetString("T_sn")
 
-	r, is := Device.Read_DeviceClass_ById(T_class)
+	_, is := Device.Read_DeviceClass_ById(T_class)
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_class 错误!"}
 		c.ServeJSON()
 		return
 	}
 
-	if User_r.T_uuid != r.T_uuid {
-		c.Data["json"] = lib.JSONS{Code: 203, Msg: "没有权限!"}
-		c.ServeJSON()
-		return
-	}
-
 	if _, is = Device.Read_Device(T_sn); !is {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_sn 不存在!"}
 		c.ServeJSON()
@@ -322,7 +296,7 @@ func (c *DeviceClassController) List_Up() {
 		return
 	}
 
-	T_id, _ := c.GetInt("T_id")
+	T_id := c.GetString("T_id")
 
 	Id, err := c.GetInt("Id")
 	if err != nil {
@@ -338,22 +312,15 @@ func (c *DeviceClassController) List_Up() {
 		return
 	}
 
-	Cr, is := Device.Read_DeviceClass_ById(r.T_class)
+	_, is = Device.Read_DeviceClass_ById(r.T_class)
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_class 错误!"}
 		c.ServeJSON()
 		return
 	}
-	if User_r.T_uuid != Cr.T_uuid {
-		c.Data["json"] = lib.JSONS{Code: 203, Msg: "没有权限!"}
-		c.ServeJSON()
-		return
-	}
 
-	// .......
 	r.T_id = T_id
 
-	// .......
 	if !Device.Update_DeviceClassList(r, "T_id") {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
 		c.ServeJSON()
@@ -390,11 +357,6 @@ func (c *DeviceClassController) List_Del() {
 			c.ServeJSON()
 			return
 		}
-		if User_r.T_uuid != Cr.T_uuid {
-			c.Data["json"] = lib.JSONS{Code: 203, Msg: "没有权限!"}
-			c.ServeJSON()
-			return
-		}
 
 		if !Device.Delete_DeviceClassList_(r) {
 			c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}

+ 7 - 3
controllers/Task.go

@@ -18,7 +18,7 @@ type TaskController struct {
 // 列表 -
 func (c *TaskController) List() {
 	// 验证登录 User_is, User_r
-	_, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !User_is {
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
 		c.ServeJSON()
@@ -36,13 +36,17 @@ func (c *TaskController) List() {
 	}
 
 	T_name := c.GetString("T_name")
-	T_uuid := c.GetString("T_uuid")
 
 	UserMap := Account.UserListToMap(Account.Read_User_List_ALL_1())
 	AdminMap := Account.AdminListToMap(Account.Read_Admin_List_ALL_1())
 
+	var T_admin string
+	if User_r.T_power > 2 {
+		T_admin = User_r.T_uuid
+	}
+
 	var cnt int
-	List, cnt := Task.Read_Task_List(T_uuid, T_name, UserMap, AdminMap, page, page_z)
+	List, cnt := Task.Read_Task_List(T_admin, T_name, UserMap, AdminMap, page, page_z)
 
 	page_size := math.Ceil(float64(cnt) / float64(page_z))
 	r_jsons.List = List

+ 132 - 4
controllers/VerifyTemplate.go

@@ -10,6 +10,7 @@ import (
 	"encoding/json"
 	beego "github.com/beego/beego/v2/server/web"
 	"math"
+	"strconv"
 )
 
 type VerifyTemplateController struct {
@@ -36,10 +37,17 @@ func (c *VerifyTemplateController) List() {
 		page_z = conf.Page_size
 	}
 
+	T_class, _ := c.GetInt("T_class")
+	if T_class <= 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_class Err!"}
+		c.ServeJSON()
+		return
+	}
+
 	T_name := c.GetString("T_name")
 
 	var cnt int64
-	List, cnt := VerifyTemplate.Read_VerifyTemplate_List(T_name, page, page_z)
+	List, cnt := VerifyTemplate.Read_VerifyTemplate_List(T_class, T_name, page, page_z)
 	page_size := math.Ceil(float64(cnt) / float64(page_z))
 	r_jsons.List = List
 	r_jsons.Page = page
@@ -64,10 +72,12 @@ func (c *VerifyTemplateController) Add() {
 
 	T_name := c.GetString("T_name")
 	T_sort, _ := c.GetInt("T_sort")
+	T_class, _ := c.GetInt("T_class")
 
 	var_ := VerifyTemplate.VerifyTemplate{
-		T_name: T_name,
-		T_sort: T_sort,
+		T_class: T_class,
+		T_name:  T_name,
+		T_sort:  T_sort,
 	}
 
 	Id, is := VerifyTemplate.Add_VerifyTemplate(var_)
@@ -98,6 +108,9 @@ func (c *VerifyTemplateController) Up() {
 
 	T_VerifyTemplate_id := c.GetString("T_VerifyTemplate_id")
 
+	T_scheme := c.GetString("T_scheme")
+	T_reporting := c.GetString("T_reporting")
+
 	r, is := VerifyTemplate.Read_VerifyTemplate(T_VerifyTemplate_id)
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
@@ -109,12 +122,19 @@ func (c *VerifyTemplateController) Up() {
 	if len(T_name) > 0 {
 		r.T_name = T_name
 	}
+	if len(T_scheme) > 0 {
+		r.T_scheme = T_scheme
+
+	}
+	if len(T_reporting) > 0 {
+		r.T_reporting = T_reporting
+	}
 	if T_sort_err == nil {
 		r.T_sort = T_sort
 	}
 
 	// .......
-	if !VerifyTemplate.Update_VerifyTemplate(r, "T_name", "T_sort") {
+	if !VerifyTemplate.Update_VerifyTemplate(r, "T_name", "T_sort", "T_scheme", "T_reporting") {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
 		c.ServeJSON()
 		return
@@ -446,3 +466,111 @@ func (c *VerifyTemplateController) Map_Data_Pu() {
 	c.ServeJSON()
 	return
 }
+
+func (c *VerifyTemplateController) Class_List() {
+	// 验证登录 User_is, User_r
+	_, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !User_is {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
+		c.ServeJSON()
+		return
+	}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: VerifyTemplate.Read_VerifyTemplateClass_List()}
+	c.ServeJSON()
+	return
+}
+func (c *VerifyTemplateController) Class_Add() {
+	// 验证登录 User_is, User_r
+	User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !User_is {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
+		c.ServeJSON()
+		return
+	}
+
+	T_name := c.GetString("T_name")
+	T_fid, _ := c.GetInt("T_fid")
+
+	var_ := VerifyTemplate.VerifyTemplateClass{
+		T_name:  T_name,
+		T_fid:   T_fid,
+		T_State: 1,
+	}
+
+	Id, err := VerifyTemplate.Add_VerifyTemplateClass(var_)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "添加失败"}
+		c.ServeJSON()
+		return
+	}
+
+	System.Add_UserLogs_T(User_r.T_uuid, "模板分类", "添加", var_)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Id}
+	c.ServeJSON()
+	return
+}
+func (c *VerifyTemplateController) Class_Up() {
+	User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !User_is {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
+		c.ServeJSON()
+		return
+	}
+
+	T_id, _ := c.GetInt("T_id")
+	T_name := c.GetString("T_name")
+
+	R_VerifyTemplateToolClass, err := VerifyTemplate.Read_VerifyTemplateClass_ById(T_id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "T_id Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	if len(T_name) > 0 {
+		R_VerifyTemplateToolClass.T_name = T_name
+	}
+
+	if is := VerifyTemplate.Update_VerifyTemplateClass(R_VerifyTemplateToolClass, "T_name"); !is {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "修改失败"}
+		c.ServeJSON()
+		return
+	}
+
+	System.Add_UserLogs_T(User_r.T_uuid, "模板分类", "修改", R_VerifyTemplateToolClass)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+func (c *VerifyTemplateController) Class_Del() {
+	User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !User_is {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
+		c.ServeJSON()
+		return
+	}
+
+	T_id, _ := c.GetInt("T_id")
+	R_VerifyTemplateToolClass, err := VerifyTemplate.Read_VerifyTemplateClass_ById(T_id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "T_id Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	ids := VerifyTemplate.ReadVerifyTemplateClassIds_T_path(R_VerifyTemplateToolClass.T_path)
+
+	if is := VerifyTemplate.Delete_VerifyTemplateClass_ByIds(ids); !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	System.Add_UserLogs(User_r.T_uuid, "模板分类", "删除", strconv.Itoa(T_id))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}

+ 2 - 2
models/Device/DeviceClassList.go

@@ -21,7 +21,7 @@ type DeviceClassList struct {
 	Id int `orm:"column(ID);size(11);auto;pk"`
 
 	T_class int    `orm:"size(200);null"` // 分类
-	T_id    int    `orm:"size(20);null"`  // 设备id
+	T_id    string `orm:"size(20);null"`  // 设备id
 	T_sn    string `orm:"size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
 
 	T_State    int       `orm:"size(2);default(1)"`                                    // 0 删除   1 正常
@@ -224,7 +224,7 @@ func Read_DeviceClassList_List_id(T_class_Id int) (r []DeviceClassList) {
 
 	qs := o.QueryTable(new(DeviceClassList))
 
-	qs.Filter("T_class", T_class_Id).All(&r)
+	qs.Filter("T_class", T_class_Id).Filter("T_State", 1).All(&r)
 
 	return r
 }

+ 17 - 17
models/Device/DeviceData.go

@@ -127,7 +127,7 @@ func CREATE_DeviceData(SN string) bool {
 //	//  查看是否 有记录
 //	var maps_z []orm2.ParamsList
 //
-//	sql := "SELECT COUNT(ID) FROM z_device_data_" + SN + " WHERE t_time = '" + t_time + "' AND t_id = " + t_id
+//	sql := "SELECT COUNT(ID) FROM z_devicedata_" + SN + " WHERE t_time = '" + t_time + "' AND t_id = " + t_id
 //	//fmt.Println(sql)
 //	_, err := o.Raw(sql).ValuesList(&maps_z)
 //
@@ -142,7 +142,7 @@ func CREATE_DeviceData(SN string) bool {
 //		return true
 //	}
 //	// 开始插入数据
-//	sql = "INSERT INTO z_device_data_" + SN + " (`t_id`, `t_t`, `t_rh`, `t_time`) VALUES (" + t_id + ", " + t_t + ", " + t_rh + ", '" + t_time + "')"
+//	sql = "INSERT INTO z_devicedata_" + SN + " (`t_id`, `t_t`, `t_rh`, `t_time`) VALUES (" + t_id + ", " + t_t + ", " + t_rh + ", '" + t_time + "')"
 //	//  这里有时间优化  用于一次 prepare 多次 exec,以提高批量执行的速度
 //	//fmt.Println(sql)
 //	res, err := o.Raw(sql).Exec()
@@ -194,7 +194,7 @@ func Read_DeviceSensorData_ById_List(SN string, T_id int, Time_start_ string, Ti
 		sql_time += " t_time <= '" + Time_end_ + "' AND "
 	}
 
-	sql := "SELECT COUNT(ID) FROM z_device_data_" + SN + " WHERE " + sql_time + " t_id = " + strconv.Itoa(T_id)
+	sql := "SELECT COUNT(ID) FROM z_devicedata_" + SN + " WHERE " + sql_time + " t_id = " + strconv.Itoa(T_id)
 	fmt.Println(sql)
 	_, err := o.Raw(sql).ValuesList(&maps_z)
 	if err != nil {
@@ -204,7 +204,7 @@ func Read_DeviceSensorData_ById_List(SN string, T_id int, Time_start_ string, Ti
 		return maps, 0
 	}
 	//fmt.Println("maps_z;",maps_z[0][0])
-	sql = "SELECT t_name,t_id,t_t,t_rh,t_tl,t_tu,t_rhl,t_rhu,t_site,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time  FROM z_device_data_" + SN + " WHERE " + sql_time + " t_id = " + strconv.Itoa(T_id) + " ORDER BY t_time DESC "
+	sql = "SELECT t_name,t_id,t_t,t_rh,t_tl,t_tu,t_rhl,t_rhu,t_site,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time  FROM z_devicedata_" + SN + " WHERE " + sql_time + " t_id = " + strconv.Itoa(T_id) + " ORDER BY t_time DESC "
 	if page_z != 9999 {
 		sql = sql + " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(pagez)
 	}
@@ -235,7 +235,7 @@ func Read_DeviceData_By_snid(SN string, T_id int, Time_start_ string, Time_end_
 		sql_time += " t_time <= '" + Time_end_ + "' AND "
 	}
 
-	sql := "SELECT t_id,t_t,t_rh,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time  FROM z_device_data_" + SN + " WHERE " + sql_time + " t_id = " + strconv.Itoa(T_id) + " ORDER BY t_time DESC "
+	sql := "SELECT t_id,t_t,t_rh,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time  FROM z_devicedata_" + SN + " WHERE " + sql_time + " t_id = " + strconv.Itoa(T_id) + " ORDER BY t_time DESC "
 	sql = sql + " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(limit)
 	fmt.Println(sql)
 	_, err := o.Raw(sql).QueryRows(&maps)
@@ -261,7 +261,7 @@ func Read_DeviceData_Count_By_snid(SN string, T_id int, Time_start_ string, Time
 		sql_time += " t_time <= '" + Time_end_ + "' AND "
 	}
 
-	sql := "SELECT COUNT(ID) FROM z_device_data_" + SN + " WHERE " + sql_time + " t_id = " + strconv.Itoa(T_id)
+	sql := "SELECT COUNT(ID) FROM z_devicedata_" + SN + " WHERE " + sql_time + " t_id = " + strconv.Itoa(T_id)
 	fmt.Println(sql)
 	_, err := o.Raw(sql).ValuesList(&maps_z)
 	if err != nil {
@@ -296,7 +296,7 @@ func Read_DeviceSensorData_List(SN string, Time_start_ string, Time_end_ string,
 		sql_time += " t_time <= '" + Time_end_ + "' "
 	}
 
-	sql := "SELECT COUNT(ID) FROM z_device_data_" + SN + " " + sql_time
+	sql := "SELECT COUNT(ID) FROM z_devicedata_" + SN + " " + sql_time
 	fmt.Println(sql)
 	_, err := o.Raw(sql).ValuesList(&maps_z)
 	if err != nil {
@@ -306,7 +306,7 @@ func Read_DeviceSensorData_List(SN string, Time_start_ string, Time_end_ string,
 		return maps, 0
 	}
 	//fmt.Println("maps_z;",maps_z[0][0])
-	sql = "SELECT t_id,t_t,t_rh,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time  FROM z_device_data_" + SN + " " + sql_time + " ORDER BY t_time DESC "
+	sql = "SELECT t_id,t_t,t_rh,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time  FROM z_devicedata_" + SN + " " + sql_time + " ORDER BY t_time DESC "
 	if page_z != 9999 {
 		sql = sql + " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(pagez)
 	}
@@ -334,7 +334,7 @@ func Read_DeviceSensorData_List_z(SN string, Time_start_ string) int {
 		//sql_time += " t_time <= '" + Time_end_ + "' AND "
 	}
 
-	sql := "SELECT COUNT(ID) FROM z_device_data_" + SN + " " + sql_time
+	sql := "SELECT COUNT(ID) FROM z_devicedata_" + SN + " " + sql_time
 	fmt.Println(sql)
 	_, err := o.Raw(sql).ValuesList(&maps_z)
 	if err != nil {
@@ -360,7 +360,7 @@ func Read_DeviceSensorData_ById_New(SN string, T_id int) (DeviceData_New, bool)
 	}
 
 	//fmt.Println("maps_z;",maps_z[0][0])
-	sql := "SELECT t_id,t_t,t_rh,t_time  FROM z_device_data_" + SN + " WHERE " + " t_id = " + strconv.Itoa(T_id) + " ORDER BY t_time DESC "
+	sql := "SELECT t_id,t_t,t_rh,t_time  FROM z_devicedata_" + SN + " WHERE " + " t_id = " + strconv.Itoa(T_id) + " ORDER BY t_time DESC "
 	sql = sql + " LIMIT 0,1 "
 
 	fmt.Println(sql)
@@ -415,8 +415,8 @@ func Read_DeviceData_ById_Year_List(SN string) []orm2.ParamsList {
 
 	var maps_z []orm2.ParamsList
 
-	//sql = "SELECT t_name,t_t,t_rh,t_tl,t_tu,t_rhl,t_rhu,t_site,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time  FROM z_device_data_"+SN+" WHERE "+sql_time+" t_id = "+ strconv.Itoa(T_id) +" ORDER BY t_time DESC "
-	sql := "SELECT DATE_FORMAT(t_time,\"%m\") AS m ,DATE_FORMAT(t_time,\"%d\") AS d FROM z_device_data_" + SN + "  WHERE t_time > '" + strconv.Itoa(time.Now().Year()) + "-0-0 00:00:00' GROUP BY DATE_FORMAT(t_time,\"%m\");"
+	//sql = "SELECT t_name,t_t,t_rh,t_tl,t_tu,t_rhl,t_rhu,t_site,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time  FROM z_devicedata_"+SN+" WHERE "+sql_time+" t_id = "+ strconv.Itoa(T_id) +" ORDER BY t_time DESC "
+	sql := "SELECT DATE_FORMAT(t_time,\"%m\") AS m ,DATE_FORMAT(t_time,\"%d\") AS d FROM z_devicedata_" + SN + "  WHERE t_time > '" + strconv.Itoa(time.Now().Year()) + "-0-0 00:00:00' GROUP BY DATE_FORMAT(t_time,\"%m\");"
 	fmt.Println(sql)
 	num, err := o.Raw(sql).ValuesList(&maps_z)
 	if err == nil && num > 0 {
@@ -434,8 +434,8 @@ func Read_DeviceData_ById_Month_List(SN string) []orm2.ParamsList {
 
 	time_x := currentTime.Format("2006-01") + "-00 00:00:00"
 
-	//sql = "SELECT t_name,t_t,t_rh,t_tl,t_tu,t_rhl,t_rhu,t_site,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time  FROM z_device_data_"+SN+" WHERE "+sql_time+" t_id = "+ strconv.Itoa(T_id) +" ORDER BY t_time DESC "
-	sql := "SELECT DATE_FORMAT(t_time,\"%d\") AS d FROM z_device_data_" + SN + "  WHERE t_time > '" + time_x + "' GROUP BY DATE_FORMAT(t_time,\"%d\");"
+	//sql = "SELECT t_name,t_t,t_rh,t_tl,t_tu,t_rhl,t_rhu,t_site,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time  FROM z_devicedata_"+SN+" WHERE "+sql_time+" t_id = "+ strconv.Itoa(T_id) +" ORDER BY t_time DESC "
+	sql := "SELECT DATE_FORMAT(t_time,\"%d\") AS d FROM z_devicedata_" + SN + "  WHERE t_time > '" + time_x + "' GROUP BY DATE_FORMAT(t_time,\"%d\");"
 	fmt.Println(sql)
 	o.Raw(sql).ValuesList(&maps_z)
 
@@ -451,8 +451,8 @@ func Read_DeviceSensorData_ById_Day_List(SN string) []orm2.ParamsList {
 
 	time_x := currentTime.Format("2006-01-02") + " 00:00:00"
 
-	//sql = "SELECT t_name,t_t,t_rh,t_tl,t_tu,t_rhl,t_rhu,t_site,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time  FROM z_device_data_"+SN+" WHERE "+sql_time+" t_id = "+ strconv.Itoa(T_id) +" ORDER BY t_time DESC "
-	sql := "SELECT DATE_FORMAT(t_time,\"%H\") AS m FROM z_device_data_" + SN + "  WHERE t_time > '" + time_x + "' GROUP BY DATE_FORMAT(t_time,\"%H\");"
+	//sql = "SELECT t_name,t_t,t_rh,t_tl,t_tu,t_rhl,t_rhu,t_site,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time  FROM z_devicedata_"+SN+" WHERE "+sql_time+" t_id = "+ strconv.Itoa(T_id) +" ORDER BY t_time DESC "
+	sql := "SELECT DATE_FORMAT(t_time,\"%H\") AS m FROM z_devicedata_" + SN + "  WHERE t_time > '" + time_x + "' GROUP BY DATE_FORMAT(t_time,\"%H\");"
 	fmt.Println(sql)
 	o.Raw(sql).ValuesList(&maps_z)
 
@@ -471,7 +471,7 @@ func Read_DeviceSensorData_List_GROUP_BY_t_time(SN string, Time_start_ string, T
 		sql_time += " t_time >= '" + Time_start_ + "' AND " + " t_time <= '" + Time_end_ + "' "
 	}
 
-	sql := "SELECT DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time FROM z_device_data_" + SN + " WHERE " + sql_time + "   GROUP BY t_time  ORDER BY t_time DESC "
+	sql := "SELECT DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time FROM z_devicedata_" + SN + " WHERE " + sql_time + "   GROUP BY t_time  ORDER BY t_time DESC "
 	fmt.Println(sql)
 	o.Raw(sql).ValuesList(&maps_z)
 	return maps_z

+ 5 - 4
models/Task/Task.go

@@ -27,7 +27,7 @@ type Task struct {
 	T_reporting         string `orm:"size(256);null"`       // 报告编写 负责人UUID
 	T_delivery          string `orm:"size(256);null"`       // 交付审核 负责人UUID
 	T_scheme_state      int    `orm:"size(2);default(0)"`   // 实施方案 状态 0 未完成 1 已完成
-	T_collection_state  int    `orm:"size(2);default(0)"`   // 数据采集 状态 0 未完成 1 已完成 2 处理中
+	T_collection_state  int    `orm:"size(2);default(0)"`   // 数据采集 状态 0 未完成 1 已完成 2 处理中 3 已采集-无数据
 	T_reporting_state   int    `orm:"size(2);default(0)"`   // 报告编写 状态 0 未完成 1 已完成
 	T_delivery_state    int    `orm:"size(2);default(0)"`   // 交付审核 状态 0 未完成 1 已完成 2 处理中
 
@@ -381,7 +381,7 @@ func Read_UserTask_List(T_uuid string, T_name string, userMap, adminMap map[stri
 }
 
 // 获取任务列表
-func Read_Task_List(T_uuid string, T_name string, userMap, adminMap map[string]string, page int, page_z int) ([]Task_, int) {
+func Read_Task_List(T_admin string, T_name string, userMap, adminMap map[string]string, page int, page_z int) ([]Task_, int) {
 
 	o := orm.NewOrm()
 
@@ -396,8 +396,9 @@ func Read_Task_List(T_uuid string, T_name string, userMap, adminMap map[string]s
 	cond := orm.NewCondition()
 	//cond1 := cond.And("T_name__icontains", T_name).And("T_State", 1)
 	cond1 := cond.And("T_name__icontains", T_name)
-	if len(T_uuid) > 0 {
-		cond1 = cond1.And("T_uuid", T_uuid)
+	if len(T_admin) > 0 {
+		cond1 = cond1.AndCond(cond.Or("T_scheme", T_admin).Or("T_collection", T_admin).
+			Or("T_reporting", T_admin).Or("T_delivery", T_admin))
 	}
 
 	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)

+ 8 - 9
models/Task/TaskData.go

@@ -43,13 +43,12 @@ func CREATE_TaskData(T_task_id string) bool {
 	sql = "CREATE TABLE IF NOT EXISTS `z_task_data_" + T_task_id + "` ( " +
 		"  `ID` int(11) NOT NULL AUTO_INCREMENT," +
 		"	`t_sn` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL," +
-		"	`t_id` int(11) NULL DEFAULT NULL," +
+		"	`t_id` varchar(256) DEFAULT NULL," +
 		"	`t_t` float(6, 1) NULL DEFAULT NULL," +
 		"	`t_rh` float(6, 1) NULL DEFAULT NULL," +
 		"	`t_time` datetime(0) NULL DEFAULT NULL," +
-		"	PRIMARY KEY (`ID`) USING BTREE" +
+		"	PRIMARY KEY (`ID`) USING BTREE," +
 		"   KEY `t_sn` (`t_sn`)," +
-		"   KEY `t_id` (`t_id`)" +
 		"   KEY `t_time` (`t_time`)" +
 		") ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;"
 
@@ -86,14 +85,14 @@ func Truncate_TaskData(T_task_id string) bool {
 }
 
 // 添加
-func Import_TaskData(Sn string, T_id int, T_task_id string, Time_start string, Time_end string) bool {
+func Import_TaskData(Sn string, T_id string, T_task_id string, Time_start string, Time_end string) bool {
 	//if conf.Server_test {
 	//	return true
 	//}
 	o := orm.NewOrm()
 
 	// 开始插入数据
-	sql := "insert into z_task_data_" + T_task_id + "(t_id,t_t,t_rh,t_time) select t_id,t_t,t_rh,t_time from z_device_data_" + Sn
+	sql := "insert into z_task_data_" + T_task_id + "(t_id,t_t,t_rh,t_time) select t_id,t_t,t_rh,t_time from z_devicedata_" + Sn
 	sql = sql + " WHERE t_time >= '" + Time_start + "' AND t_time <= '" + Time_end + "'"
 	//  这里有时间优化  用于一次 prepare 多次 exec,以提高批量执行的速度
 	logs.Println(sql)
@@ -104,7 +103,7 @@ func Import_TaskData(Sn string, T_id int, T_task_id string, Time_start string, T
 	}
 
 	// 强行替换  ID
-	sql = "UPDATE z_task_data_" + T_task_id + " SET `t_sn` = '" + Sn + "',`t_id` = " + strconv.Itoa(T_id) + " WHERE `t_sn` IS NULL"
+	sql = "UPDATE z_task_data_" + T_task_id + " SET `t_sn` = '" + Sn + "',`t_id` = '" + T_id + "' WHERE `t_sn` IS NULL"
 	// 设备 ID
 	//sql = "UPDATE z_task_data_"+T_task_id+" SET `t_sn` = '"+Sn+"' WHERE `t_sn` IS NULL"
 	logs.Println(sql)
@@ -118,10 +117,10 @@ func Import_TaskData(Sn string, T_id int, T_task_id string, Time_start string, T
 	return true
 }
 
-func Import_TaskData_Back(Sn string, T_id int, T_task_id string, Time_start string, Time_end string) error {
+func Import_TaskData_Back(Sn string, T_id string, T_task_id string, Time_start string, Time_end string) error {
 	o := orm.NewOrm()
 	// 开始插入数据
-	sql := "insert into z_task_data_" + T_task_id + "(t_id,t_t,t_rh,t_time) select t_id,t_t,t_rh,t_time from z_device_data_" + Sn
+	sql := "insert into z_task_data_" + T_task_id + "(t_id,t_t,t_rh,t_time) select t_id,t_t,t_rh,t_time from z_devicedata_" + Sn
 	sql = sql + " WHERE t_time >= '" + Time_start + "' AND t_time <= '" + Time_end + "'"
 	logs.Println(sql)
 	_, err := o.Raw(sql).Exec()
@@ -130,7 +129,7 @@ func Import_TaskData_Back(Sn string, T_id int, T_task_id string, Time_start stri
 		return err
 	}
 	// 强行替换  ID
-	sql = "UPDATE z_task_data_" + T_task_id + " SET `t_sn` = '" + Sn + "',`t_id` = " + strconv.Itoa(T_id) + " WHERE `t_sn` IS NULL"
+	sql = "UPDATE z_task_data_" + T_task_id + " SET `t_sn` = '" + Sn + "',`t_id` = '" + T_id + "' WHERE `t_sn` IS NULL"
 	logs.Println(sql)
 	_, err = o.Raw(sql).Exec()
 	if err != nil {

+ 13 - 6
models/VerifyTemplate/VerifyTemplate.go

@@ -12,11 +12,15 @@ import (
 
 // 模板
 type VerifyTemplate struct {
-	Id int `orm:"column(ID);size(11);auto;pk"`
+	Id      int `orm:"column(ID);size(11);auto;pk"`
+	T_class int `orm:"size(8);default(0)"` // 分类
 
 	T_VerifyTemplate_id string `orm:"size(256);null"`     // 标题
 	T_name              string `orm:"size(256);null"`     // 标题
-	T_sort              int    `orm:"size(2);default(1)"` // 排序
+	T_sort              int    `orm:"size(2);default(1)"` // 排
+
+	T_scheme    string `orm:"size(256);null"` // 方案模板
+	T_reporting string `orm:"size(256);null"` // 报告模板
 
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
@@ -27,6 +31,8 @@ type VerifyTemplate_R struct {
 	T_name              string `orm:"size(256);null"` // 标题
 	T_sort              int    `orm:"size(200);null"` // 分类
 
+	T_scheme    string // 方案模板
+	T_reporting string // 报告模板
 }
 
 func (t *VerifyTemplate) TableName() string {
@@ -45,8 +51,9 @@ func VerifyTemplateToVerifyTemplate_R(T VerifyTemplate) (T_r VerifyTemplate_R) {
 	T_r.T_VerifyTemplate_id = T.T_VerifyTemplate_id
 	T_r.T_name = T.T_name
 	T_r.T_sort = T.T_sort
+	T_r.T_scheme = T.T_scheme
+	T_r.T_reporting = T.T_reporting
 
-	//......
 	return T_r
 }
 
@@ -124,7 +131,7 @@ func Update_VerifyTemplate(m VerifyTemplate, cols ...string) bool {
 }
 
 // 获取列表
-func Read_VerifyTemplate_List(T_name string, page int, page_z int) ([]VerifyTemplate_R, int64) {
+func Read_VerifyTemplate_List(T_class int, T_name string, page int, page_z int) ([]VerifyTemplate_R, int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -138,9 +145,9 @@ func Read_VerifyTemplate_List(T_name string, page int, page_z int) ([]VerifyTemp
 	}
 
 	cond := orm.NewCondition()
-	cond1 := cond.And("T_name__icontains", T_name) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+	cond1 := cond.And("T_class", T_class).And("T_name__icontains", T_name) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
 
-	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_name").All(&r)
 	cnt, _ := qs.SetCond((*orm2.Condition)(cond1)).Count()
 	// 转换
 	var VerifyTemplate_r []VerifyTemplate_R

+ 154 - 0
models/VerifyTemplate/VerifyTemplateClass.go

@@ -0,0 +1,154 @@
+package VerifyTemplate
+
+import (
+	"ColdVerify_server/lib"
+	"ColdVerify_server/logs"
+	"fmt"
+	_ "github.com/astaxie/beego/cache/redis"
+	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	_ "github.com/go-sql-driver/mysql"
+	"strconv"
+)
+
+// 模板
+type VerifyTemplateClass struct {
+	Id     int    `orm:"column(ID);size(11);auto;pk"`
+	T_fid  int    `orm:"size(200);null"` // 父级分类ID,主类 为 0
+	T_name string `orm:"size(256);null"` // 标题
+	T_path string `orm:"size(256);null"` // 路径
+
+	T_State int `orm:"size(2);default(1)"` // 0 删除(伪删除)   1 正常
+
+	Children []VerifyTemplateClass `orm:"-"`
+}
+
+func (t *VerifyTemplateClass) TableName() string {
+	return "verify_template_class" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(VerifyTemplateClass))
+}
+
+type VerifyTemplateClass_R struct {
+	Id       int
+	T_fid    int                   // 项目 id, VerifyTemplateClass.ID
+	T_name   string                // 名称
+	T_State  int                   // 0 删除(伪删除)   1 正常(已交付)     2 开发中
+	Children []VerifyTemplateClass `orm:"-"`
+}
+
+// 获取 ById
+func Read_VerifyTemplateClass_ById(id int) (r VerifyTemplateClass, err error) {
+	o := orm.NewOrm()
+	r = VerifyTemplateClass{Id: id, T_State: 1}
+	err = o.Read(&r, "Id", "T_State")
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return r, err
+	}
+	return r, err
+}
+
+// 添加
+func Add_VerifyTemplateClass(var_ VerifyTemplateClass) (id int64, err error) {
+	o := orm.NewOrm()
+	o.Begin()
+	id, err = o.Insert(&var_)
+	if err != nil {
+		o.Rollback()
+		return id, err
+	}
+
+	T_Path := "/0/" + strconv.Itoa(int(id)) + "/"
+	if var_.T_fid != 0 {
+		Company_r, err := Read_VerifyTemplateClass_ById(var_.T_fid)
+		if err != nil {
+			o.Rollback()
+			return id, err
+		}
+		T_Path = Company_r.T_path + strconv.Itoa(int(id)) + "/"
+	}
+
+	var_.Id = int(id)
+	var_.T_path = T_Path
+	_, err = o.Update(&var_, "T_path")
+	if err != nil {
+		o.Rollback()
+		return id, err
+	}
+	o.Commit()
+
+	return id, err
+}
+
+// 修改
+func Update_VerifyTemplateClass(r VerifyTemplateClass, cols ...string) bool {
+	o := orm.NewOrm()
+	if num, err := o.Update(&r, cols...); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+		return true
+	}
+	return false
+}
+
+// 批量删除
+func Delete_VerifyTemplateClass_ByIds(ids []int) bool {
+	o := orm.NewOrm()
+	o.Begin()
+	for _, id := range ids {
+		v := VerifyTemplateClass{Id: id, T_State: 0}
+		if _, err := o.Update(&v, "T_State"); err != nil {
+			o.Rollback()
+			return false
+		}
+	}
+
+	o.Commit()
+	return true
+}
+
+// 获取列表
+func Read_VerifyTemplateClass_List() (r []VerifyTemplateClass) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	var map_r []VerifyTemplateClass
+	qs := o.QueryTable(new(VerifyTemplateClass))
+
+	cond := orm.NewCondition()
+
+	cond1 := cond.And("T_State", 1)
+
+	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&map_r)
+
+	r = VerifyTemplateClass_Call(map_r, 0)
+
+	return r
+
+}
+
+func VerifyTemplateClass_Call(list []VerifyTemplateClass, parentId int) []VerifyTemplateClass {
+	res := make([]VerifyTemplateClass, 0)
+	for _, v := range list {
+		if v.T_fid == parentId {
+			v.Children = VerifyTemplateClass_Call(list, v.Id)
+			res = append(res, v)
+		}
+	}
+	return res
+}
+
+// 通过T_pid查询所有子id
+func ReadVerifyTemplateClassIds_T_path(T_path string) (VerifyTemplateClassIds []int) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(VerifyTemplateClass))
+	var VerifyTemplateClassList []VerifyTemplateClass
+	qs.Filter("T_path__startswith", T_path).Filter("T_State", 1).All(&VerifyTemplateClassList)
+	for _, v := range VerifyTemplateClassList {
+		VerifyTemplateClassIds = append(VerifyTemplateClassIds, v.Id)
+	}
+	return VerifyTemplateClassIds
+}

+ 5 - 0
routers/router.go

@@ -7,6 +7,11 @@ import (
 
 func init() {
 
+	beego.Router("/VerifyTemplate/Class_List", &controllers.VerifyTemplateController{}, "*:Class_List") // 分类列表
+	beego.Router("/VerifyTemplate/Class_Add", &controllers.VerifyTemplateController{}, "*:Class_Add")   // 分类添加
+	beego.Router("/VerifyTemplate/Class_Up", &controllers.VerifyTemplateController{}, "*:Class_Up")     // 分类修改
+	beego.Router("/VerifyTemplate/Class_Del", &controllers.VerifyTemplateController{}, "*:Class_Del")   // 分类删除
+
 	beego.Router("/VerifyTemplate/List", &controllers.VerifyTemplateController{}, "*:List") // 模板列表
 	beego.Router("/VerifyTemplate/Add", &controllers.VerifyTemplateController{}, "*:Add")   // 模板添加
 	beego.Router("/VerifyTemplate/Up", &controllers.VerifyTemplateController{}, "*:Up")     // 模板删除