Sfoglia il codice sorgente

add:验证模版、信息采集模版、信息采集复制

zoie 1 settimana fa
parent
commit
093c077c75

+ 6 - 6
conf/app.conf

@@ -6,20 +6,20 @@ EnableDocs = true
 copyrequestbody = true
 
 # Nats
-NatsServer_Url = "182.44.114.34:4222"
+NatsServer_Url = "203.34.49.130:4222"
 NatsForbidden = true
 
-MysqlServer_UrlPort = "182.44.114.34:3306"
+MysqlServer_UrlPort = "203.34.49.130:3306"
 MysqlServer_Database = "coldverify"
-MysqlServer_Username = "root"
-MysqlServer_Password = "mysql_Ks7WAX"
+MysqlServer_Username = "coldverify"
+MysqlServer_Password = "Bd3d34yJ7aibiEi"
 MysqlServer_MaxIdleConnections = 100
 MysqlServer_MaxOpenConnections = 200
 
 
 # Redis
-Redis_address = "182.44.114.34:6379"
-Redis_password = "redis_F2tj7p"
+Redis_address = "203.34.49.130:6379"
+Redis_password = "redis_JJ56d5"
 Redis_dbNum = "2"
 
 

+ 13 - 7
conf/app_prod.conf

@@ -5,22 +5,21 @@ Graceful = true
 EnableDocs = true
 copyrequestbody = true
 
-
 # Nats
-NatsServer_Url = "127.0.0.1:43422"
+NatsServer_Url = "182.44.114.34:4222"
 NatsForbidden = true
 
-MysqlServer_UrlPort = "127.0.0.1:40306"
+MysqlServer_UrlPort = "182.44.114.34:3306"
 MysqlServer_Database = "coldverify"
-MysqlServer_Username = "coldverify"
-MysqlServer_Password = "Bd3d34yJ7aibiEi!"
+MysqlServer_Username = "root"
+MysqlServer_Password = "mysql_Ks7WAX"
 MysqlServer_MaxIdleConnections = 100
 MysqlServer_MaxOpenConnections = 200
 
 
 # Redis
-Redis_address = "127.0.0.1:43379"
-Redis_password = ""
+Redis_address = "182.44.114.34:6379"
+Redis_password = "redis_F2tj7p"
 Redis_dbNum = "2"
 
 
@@ -31,7 +30,14 @@ Qiniu_SecretKey = "KFhkYxTAJ2ZPN3ZS3euTsfWk8-C92rKgkhAMkDRN"
 Qiniu_BUCKET = "bzdcoldverify"
 Oss = "https://bzdcoldverifyoss.baozhida.cn"
 
+
 # 发送微信通知
 WechatNews_GroupName = "宝智达-软件组"
 WechatNews_Url = "http://111.85.177.202:12088/send"
 
+# 老板 uuid
+BoosUuid = "fa5be10f-5be1-42be-a8dc-8d142e006266"
+# 冷链验证 报告负责人
+VdelUuid = "1c13436c-4511-4030-8b26-baadad88445a"
+
+

+ 89 - 0
conf/app_test.conf

@@ -0,0 +1,89 @@
+package conf
+
+appname = ColdVerify_server6300
+HTTPPort = 6300
+runmode = dev
+Graceful = true
+EnableDocs = true
+copyrequestbody = true
+
+# Nats
+NatsServer_Url = "203.34.49.130:4222"
+NatsForbidden = true
+
+MysqlServer_UrlPort = "203.34.49.130:3306"
+MysqlServer_Database = "coldverify"
+MysqlServer_Username = "coldverify"
+MysqlServer_Password = "Bd3d34yJ7aibiEi"
+MysqlServer_MaxIdleConnections = 100
+MysqlServer_MaxOpenConnections = 200
+
+
+# Redis
+Redis_address = "203.34.49.130:6379"
+Redis_password = "redis_JJ56d5"
+Redis_dbNum = "2"
+
+
+
+# 静态资源
+Qiniu_AccessKey = "-8ezB_d-8-eUFTMvhOGbGzgeQRPeKQnaQ3DBcUxo"
+Qiniu_SecretKey = "KFhkYxTAJ2ZPN3ZS3euTsfWk8-C92rKgkhAMkDRN"
+Qiniu_BUCKET = "bzdcoldverify"
+Oss = "https://bzdcoldverifyoss.baozhida.cn"
+
+
+# 发送微信通知
+WechatNews_GroupName = "宝智达-软件组"
+WechatNews_Url = "http://111.85.177.202:12088/send"
+
+# 老板 uuid
+BoosUuid = "fa5be10f-5be1-42be-a8dc-8d142e006266"
+# 冷链验证 报告负责人
+VdelUuid = "1c13436c-4511-4030-8b26-baadad88445a"
+
+
+appname = ColdVerify_server6300
+HTTPPort = 6300
+runmode = dev
+Graceful = true
+EnableDocs = true
+copyrequestbody = true
+
+# Nats
+NatsServer_Url = "203.34.49.130:4222"
+NatsForbidden = true
+
+MysqlServer_UrlPort = "203.34.49.130:3306"
+MysqlServer_Database = "coldverify"
+MysqlServer_Username = "coldverify"
+MysqlServer_Password = "Bd3d34yJ7aibiEi"
+MysqlServer_MaxIdleConnections = 100
+MysqlServer_MaxOpenConnections = 200
+
+
+# Redis
+Redis_address = "203.34.49.130:6379"
+Redis_password = "redis_JJ56d5"
+Redis_dbNum = "2"
+
+
+
+# 静态资源
+Qiniu_AccessKey = "-8ezB_d-8-eUFTMvhOGbGzgeQRPeKQnaQ3DBcUxo"
+Qiniu_SecretKey = "KFhkYxTAJ2ZPN3ZS3euTsfWk8-C92rKgkhAMkDRN"
+Qiniu_BUCKET = "bzdcoldverify"
+Oss = "https://bzdcoldverifyoss.baozhida.cn"
+
+
+# 发送微信通知
+WechatNews_GroupName = "宝智达-软件组"
+WechatNews_Url = "http://111.85.177.202:12088/send"
+
+# 老板 uuid
+BoosUuid = "fa5be10f-5be1-42be-a8dc-8d142e006266"
+# 冷链验证 报告负责人
+VdelUuid = "1c13436c-4511-4030-8b26-baadad88445a"
+
+
+

+ 2 - 4
controllers/DeviceClass.go

@@ -398,7 +398,6 @@ func (c *DeviceClassController) List_Add() {
 	T_class, _ := c.GetInt("T_class")
 	T_sn_id_list := c.GetString("T_sn_id_list")
 
-
 	// 根据 | 分割数据
 	items := strings.Split(T_sn_id_list, "|")
 
@@ -425,7 +424,6 @@ func (c *DeviceClassController) List_Add() {
 	}
 	T_sn_id_list = result
 
-
 	list := strings.Split(strings.TrimRight(T_sn_id_list, "|"), "|")
 	T_remark := c.GetString("T_remark")
 
@@ -730,11 +728,11 @@ func (c *DeviceClassController) List_Del() {
 	return
 }
 
-// 添加设备列表。模下载
+// 添加设备列表。模下载
 func (c *DeviceClassController) List_Template_Download() {
 
 	// 返回生成的 Excel 文件
-	c.Ctx.Output.Download("static/添加设备列表模.xlsx")
+	c.Ctx.Output.Download("static/添加设备列表模.xlsx")
 }
 
 func (c *DeviceClassController) List_Del_Duplication() {

+ 52 - 11
controllers/InfoTemplate.go

@@ -86,7 +86,7 @@ func (c *InfoTemplateController) Add() {
 		c.ServeJSON()
 		return
 	}
-	System.Add_UserLogs_T(User_r.T_uuid, "信息采集模板", "添加", var_)
+	System.Add_UserLogs_T(User_r.T_uuid, "信息采集信息采集模版", "添加", var_)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Id}
 	c.ServeJSON()
@@ -130,7 +130,7 @@ func (c *InfoTemplateController) Up() {
 		c.ServeJSON()
 		return
 	}
-	System.Add_UserLogs_T(User_r.T_uuid, "信息采集模板", "修改", r)
+	System.Add_UserLogs_T(User_r.T_uuid, "信息采集信息采集模版", "修改", r)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
@@ -168,7 +168,7 @@ func (c *InfoTemplateController) Del() {
 		}
 	}
 
-	System.Add_UserLogs_T(User_r.T_uuid, "信息采集模板", "删除", r)
+	System.Add_UserLogs_T(User_r.T_uuid, "信息采集信息采集模版", "删除", r)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
 	return
@@ -249,7 +249,7 @@ func (c *InfoTemplateController) Copy() {
 		return
 	}
 
-	System.Add_UserLogs_T(User_r.T_uuid, "信息采集模板", "复制", var_)
+	System.Add_UserLogs_T(User_r.T_uuid, "信息采集信息采集模版", "复制", var_)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: new_id}
 	c.ServeJSON()
@@ -315,7 +315,7 @@ func (c *InfoTemplateController) Map_Add() {
 		return
 	}
 
-	System.Add_UserLogs_T(User_r.T_uuid, "信息采集模板标签", "添加", var_)
+	System.Add_UserLogs_T(User_r.T_uuid, "信息采集信息采集模版标签", "添加", var_)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Id}
 	c.ServeJSON()
@@ -366,7 +366,7 @@ func (c *InfoTemplateController) Map_Up() {
 		return
 	}
 
-	System.Add_UserLogs_T(User_r.T_uuid, "信息采集模板标签", "修改", r)
+	System.Add_UserLogs_T(User_r.T_uuid, "信息采集信息采集模版标签", "修改", r)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
@@ -391,7 +391,7 @@ func (c *InfoTemplateController) Map_Del() {
 			c.ServeJSON()
 			return
 		}
-		System.Add_UserLogs_T(User_r.T_uuid, "信息采集模板标签", "删除", r)
+		System.Add_UserLogs_T(User_r.T_uuid, "信息采集信息采集模版标签", "删除", r)
 		c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 		c.ServeJSON()
 		return
@@ -538,7 +538,7 @@ func (c *InfoTemplateController) Map_Data_Copy() {
 	}
 
 	if copy_InfoCollection.T_InfoTemplate_id != paste_InfoCollection.T_InfoTemplate_id {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "仅支持相同模板间复制!"}
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "仅支持相同信息采集模版间复制!"}
 		c.ServeJSON()
 		return
 	}
@@ -606,7 +606,7 @@ func (c *InfoTemplateController) Class_Add() {
 		return
 	}
 
-	System.Add_UserLogs_T(User_r.T_uuid, "模板分类", "添加", var_)
+	System.Add_UserLogs_T(User_r.T_uuid, "信息采集模版分类", "添加", var_)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Id}
 	c.ServeJSON()
@@ -640,7 +640,7 @@ func (c *InfoTemplateController) Class_Up() {
 		return
 	}
 
-	System.Add_UserLogs_T(User_r.T_uuid, "模板分类", "修改", R_InfoTemplateToolClass)
+	System.Add_UserLogs_T(User_r.T_uuid, "信息采集模版分类", "修改", R_InfoTemplateToolClass)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
@@ -670,7 +670,48 @@ func (c *InfoTemplateController) Class_Del() {
 		return
 	}
 
-	System.Add_UserLogs(User_r.T_uuid, "模板分类", "删除", strconv.Itoa(T_id))
+	System.Add_UserLogs(User_r.T_uuid, "信息采集模版分类", "删除", strconv.Itoa(T_id))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
+// 复制信息采集-分类-标签
+func (c *InfoTemplateController) Class_Copy() {
+	// 验证登录 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_id, _ := c.GetInt("T_id") // 要复制的信息采集分类id
+	T_name := c.GetString("T_name")
+
+	// 查询要复制的信息采集分类id
+	R_InfoTemplateClass, err := InfoCollection.Read_InfoTemplateClass_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 && T_name != R_InfoTemplateClass.T_name {
+		R_InfoTemplateClass.T_name = T_name
+	} else {
+		R_InfoTemplateClass.T_name = R_InfoTemplateClass.T_name + "_副本"
+	}
+
+	_, err = InfoCollection.CopyInfoTemplateClassTree(R_InfoTemplateClass.T_path, R_InfoTemplateClass.T_fid, R_InfoTemplateClass.T_name)
+
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "复制信息采集模版分类失败"}
+		c.ServeJSON()
+		return
+	}
+
+	System.Add_UserLogs_T(User_r.T_uuid, "信息采集模版分类", "复制", T_id)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()

+ 3 - 3
controllers/Template.go

@@ -164,7 +164,7 @@ func (c *TemplateController) Add() {
 		c.ServeJSON()
 		return
 	}
-	System.Add_UserLogs_T(User_r.T_uuid, "模管理", "添加", var_)
+	System.Add_UserLogs_T(User_r.T_uuid, "模管理", "添加", var_)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Id}
 	c.ServeJSON()
@@ -215,7 +215,7 @@ func (c *TemplateController) Up() {
 		c.ServeJSON()
 		return
 	}
-	System.Add_UserLogs_T(User_r.T_uuid, "模管理", "修改", r)
+	System.Add_UserLogs_T(User_r.T_uuid, "模管理", "修改", r)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
@@ -245,7 +245,7 @@ func (c *TemplateController) Del() {
 			c.ServeJSON()
 			return
 		}
-		System.Add_UserLogs_T(User_r.T_uuid, "模管理", "删除", r)
+		System.Add_UserLogs_T(User_r.T_uuid, "模管理", "删除", r)
 		c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 		c.ServeJSON()
 		return

+ 56 - 15
controllers/VerifyTemplate.go

@@ -87,7 +87,7 @@ func (c *VerifyTemplateController) Add() {
 		c.ServeJSON()
 		return
 	}
-	System.Add_UserLogs_T(User_r.T_uuid, "验证模", "添加", var_)
+	System.Add_UserLogs_T(User_r.T_uuid, "验证模", "添加", var_)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Id}
 	c.ServeJSON()
@@ -156,7 +156,7 @@ func (c *VerifyTemplateController) Up() {
 		c.ServeJSON()
 		return
 	}
-	System.Add_UserLogs_T(User_r.T_uuid, "验证模", "修改", r)
+	System.Add_UserLogs_T(User_r.T_uuid, "验证模", "修改", r)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
@@ -194,7 +194,7 @@ func (c *VerifyTemplateController) Del() {
 		}
 	}
 
-	System.Add_UserLogs_T(User_r.T_uuid, "验证模", "删除", r)
+	System.Add_UserLogs_T(User_r.T_uuid, "验证模", "删除", r)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
 	return
@@ -246,10 +246,10 @@ func (c *VerifyTemplateController) Copy() {
 	}
 
 	var_ := VerifyTemplate.VerifyTemplate{
-		T_class: r.T_class,
-		T_name:  T_name,
-		T_sort:  r.T_sort,
-		T_deploy:  r.T_deploy,
+		T_class:  r.T_class,
+		T_name:   T_name,
+		T_sort:   r.T_sort,
+		T_deploy: r.T_deploy,
 	}
 
 	new_id, is := VerifyTemplate.Add_VerifyTemplate(var_)
@@ -307,7 +307,7 @@ func (c *VerifyTemplateController) Copy() {
 		return
 	}
 
-	System.Add_UserLogs_T(User_r.T_uuid, "验证模", "复制", var_)
+	System.Add_UserLogs_T(User_r.T_uuid, "验证模", "复制", var_)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: new_id}
 	c.ServeJSON()
@@ -396,7 +396,7 @@ func (c *VerifyTemplateController) Map_Add() {
 		return
 	}
 
-	System.Add_UserLogs_T(User_r.T_uuid, "验证模标签", "添加", var_)
+	System.Add_UserLogs_T(User_r.T_uuid, "验证模标签", "添加", var_)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Id}
 	c.ServeJSON()
@@ -468,7 +468,7 @@ func (c *VerifyTemplateController) Map_Up() {
 		return
 	}
 
-	System.Add_UserLogs_T(User_r.T_uuid, "验证模标签", "修改", r)
+	System.Add_UserLogs_T(User_r.T_uuid, "验证模标签", "修改", r)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
@@ -493,7 +493,7 @@ func (c *VerifyTemplateController) Map_Del() {
 			c.ServeJSON()
 			return
 		}
-		System.Add_UserLogs_T(User_r.T_uuid, "验证模标签", "删除", r)
+		System.Add_UserLogs_T(User_r.T_uuid, "验证模标签", "删除", r)
 		c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 		c.ServeJSON()
 		return
@@ -676,7 +676,7 @@ func (c *VerifyTemplateController) Map_Data_Copy() {
 	}
 
 	if copy_task.T_VerifyTemplate_id != paste_task.T_VerifyTemplate_id {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "仅支持相同模间复制!"}
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "仅支持相同模间复制!"}
 		c.ServeJSON()
 		return
 	}
@@ -933,7 +933,7 @@ func (c *VerifyTemplateController) Class_Add() {
 		return
 	}
 
-	System.Add_UserLogs_T(User_r.T_uuid, "模分类", "添加", var_)
+	System.Add_UserLogs_T(User_r.T_uuid, "模分类", "添加", var_)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Id}
 	c.ServeJSON()
@@ -967,7 +967,7 @@ func (c *VerifyTemplateController) Class_Up() {
 		return
 	}
 
-	System.Add_UserLogs_T(User_r.T_uuid, "模分类", "修改", R_VerifyTemplateToolClass)
+	System.Add_UserLogs_T(User_r.T_uuid, "模分类", "修改", R_VerifyTemplateToolClass)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
@@ -997,7 +997,48 @@ func (c *VerifyTemplateController) Class_Del() {
 		return
 	}
 
-	System.Add_UserLogs(User_r.T_uuid, "模板分类", "删除", strconv.Itoa(T_id))
+	System.Add_UserLogs(User_r.T_uuid, "模版分类", "删除", strconv.Itoa(T_id))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
+// 复制验证模版-分类-标签
+func (c *VerifyTemplateController) Class_Copy() {
+	// 验证登录 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_id, _ := c.GetInt("T_id") // 要复制的信息采集分类id
+	T_name := c.GetString("T_name")
+
+	// 查询要复制的信息采集分类id
+	R_VerifyTemplateClass, 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 && T_name != R_VerifyTemplateClass.T_name {
+		R_VerifyTemplateClass.T_name = T_name
+	} else {
+		R_VerifyTemplateClass.T_name = R_VerifyTemplateClass.T_name + "_副本"
+	}
+
+	_, err = VerifyTemplate.CopyVerifyTemplateClassTree(R_VerifyTemplateClass.T_path, R_VerifyTemplateClass.T_fid, R_VerifyTemplateClass.T_name)
+
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "复制验证模版分类失败"}
+		c.ServeJSON()
+		return
+	}
+
+	System.Add_UserLogs_T(User_r.T_uuid, "验证模版分类", "复制", T_id)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()

+ 46 - 8
controllers/infoCollection.go

@@ -1,7 +1,6 @@
 package controllers
 
 import (
-	"ColdVerify_server/Nats/NatsServer"
 	"ColdVerify_server/conf"
 	"ColdVerify_server/lib"
 	"ColdVerify_server/lib/wx"
@@ -164,7 +163,6 @@ func (c *InfoCollectionController) Add() {
 		c.ServeJSON()
 		return
 	}
-	NatsServer.Create_Local_Table(T_InfoCollection_id)
 	System.Add_UserLogs_T(User_r.T_uuid, "信息采集管理", "添加", var_)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: T_InfoCollection_id}
 	c.ServeJSON()
@@ -208,7 +206,7 @@ func (c *InfoCollectionController) Up() {
 		clos = append(clos, "T_InfoTemplate_class")
 	}
 	if T_InfoTemplate_id != r.T_InfoTemplate_id {
-		// 修改任务信息采集模
+		// 修改任务信息采集模
 		Task.Update_Task_T_InfoTemplate_id(T_InfoCollection_id, T_InfoTemplate_id)
 	}
 	if len(T_InfoTemplate_id) > 0 {
@@ -307,7 +305,7 @@ func (c *InfoCollectionController) UpStatus() {
 		clos = append(clos, "T_status")
 	}
 	//  2已提交  ,计算时间
-	if T_status == InfoCollection.InfoCollectionStatusSubmitted{
+	if T_status == InfoCollection.InfoCollectionStatusSubmitted {
 		if len(r.T_end_time) == 0 {
 			r.T_end_time = time.Now().Format("2006-01-02 15:04:05")
 			r.T_time_interval, _ = lib.MinutesDifference(r.T_start_time, r.T_end_time)
@@ -351,20 +349,19 @@ func (c *InfoCollectionController) UpStatus() {
 	_, company_r := Account.Read_User_ByT_uuid(r.T_uuid)
 	// 已提交   [报告负责人]
 	if T_status == InfoCollection.InfoCollectionStatusSubmitted {
-		go wx.WxSend(conf.VdelUuid, fmt.Sprintf("【%s-%s】信息采集 %s", company_r.T_name, r.T_name,InfoCollection.InfoCollectionStatusMap[T_status]))
+		go wx.WxSend(conf.VdelUuid, fmt.Sprintf("【%s-%s】信息采集 %s", company_r.T_name, r.T_name, InfoCollection.InfoCollectionStatusMap[T_status]))
 	}
 
 	// 已退回
 	if T_status == InfoCollection.InfoCollectionStatusReturn {
-		System.Add_News(r.T_submit_uuid, fmt.Sprintf("【%s-%s】信息采集 %s,%s", company_r.T_name, r.T_name,InfoCollection.InfoCollectionStatusMap[T_status],T_reason), "")
-		go wx.WxSend(r.T_submit_uuid, fmt.Sprintf("【%s-%s】信息采集 %s,%s", company_r.T_name, r.T_name,InfoCollection.InfoCollectionStatusMap[T_status],T_reason))
+		System.Add_News(r.T_submit_uuid, fmt.Sprintf("【%s-%s】信息采集 %s,%s", company_r.T_name, r.T_name, InfoCollection.InfoCollectionStatusMap[T_status], T_reason), "")
+		go wx.WxSend(r.T_submit_uuid, fmt.Sprintf("【%s-%s】信息采集 %s,%s", company_r.T_name, r.T_name, InfoCollection.InfoCollectionStatusMap[T_status], T_reason))
 	}
 
 	if T_status == InfoCollection.InfoCollectionStatusReturnedMoney {
 		go wx.WxSend(conf.BoosUuid, fmt.Sprintf("【%s-%s】已回款", company_r.T_name, r.T_name))
 	}
 
-
 	System.Add_UserLogs_T(User_r.T_uuid, "信息采集管理", "修改状态", r)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
@@ -446,3 +443,44 @@ func (c *InfoCollectionController) Statistics() {
 	c.ServeJSON()
 	return
 }
+
+// 修改-
+func (c *InfoCollectionController) Copy() {
+	// 验证登录 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_InfoCollection_id := c.GetString("T_InfoCollection_id") // 信息采集id
+	r, is := InfoCollection.Read_InfoCollection(T_InfoCollection_id)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
+		c.ServeJSON()
+		return
+	}
+
+	var_ := InfoCollection.InfoCollection{
+		T_uuid:               r.T_uuid,
+		T_name:               T_name,
+		T_InfoTemplate_class: r.T_InfoTemplate_class,
+		T_InfoTemplate_id:    r.T_InfoTemplate_id,
+		T_status:             1,
+		T_State:              1,
+		T_submit_uuid:        User_r.T_uuid,
+	}
+
+	T_InfoCollection_id, err := InfoCollection.Add_InfoCollection(var_)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()}
+		c.ServeJSON()
+		return
+	}
+	System.Add_UserLogs_T(User_r.T_uuid, "信息采集管理", "复制", r)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}

+ 1 - 1
models/Device/Device.go

@@ -16,7 +16,7 @@ import (
 	"time"
 )
 
-// 模
+// 模
 type Device struct {
 	Id int `orm:"column(ID);size(11);auto;pk"`
 

+ 1 - 1
models/Device/DeviceClass.go

@@ -13,7 +13,7 @@ import (
 	"time"
 )
 
-// 模
+// 模
 type DeviceClass struct {
 	Id     int    `orm:"column(ID);size(11);auto;pk"`
 	T_uuid string `orm:"size(256);null"` // 管理员 UUID

+ 1 - 1
models/Device/DeviceClassList.go

@@ -16,7 +16,7 @@ import (
 	"time"
 )
 
-// 模
+// 模
 type DeviceClassList struct {
 	Id int `orm:"column(ID);size(11);auto;pk"`
 

+ 1 - 1
models/Device/DeviceData.go

@@ -16,7 +16,7 @@ import (
 	"time"
 )
 
-// 模
+// 模
 type DeviceData struct {
 	Id int `orm:"column(ID);size(11);auto;pk"`
 

+ 7 - 7
models/InfoCollection/InfoCollection.go

@@ -38,14 +38,14 @@ type AuditRecord struct {
 	T_time      string `orm:"type(256)"`          // 时间
 }
 
-// 模
+// 模
 type InfoCollection struct {
 	Id                   int     `orm:"column(ID);size(11);auto;pk"`
 	T_InfoCollection_id  string  `orm:"size(256);null"`     // 信息采集ID
 	T_uuid               string  `orm:"size(256);null"`     // 公司 UUID
 	T_name               string  `orm:"size(256);null"`     // 标题
-	T_InfoTemplate_class string  `orm:"size(256);null"`     // 模分类
-	T_InfoTemplate_id    string  `orm:"size(256);null"`     // 模id
+	T_InfoTemplate_class string  `orm:"size(256);null"`     // 模分类
+	T_InfoTemplate_id    string  `orm:"size(256);null"`     // 模id
 	T_status             int     `orm:"size(2);default(0)"` // 状态 1待提交 2已提交 3已接收 4已退回 5已回款
 	T_State              int     `orm:"size(2);default(1)"` // 0 删除  1 正常
 	T_submit_uuid        string  `orm:"size(256);null"`     // 提交人 UUID
@@ -66,10 +66,10 @@ type InfoCollection_R struct {
 	T_uuid                    string  // 用户 UUID
 	T_uuid_name               string  // 用户姓名
 	T_name                    string  // 标题
-	T_InfoTemplate_class      string  // 模分类
-	T_InfoTemplate_class_name string  // 模分类名称
-	T_InfoTemplate_id         string  // 模id
-	T_InfoTemplate_name       string  // 模名称
+	T_InfoTemplate_class      string  // 模分类
+	T_InfoTemplate_class_name string  // 模分类名称
+	T_InfoTemplate_id         string  // 模id
+	T_InfoTemplate_name       string  // 模名称
 	T_status                  int     // 状态
 	T_status_str              string  // 状态字符串
 	T_State                   int     // 0 删除   1 正常

+ 6 - 3
models/InfoCollection/InfoTemplate.go

@@ -9,7 +9,7 @@ import (
 	"time"
 )
 
-// 模
+// 模
 type InfoTemplate struct {
 	Id      int `orm:"column(ID);size(11);auto;pk"`
 	T_class int `orm:"size(8);default(0)"` // 分类
@@ -165,8 +165,11 @@ func Read_InfoTemplate_List(T_class int, T_name string, page int, page_z int) ([
 
 	cond := orm.NewCondition()
 	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("T_name").All(&r)
+	if page_z == 9999 {
+		qs.SetCond((*orm2.Condition)(cond1)).OrderBy("T_name").All(&r)
+	} else {
+		qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_name").All(&r)
+	}
 	cnt, _ := qs.SetCond((*orm2.Condition)(cond1)).Count()
 	// 转换
 	var InfoTemplate_r []InfoTemplate_R

+ 152 - 1
models/InfoCollection/InfoTemplateClass.go

@@ -3,14 +3,17 @@ package InfoCollection
 import (
 	"ColdVerify_server/lib"
 	"ColdVerify_server/logs"
+	"errors"
+	"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"
+	"strings"
 )
 
-// 模
+// 模
 type InfoTemplateClass struct {
 	Id     int    `orm:"column(ID);size(11);auto;pk"`
 	T_fid  int    `orm:"size(200);null"` // 父级分类ID,主类 为 0
@@ -167,3 +170,151 @@ func ReadInfoTemplateClassIds_T_path(T_path string) (InfoTemplateClassIds []int)
 	}
 	return InfoTemplateClassIds
 }
+
+// 通过T_path查询所有子信息采集分类
+func ReadInfoTemplateClassList_T_path(T_path string, parentId int) (r []InfoTemplateClass) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(InfoTemplateClass))
+	var InfoTemplateClassList []InfoTemplateClass
+	qs.Filter("T_path__startswith", T_path).Filter("T_State", 1).All(&InfoTemplateClassList)
+	r = InfoTemplateClass_Call(InfoTemplateClassList, parentId)
+	return r
+}
+
+// 递归复制节点
+func copyInfoTemplateClass(o orm.Ormer, r *InfoTemplateClass, newParentId int, parentPath string) (*InfoTemplateClass, error) {
+
+	// 创建新节点
+	infoTemplateClass := InfoTemplateClass{
+		T_fid:   newParentId,
+		T_name:  r.T_name, // 添加副本标识
+		T_State: 1,
+		// T_path 将在插入后更新
+	}
+
+	// 插入数据库
+	newInfoTemplateClassId, err := o.Insert(&infoTemplateClass)
+	if err != nil {
+		return nil, err
+	}
+
+	newPath := parentPath + strconv.Itoa(infoTemplateClass.Id) + "/"
+
+	// 更新路径
+	infoTemplateClass.Id = int(newInfoTemplateClassId)
+	infoTemplateClass.T_path = newPath
+	_, err = o.Update(&infoTemplateClass, "T_path")
+	if err != nil {
+		return nil, err
+	}
+
+	// 复制子节点
+	for _, child := range r.Children {
+		_, err = copyInfoTemplateClass(o, &child, infoTemplateClass.Id, newPath)
+		if err != nil {
+			return nil, err
+		}
+	}
+	// 分类1
+	//  ----模版
+	//	--------标签
+	// 分类2
+	//   -- 子分类
+	// 2 复制分类下的模版
+	// 3 复制模版下的标签
+	infoTemplateList, _ := Read_InfoTemplate_List(r.Id, "", 0, 9999)
+	for _, v := range infoTemplateList {
+		infoTemplate, is := Read_InfoTemplate(v.T_InfoTemplate_id)
+		if !is {
+			return nil, errors.New("查询信息采集模版失败")
+		}
+
+		newInfoTemplate := InfoTemplate{
+			T_class: infoTemplateClass.Id, // 新的分类id
+			T_name:  infoTemplate.T_name,
+			T_sort:  infoTemplate.T_sort,
+		}
+
+		newInfoTemplateId, is := Add_InfoTemplate(newInfoTemplate)
+		if !is {
+			return nil, errors.New("复制信息采集模版失败")
+		}
+
+		// 复制模版下面的标签
+		mapList, _ := Read_InfoTemplateMap_List(v.T_InfoTemplate_id, 0, 0)
+		tempMap := make(map[string]struct{})
+		idList := make([]string, len(mapList))
+		// 生成mapList长度的T_id
+		for i := 0; i < len(mapList); i++ {
+			// 生成编号
+			rand_x := 0
+			T_id := ""
+			for rand_x < 100 {
+				T_id = lib.GetRandstring(4, "", int64(rand_x))
+				_, is = Read_InfoTemplateMap(T_id)
+				if !is {
+					if _, ok := tempMap[T_id]; !ok {
+						break
+					}
+				}
+				rand_x += 1
+			}
+			tempMap[T_id] = struct{}{}
+			idList[i] = T_id
+		}
+		mapInsertList := make([]InfoTemplateMap, 0)
+		for i, m := range mapList {
+			vtm := InfoTemplateMap{
+				T_id:              idList[i],
+				T_InfoTemplate_id: newInfoTemplateId,
+				T_name:            m.T_name,
+				T_text:            m.T_text,
+				T_label:           m.T_label,
+				T_sort:            m.T_sort,
+			}
+
+			mapInsertList = append(mapInsertList, vtm)
+		}
+
+		_, is = Add_InfoTemplateMapMulti(mapInsertList)
+		if !is {
+			return nil, errors.New("复制信息采集模版标签失败")
+		}
+	}
+
+	return &infoTemplateClass, nil
+}
+
+func CopyInfoTemplateClassTree(T_path string, parentId int, T_name string) (newRoot *InfoTemplateClass, err error) {
+	// 获取原始节点及其子树
+	o := orm.NewOrm()
+	srcNode := ReadInfoTemplateClassList_T_path(T_path, parentId)
+
+	if len(srcNode) == 0 {
+		return nil, errors.New("查询信息采集分类失败")
+	}
+	srcNode[0].T_name = T_name
+	// 开启事务
+	err = o.Begin()
+	if err != nil {
+		o.Rollback()
+		return nil, fmt.Errorf("事务启动失败: %v", err)
+	}
+
+	s := strings.Split(strings.Trim(T_path, "/"), "/")
+	parentPath := fmt.Sprintf("/%s/", strings.Join(s[:len(s)-1], "/"))
+	// 递归复制
+	newRoot, err = copyInfoTemplateClass(o, &srcNode[0], parentId, parentPath) // 假设复制到根目录
+	if err != nil {
+		o.Rollback()
+		return nil, err
+	}
+
+	// 提交事务
+	if err = o.Commit(); err != nil {
+		o.Rollback()
+		return nil, fmt.Errorf("事务提交失败: %v", err)
+	}
+
+	return newRoot, nil
+}

+ 4 - 4
models/InfoCollection/VerifyTemplateMap.go

@@ -10,13 +10,13 @@ import (
 	"time"
 )
 
-// 模
+// 模
 type InfoTemplateMap struct {
 	Id int `orm:"column(ID);size(11);auto;pk"`
 
-	T_id              string `orm:"size(256);null"`     // 标题
-	T_InfoTemplate_id string `orm:"size(256);null"`     // 标题
-	T_label           int    `orm:"size(2);default(1)"` // 数据类型
+	T_id              string `orm:"index,size(256);null"` // 标题
+	T_InfoTemplate_id string `orm:"size(256);null"`       // 标题
+	T_label           int    `orm:"size(2);default(1)"`   // 数据类型
 
 	//1:文本
 	//2:数值

+ 2 - 2
models/InfoCollection/VerifyTemplateMapData.go

@@ -10,11 +10,11 @@ import (
 	"time"
 )
 
-// 模
+// 模
 type InfoTemplateMapData struct {
 	Id                   int    `orm:"column(ID);size(11);auto;pk"`
 	T_InfoCollection_id  string `orm:"index,size(256);null"` // 信息采集id
-	T_InfoTemplate_id    string `orm:"index,size(256);null"` // 模id
+	T_InfoTemplate_id    string `orm:"index,size(256);null"` // 模id
 	T_InfoTemplateMap_id string `orm:"index,size(256);null"` // 标签id
 	T_value              string `orm:"size(1024);null"`      // 内容
 

+ 54 - 56
models/Task/Task.go

@@ -84,37 +84,37 @@ var (
 
 var (
 	TaskSchemeTimeLimit = map[string]float64{
-		"BWX": 30, // 保温箱
-		"LDX": 30, // 冷冻箱
-		"LCG": 30, // 冷藏柜
-		"LDG": 30, // 冷冻柜
-		"YLG": 30, // 阴凉柜
-		"LDC": 60, // 冷藏车
-		"LK":  60, // 冷库
-		"BG":  60, // 冰柜
-		"DWBWX":  60, // 低温保存箱
-		"XT":  30, // 系统验证
-		"WZ":  80, // 位置
-		"XJ":  0, // 巡检
-		"PX":  0, // 培训
-		"QT":  0, // 其他
+		"BWX":   30, // 保温箱
+		"LDX":   30, // 冷冻箱
+		"LCG":   30, // 冷藏柜
+		"LDG":   30, // 冷冻柜
+		"YLG":   30, // 阴凉柜
+		"LDC":   60, // 冷藏车
+		"LK":    60, // 冷库
+		"BG":    60, // 冰柜
+		"DWBWX": 60, // 低温保存箱
+		"XT":    30, // 系统验证
+		"WZ":    80, // 位置
+		"XJ":    0,  // 巡检
+		"PX":    0,  // 培训
+		"QT":    0,  // 其他
 	}
 
 	TaskReportingTimeLimit = map[string]float64{
-		"BWX": 180, // 保温箱
-		"LDX": 180, // 冷冻箱
-		"LCG": 210, // 冷藏柜
-		"LDG": 210, // 冷冻柜
-		"YLG": 210, // 阴凉柜
-		"LDC": 300, // 冷藏车
-		"LK":  390, // 冷库
-		"BG":  210, // 冰柜
-		"DWBWX":  180, // 低温保存箱
-		"XT":  300, // 系统验证
-		"WZ":  240, // 位置
-		"XJ":  0, // 巡检
-		"PX":  0, // 培训
-		"QT":  0, // 其他
+		"BWX":   180, // 保温箱
+		"LDX":   180, // 冷冻箱
+		"LCG":   210, // 冷藏柜
+		"LDG":   210, // 冷冻柜
+		"YLG":   210, // 阴凉柜
+		"LDC":   300, // 冷藏车
+		"LK":    390, // 冷库
+		"BG":    210, // 冰柜
+		"DWBWX": 180, // 低温保存箱
+		"XT":    300, // 系统验证
+		"WZ":    240, // 位置
+		"XJ":    0,   // 巡检
+		"PX":    0,   // 培训
+		"QT":    0,   // 其他
 
 	}
 
@@ -132,18 +132,18 @@ type AuditRecord struct {
 	T_type       string `orm:"type(256)"`          // 退回类型 scheme方案 reporting报告
 }
 
-// 模
+// 模
 type Task struct {
 	Id                  int    `orm:"column(ID);size(11);auto;pk"`
 	T_class             int    `orm:"size(200);default(0)"` // 分类id
 	T_InfoCollection_id string `orm:"size(256);null"`       // 信息采集ID
-	T_InfoTemplate_id   string `orm:"size(256);null"`       // 信息采集模ID
+	T_InfoTemplate_id   string `orm:"size(256);null"`       // 信息采集模ID
 
 	T_task_id              string `orm:"size(256);null"`     // 任务ID
 	T_uuid                 string `orm:"size(256);null"`     // 用户 UUID
 	T_name                 string `orm:"size(256);null"`     // 标题
-	T_VerifyTemplate_class string `orm:"size(256);null"`     // 模id
-	T_VerifyTemplate_id    string `orm:"size(256);null"`     // 模id
+	T_VerifyTemplate_class string `orm:"size(256);null"`     // 模id
+	T_VerifyTemplate_id    string `orm:"size(256);null"`     // 模id
 	T_deadline             string `orm:"size(256);null"`     // 截止时间
 	T_scheme               string `orm:"size(256);null"`     // 实施方案 负责人UUID
 	T_collection           string `orm:"size(256);null"`     // 数据采集 负责人UUID
@@ -154,7 +154,7 @@ type Task struct {
 	T_reporting_state      int    `orm:"size(2);default(0)"` // 报告编写 状态 0 未完成 1 已完成(客户通过) 2已退回(客户) 3已通过(负责人) 4已退回(负责人) 5已提交
 	T_delivery_state       int    `orm:"size(2);default(0)"` // 交付审核 状态 0 未完成 1 已完成 2 处理中
 	T_marking_state        int    `orm:"size(2);default(0)"` // 验证标识 状态 0 未完成 1 已完成
-	T_record string  `orm:"type(text)"`     // 领导备注
+	T_record               string `orm:"type(text)"`         // 领导备注
 
 	T_VerifyDeviceDataStartTime string `orm:"size(256);null"` // 验证设备数据开始时间
 	T_VerifyDeviceDataEndTime   string `orm:"size(256);null"` // 验证设备数据开始时间
@@ -230,7 +230,6 @@ type Task struct {
 	T_reporting_return_times  int     `orm:"size(256);null"`  // 验证报告退回次数
 	T_reporting_audit_record  string  `orm:"type(text);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 保存时都会对时间自动更新
 }
@@ -243,8 +242,8 @@ type Task_ struct {
 	T_uuid                 string    // 用户 UUID
 	T_user_name            string    // 用户 UUID
 	T_name                 string    // 标题
-	T_VerifyTemplate_class string    // 任务模id
-	T_VerifyTemplate_id    string    // 任务模id
+	T_VerifyTemplate_class string    // 任务模id
+	T_VerifyTemplate_id    string    // 任务模id
 	T_deadline             string    // 截止时间
 	T_scheme               string    // 实施方案 负责人UUID
 	T_collection           string    // 数据采集 负责人UUID
@@ -289,7 +288,7 @@ type Task_ struct {
 	T_district_code string                        // 区 code
 	T_area_code     []string                      // 省市区
 	InfoCollection  InfoCollection.InfoCollection //信息采集
-	T_record  string //
+	T_record        string                        //
 
 }
 
@@ -297,14 +296,14 @@ type Task_Stat struct {
 	Id                  int
 	T_class             int    // 分类ID
 	T_InfoCollection_id string // 信息采集ID
-	T_InfoTemplate_id   string // 信息采集模ID
+	T_InfoTemplate_id   string // 信息采集模ID
 
 	T_task_id              string // 任务ID
 	T_uuid                 string // 用户 UUID
 	T_user_name            string // 用户 UUID
 	T_name                 string // 标题
-	T_VerifyTemplate_class string // 任务模id
-	T_VerifyTemplate_id    string // 任务模id
+	T_VerifyTemplate_class string // 任务模id
+	T_VerifyTemplate_id    string // 任务模id
 	T_deadline             string // 截止时间
 	T_scheme               string // 实施方案 负责人UUID
 	T_collection           string // 数据采集 负责人UUID
@@ -392,7 +391,7 @@ type Task_Stat struct {
 	T_reporting_audit_record  string                          // 验证报告审核记录
 	InfoCollection            InfoCollection.InfoCollection_R //信息菜鸡
 
-	T_record  string                          //
+	T_record string //
 
 }
 
@@ -581,7 +580,7 @@ func TaskToTask_Stat(T Task, userMap, adminMap map[string]string) (T_ Task_Stat)
 	T_.T_collection_start_time = T.T_collection_start_time
 	T_.T_collection_end_time = T.T_collection_end_time
 	if T.T_collection_state == TaskCollectionStatePass ||
-		T.T_collection_state == TaskCollectionStateSubmitted{
+		T.T_collection_state == TaskCollectionStateSubmitted {
 		T_.T_collection_time_interval = lib.ConvertMinutesToDHM(int(T.T_collection_time_interval))
 		T_.T_collection_overtime = lib.ConvertMinutesToDHM(int(T.T_collection_overtime))
 	}
@@ -766,6 +765,7 @@ func Add_Task_Visit(m Task) bool {
 	}
 	return false
 }
+
 // 获取用户任务列表
 func Read_Task_List_All() ([]Task, int) {
 
@@ -783,6 +783,7 @@ func Read_Task_List_All() ([]Task, int) {
 
 	return r, int(cnt)
 }
+
 // 获取用户任务列表
 func Read_UserTask_List(T_uuid string, T_name string, userMap, adminMap map[string]string, page int, page_z int) ([]Task_, int) {
 
@@ -818,7 +819,7 @@ func Read_UserTask_List(T_uuid string, T_name string, userMap, adminMap map[stri
 // 获取任务列表
 func Read_Task_List(T_uuid, T_admin, T_name, T_InfoCollection_id string, T_scheme, T_collection, T_reporting, T_delivery,
 	T_scheme_state, T_collection_state, T_reporting_state, T_delivery_state, T_marking_state string,
-	T_company_list []string, userMap, adminMap map[string]string,CreateTime string, page int, page_z int) ([]Task_, int) {
+	T_company_list []string, userMap, adminMap map[string]string, CreateTime string, page int, page_z int) ([]Task_, int) {
 
 	o := orm.NewOrm()
 
@@ -875,13 +876,13 @@ func Read_Task_List(T_uuid, T_admin, T_name, T_InfoCollection_id string, T_schem
 		cond1 = cond1.And("T_marking_state", T_marking_state)
 	}
 	if len(CreateTime) > 0 {
-		CreateTime_s := strings.Split(CreateTime,"-")
+		CreateTime_s := strings.Split(CreateTime, "-")
 
-		if len(CreateTime_s) == 2{
+		if len(CreateTime_s) == 2 {
 			// 定义开始和结束时间
 			start := time.Date(lib.To_int(CreateTime_s[0]), time.Month(lib.To_int(CreateTime_s[1])), 1, 0, 0, 0, 0, time.UTC)
 			end := start.AddDate(0, 1, 0) // 下个月的第一天
-			logs.Println("CreateTime_s:",start.Format("2006-01-02 15:04:05"),end.Format("2006-01-02 15:04:05"))
+			logs.Println("CreateTime_s:", start.Format("2006-01-02 15:04:05"), end.Format("2006-01-02 15:04:05"))
 			cond1 = cond1.And("CreateTime__gte", start).And("CreateTime__lt", end)
 		}
 
@@ -990,7 +991,7 @@ func Get_Task_UserList(T_type string) []string {
 
 func Read_Task_Stat(T_uuid, T_admin, T_name, T_InfoCollection_id string, T_project, T_scheme, T_collection, T_reporting, T_delivery,
 	T_scheme_state, T_collection_state, T_reporting_state, T_delivery_state, T_marking_state string,
-	T_company_list []string, userMap, adminMap map[string]string,CreateTime string, page int, page_z int) ([]Task_Stat, int) {
+	T_company_list []string, userMap, adminMap map[string]string, CreateTime string, page int, page_z int) ([]Task_Stat, int) {
 
 	o := orm.NewOrm()
 
@@ -1050,13 +1051,13 @@ func Read_Task_Stat(T_uuid, T_admin, T_name, T_InfoCollection_id string, T_proje
 		cond1 = cond1.And("T_marking_state", T_marking_state)
 	}
 	if len(CreateTime) > 0 {
-		CreateTime_s := strings.Split(CreateTime,"-")
+		CreateTime_s := strings.Split(CreateTime, "-")
 
-		if len(CreateTime_s) == 2{
+		if len(CreateTime_s) == 2 {
 			// 定义开始和结束时间
 			start := time.Date(lib.To_int(CreateTime_s[0]), time.Month(lib.To_int(CreateTime_s[1])), 1, 0, 0, 0, 0, time.UTC)
 			end := start.AddDate(0, 1, 0) // 下个月的第一天
-			logs.Println("CreateTime_s:",start.Format("2006-01-02 15:04:05"),end.Format("2006-01-02 15:04:05"))
+			logs.Println("CreateTime_s:", start.Format("2006-01-02 15:04:05"), end.Format("2006-01-02 15:04:05"))
 			cond1 = cond1.And("CreateTime__gte", start).And("CreateTime__lt", end)
 		}
 
@@ -1077,9 +1078,8 @@ func Read_Task_Stat(T_uuid, T_admin, T_name, T_InfoCollection_id string, T_proje
 	return TaskList, int(cnt)
 }
 
-
 // 获取用户任务列表
-func Read_UserTask_StatisticalRanking(T_uuid,T_scheme string) []Task {
+func Read_UserTask_StatisticalRanking(T_uuid, T_scheme string) []Task {
 
 	o := orm.NewOrm()
 
@@ -1089,12 +1089,10 @@ func Read_UserTask_StatisticalRanking(T_uuid,T_scheme string) []Task {
 	cond := orm.NewCondition()
 	//cond_T_uuid := orm.NewCondition().Or("T_scheme", T_uuid).Or("T_collection", T_uuid).Or("T_reporting", T_uuid)
 	//cond1 := cond.And("T_name__icontains", T_name).And("T_State", 1)
-	cond1 := cond.And("T_State", 1).And(T_scheme,T_uuid)
-
+	cond1 := cond.And("T_State", 1).And(T_scheme, T_uuid)
 
 	qs.Limit(500, 0).SetCond((*orm2.Condition)(cond1)).OrderBy("-UpdateTime").All(&r)
 	qs.SetCond((*orm2.Condition)(cond1)).Count()
 
-
 	return r
-}
+}

+ 1 - 1
models/Task/TaskData.go

@@ -18,7 +18,7 @@ const (
 	Humidity    = "Humidity"
 )
 
-// 模
+// 模
 type TaskData struct {
 	Id int `orm:"column(ID);size(11);auto;pk"`
 

+ 21 - 20
models/Task/TaskTime.go

@@ -10,7 +10,7 @@ import (
 	"time"
 )
 
-// 模
+// 模
 type TaskTime struct {
 	Id int `orm:"column(ID);size(11);auto;pk"`
 
@@ -40,7 +40,7 @@ type TaskTime_R struct {
 	T_task_id    string // 任务ID
 	T_task_type  int    // 任务类型 方案0 实施1 报告2
 	T_uuid       string // 用户 UUID
-	T_uuid_name       string // 用户 UUID
+	T_uuid_name  string // 用户 UUID
 	T_start_time string // 开始时间
 	T_end_time   string // 结束时间
 	T_remarks    string // 验证方案客户签字确认图片
@@ -49,16 +49,16 @@ type TaskTime_R struct {
 
 // -------------------------------------------------------------
 func TaskTimeToTaskTime_R(T TaskTime) (T_r TaskTime_R) {
-	T_r.Id           = T.Id
-	T_r.T_task_id    = T.T_task_id
-	T_r.T_task_type  = T.T_task_type
-	T_r.T_uuid       = T.T_uuid
+	T_r.Id = T.Id
+	T_r.T_task_id = T.T_task_id
+	T_r.T_task_type = T.T_task_type
+	T_r.T_uuid = T.T_uuid
 	if err, r := Account.Read_Admin_ByT_uuid(T.T_uuid); err == nil {
 		T_r.T_uuid_name = r.T_name
 	}
 	T_r.T_start_time = T.T_start_time
-	T_r.T_end_time   = T.T_end_time
-	T_r.T_remarks    = T.T_remarks
+	T_r.T_end_time = T.T_end_time
+	T_r.T_remarks = T.T_remarks
 	return T_r
 }
 
@@ -157,31 +157,32 @@ func Read_TaskTime_List(T_task_id string, T_task_type int) ([]TaskTime_R, int64)
 
 	return TaskTime_r, cnt
 }
+
 // 获取项目延时
-func Read_TaskTime_Compute(T_task_id string, T_task_type int) (int64) {
-	List, _ := Read_TaskTime_List(T_task_id , T_task_type )
+func Read_TaskTime_Compute(T_task_id string, T_task_type int) int64 {
+	List, _ := Read_TaskTime_List(T_task_id, T_task_type)
 	var time_interval_Compute float64
-	for _,v := range List{
-		if len(v.T_end_time) == 0{
-			continue;
+	for _, v := range List {
+		if len(v.T_end_time) == 0 {
+			continue
 		}
 
-		_,err:=time.ParseInLocation("2006-01-02 15:04:05",v.T_end_time, time.Local)
+		_, err := time.ParseInLocation("2006-01-02 15:04:05", v.T_end_time, time.Local)
 		if err != nil {
-			continue;
+			continue
 		}
-		_,err=time.ParseInLocation("2006-01-02 15:04:05",v.T_start_time, time.Local)
+		_, err = time.ParseInLocation("2006-01-02 15:04:05", v.T_start_time, time.Local)
 		if err != nil {
-			continue;
+			continue
 		}
 		time_interval, err := lib.MinutesDifference(v.T_start_time, v.T_end_time)
 		if err != nil {
-			continue;
+			continue
 		}
 
 		time_interval_Compute += time_interval
 	}
 
-	logs.Println("Read_TaskTime_Compute",T_task_id,T_task_type,time_interval_Compute)
+	logs.Println("Read_TaskTime_Compute", T_task_id, T_task_type, time_interval_Compute)
 	return int64(time_interval_Compute)
-}
+}

+ 1 - 1
models/Template/Template.go

@@ -13,7 +13,7 @@ import (
 	"time"
 )
 
-// 模
+// 模
 type Template struct {
 	Id int `orm:"column(ID);size(11);auto;pk"`
 

+ 9 - 9
models/VerifyTemplate/VerifyTemplate.go

@@ -9,7 +9,7 @@ import (
 	"time"
 )
 
-// 模
+// 模
 type VerifyTemplate struct {
 	Id      int `orm:"column(ID);size(11);auto;pk"`
 	T_class int `orm:"size(8);default(0)"` // 分类
@@ -18,13 +18,13 @@ type VerifyTemplate struct {
 	T_name              string `orm:"size(256);null"`     // 标题
 	T_sort              int    `orm:"size(2);default(1)"` // 排
 
-	T_scheme    string `orm:"size(256);null"` // 方案模
-	T_reporting string `orm:"size(256);null"` // 报告模
-	T_marking   string `orm:"size(256);null"` // 标识模
+	T_scheme    string `orm:"size(256);null"` // 方案模
+	T_reporting string `orm:"size(256);null"` // 报告模
+	T_marking   string `orm:"size(256);null"` // 标识模
 	T_inspect   string `orm:"size(256);null"` // 自检
 	T_cover     string `orm:"size(256);null"` // 封面
 
-	T_deploy  string   `orm:"type(text);null"` // 部点选项  格式 布点内容1|布点内容2|布点内容3
+	T_deploy string `orm:"type(text);null"` // 部点选项  格式 布点内容1|布点内容2|布点内容3
 
 	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 保存时都会对时间自动更新
@@ -35,12 +35,12 @@ type VerifyTemplate_R struct {
 	T_name              string `orm:"size(256);null"` // 标题
 	T_sort              int    `orm:"size(200);null"` // 分类
 
-	T_scheme    string // 方案模
-	T_reporting string // 报告模
+	T_scheme    string // 方案模
+	T_reporting string // 报告模
 	T_inspect   string // 自检
-	T_marking   string // 标识模
+	T_marking   string // 标识模
 	T_cover     string // 封面
-	T_deploy  string  // 部点选项  格式 布点内容1|布点内容2|布点内容3
+	T_deploy    string // 部点选项  格式 布点内容1|布点内容2|布点内容3
 }
 
 func (t *VerifyTemplate) TableName() string {

+ 151 - 1
models/VerifyTemplate/VerifyTemplateClass.go

@@ -3,14 +3,17 @@ package VerifyTemplate
 import (
 	"ColdVerify_server/lib"
 	"ColdVerify_server/logs"
+	"errors"
+	"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"
+	"strings"
 )
 
-// 模
+// 模
 type VerifyTemplateClass struct {
 	Id     int    `orm:"column(ID);size(11);auto;pk"`
 	T_fid  int    `orm:"size(200);null"` // 父级分类ID,主类 为 0
@@ -151,3 +154,150 @@ func ReadVerifyTemplateClassIds_T_path(T_path string) (VerifyTemplateClassIds []
 	}
 	return VerifyTemplateClassIds
 }
+
+// 通过T_path查询所有子验证分类
+func ReadVerifyTemplateClassList_T_path(T_path string, parentId int) (r []VerifyTemplateClass) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(VerifyTemplateClass))
+	var VerifyTemplateClassList []VerifyTemplateClass
+	qs.Filter("T_path__startswith", T_path).Filter("T_State", 1).All(&VerifyTemplateClassList)
+	r = VerifyTemplateClass_Call(VerifyTemplateClassList, parentId)
+	return r
+}
+
+// 递归复制节点
+func copyVerifyTemplateClass(o orm.Ormer, r *VerifyTemplateClass, newParentId int, parentPath string) (*VerifyTemplateClass, error) {
+
+	// 创建新节点
+	verifyTemplateClass := VerifyTemplateClass{
+		T_fid:   newParentId,
+		T_name:  r.T_name, // 添加副本标识
+		T_State: 1,
+		// T_path 将在插入后更新
+	}
+
+	// 插入数据库
+	newVerifyTemplateClassId, err := o.Insert(&verifyTemplateClass)
+	if err != nil {
+		return nil, err
+	}
+
+	newPath := parentPath + strconv.Itoa(verifyTemplateClass.Id) + "/"
+
+	// 更新路径
+	verifyTemplateClass.Id = int(newVerifyTemplateClassId)
+	verifyTemplateClass.T_path = newPath
+	_, err = o.Update(&verifyTemplateClass, "T_path")
+	if err != nil {
+		return nil, err
+	}
+
+	// 复制子节点
+	for _, child := range r.Children {
+		_, err = copyVerifyTemplateClass(o, &child, verifyTemplateClass.Id, newPath)
+		if err != nil {
+			return nil, err
+		}
+	}
+	// 分类1
+	//  ----模版
+	//	--------标签
+	// 分类2
+	//   -- 子分类
+	// 2 复制分类下的模版
+	// 3 复制模版下的标签
+	VerifyTemplateList, _ := Read_VerifyTemplate_List(r.Id, "", 0, 9999)
+	for _, v := range VerifyTemplateList {
+		verifyTemplate, is := Read_VerifyTemplate(v.T_VerifyTemplate_id)
+		if !is {
+			return nil, errors.New("查询验证模版失败")
+		}
+
+		newVerifyTemplate := VerifyTemplate{
+			T_class: verifyTemplateClass.Id, // 新的分类id
+			T_name:  verifyTemplate.T_name,
+			T_sort:  verifyTemplate.T_sort,
+		}
+
+		newVerifyTemplateId, is := Add_VerifyTemplate(newVerifyTemplate)
+		if !is {
+			return nil, errors.New("复制验证模版失败")
+		}
+
+		// 复制模版下面的标签
+		mapList, _ := Read_VerifyTemplateMap_List(v.T_VerifyTemplate_id, 0, 0)
+		tempMap := make(map[string]struct{})
+		idList := make([]string, len(mapList))
+		// 生成mapList长度的T_id
+		for i := 0; i < len(mapList); i++ {
+			// 生成编号
+			rand_x := 0
+			T_id := ""
+			for true {
+				T_id = lib.GetRandstring(4, "", int64(rand_x))
+				_, is = Read_VerifyTemplateMap(T_id)
+				if !is {
+					if _, ok := tempMap[T_id]; !ok {
+						break
+					}
+				}
+				rand_x += 1
+			}
+			tempMap[T_id] = struct{}{}
+			idList[i] = T_id
+		}
+		mapInsertList := make([]VerifyTemplateMap, 0)
+		for i, m := range mapList {
+			vtm := VerifyTemplateMap{
+				T_id:                idList[i],
+				T_VerifyTemplate_id: newVerifyTemplateId,
+				T_name:              m.T_name,
+				T_text:              m.T_text,
+				T_label:             m.T_label,
+				T_sort:              m.T_sort,
+			}
+
+			mapInsertList = append(mapInsertList, vtm)
+		}
+
+		_, is = Add_VerifyTemplateMapMulti(mapInsertList)
+		if !is {
+			return nil, errors.New("复制验证模版标签失败")
+		}
+	}
+
+	return &verifyTemplateClass, nil
+}
+
+func CopyVerifyTemplateClassTree(T_path string, parentId int, T_name string) (newRoot *VerifyTemplateClass, err error) {
+	// 获取原始节点及其子树
+	o := orm.NewOrm()
+	srcNode := ReadVerifyTemplateClassList_T_path(T_path, parentId)
+	if len(srcNode) == 0 {
+		return nil, errors.New("查询验证模版分类失败")
+	}
+	srcNode[0].T_name = T_name
+	// 开启事务
+	err = o.Begin()
+	if err != nil {
+		o.Rollback()
+		return nil, fmt.Errorf("事务启动失败: %v", err)
+	}
+
+	s := strings.Split(strings.Trim(T_path, "/"), "/")
+	parentPath := fmt.Sprintf("/%s/", strings.Join(s[:len(s)-1], "/"))
+	// 递归复制
+	newRoot, err = copyVerifyTemplateClass(o, &srcNode[0], parentId, parentPath) // 假设复制到根目录
+	if err != nil {
+		o.Rollback()
+		return nil, err
+	}
+
+	// 提交事务
+	if err = o.Commit(); err != nil {
+		o.Rollback()
+		return nil, fmt.Errorf("事务提交失败: %v", err)
+	}
+
+	return newRoot, nil
+}

+ 21 - 21
models/VerifyTemplate/VerifyTemplateMap.go

@@ -10,14 +10,14 @@ import (
 	"time"
 )
 
-// 模
+// 模
 type VerifyTemplateMap struct {
 	Id int `orm:"column(ID);size(11);auto;pk"`
 
-	T_id                string `orm:"size(256);null"`     // 标题
-	T_VerifyTemplate_id string `orm:"size(256);null"`     // 标题
-	T_label             int    `orm:"size(2);default(1)"` // 数据类型
-	T_source            int    `orm:"size(2);default(0)"` // 来源 0-所有 1-方案 2-报告 3-表单
+	T_id                string `orm:"index,size(256);null"` //
+	T_VerifyTemplate_id string `orm:"size(256);null"`       // 验证模版id
+	T_label             int    `orm:"size(2);default(1)"`   // 数据类型
+	T_source            int    `orm:"size(2);default(0)"`   // 来源 0-所有 1-方案 2-报告 3-表单
 
 	//1:文本
 	//2:数值
@@ -27,10 +27,10 @@ type VerifyTemplateMap struct {
 	//9:当期时间(开始与结束时间)(2022-01-01 13:08|2022-01-02 13:08)
 	//10:图片
 	//11:CAD
-	T_name string `orm:"size(256);null"`     // 标签名称
-	T_text string `orm:"size(256);null"`     // 描述
-	T_sort int    `orm:"size(2);default(1)"` // 排序
-	T_Required int    `orm:"size(2);default(0)"` // 必填项  1 必填   0 非必填
+	T_name         string `orm:"size(256);null"`     // 标签名称
+	T_text         string `orm:"size(256);null"`     // 描述
+	T_sort         int    `orm:"size(2);default(1)"` // 排序
+	T_Required     int    `orm:"size(2);default(0)"` // 必填项  1 必填   0 非必填
 	T_Construction int    `orm:"size(2);default(0)"` // 实施(是否在APP 上显示)  1 显示   0 不显示
 
 	// 验证流程
@@ -43,18 +43,18 @@ type VerifyTemplateMap struct {
 }
 
 type VerifyTemplateMap_R struct {
-	T_id         string
-	T_source     int    // 数据类型
-	T_label      int    // 来源
-	T_name       string // 标签名称
-	T_text       string // 描述
-	T_sort       int    // 排序
-	T_Required       int    // 必填项  1 必填   0 非必填
-	T_Construction       int   // 实施(是否在APP 上显示)  1 显示   0 不显示
-	T_flow_sort  int    // 验证流程排序
-	T_max_time   int    // 验证流程最大时间
-	T_min_time   int    // 验证流程最小时间
-	T_start_time int    // 任务开始时间 app
+	T_id           string
+	T_source       int    // 数据类型
+	T_label        int    // 来源
+	T_name         string // 标签名称
+	T_text         string // 描述
+	T_sort         int    // 排序
+	T_Required     int    // 必填项  1 必填   0 非必填
+	T_Construction int    // 实施(是否在APP 上显示)  1 显示   0 不显示
+	T_flow_sort    int    // 验证流程排序
+	T_max_time     int    // 验证流程最大时间
+	T_min_time     int    // 验证流程最小时间
+	T_start_time   int    // 任务开始时间 app
 }
 
 func (t *VerifyTemplateMap) TableName() string {

+ 3 - 3
models/VerifyTemplate/VerifyTemplateMapData.go

@@ -9,12 +9,12 @@ import (
 	"time"
 )
 
-// 模
+// 模
 type VerifyTemplateMapData struct {
 	Id                     int    `orm:"column(ID);size(11);auto;pk"`
 	T_source               int    `orm:"size(2);"`             // 来源 0-所有 1-方案 2-报告 3-表单
 	T_task_id              string `orm:"index,size(256);null"` // 任务id
-	T_VerifyTemplate_id    string `orm:"index,size(256);null"` // 模id
+	T_VerifyTemplate_id    string `orm:"index,size(256);null"` // 模id
 	T_VerifyTemplateMap_id string `orm:"index,size(256);null"` // 标签id
 	T_value                string `orm:"size(1024);null"`      // 内容
 	T_Required             int    `orm:"size(2);default(0)"`   // 必填项  1 必填   0 非必填
@@ -98,7 +98,7 @@ func VerifyTemplateMapDataToVerifyTemplateMapData_R(T VerifyTemplateMap, VerifyT
 	return T_r
 }
 
-// 添加或更新模数据 并添加历史数据
+// 添加或更新模数据 并添加历史数据
 func AddOrUpdate_VerifyTemplateMapData_ADD_History(List []VerifyTemplateMapData, T_source int, T_uuid string) (ids []int64, is bool) {
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(VerifyTemplateMapData))

+ 2 - 2
models/VerifyTemplate/VerifyTemplateMapDataHistory.go

@@ -9,12 +9,12 @@ import (
 	"time"
 )
 
-// 模
+// 模
 type VerifyTemplateMapDataHistory struct {
 	Id                     int    `orm:"column(ID);size(11);auto;pk"`
 	T_source               int    `orm:"size(4);"`             // 来源 0-所有 1-方案 2-报告 3-表单
 	T_task_id              string `orm:"index,size(256);null"` // 任务id
-	T_VerifyTemplate_id    string `orm:"size(256);null"`       // 模id
+	T_VerifyTemplate_id    string `orm:"size(256);null"`       // 模id
 	T_VerifyTemplateMap_id string `orm:"size(256);null"`       // 标签id
 	T_value                string `orm:"type(text);null"`      // 内容
 	T_Required             int    `orm:"size(2);default(0)"`   // 必填项  1 必填   0 非必填

+ 1 - 1
routers/Device.go

@@ -20,7 +20,7 @@ func init() {
 	beego.Router("/DeviceClassList/Up", &controllers.DeviceClassController{}, "*:List_Up")                               // 编辑设备分类列表
 	beego.Router("/DeviceClassList/Del", &controllers.DeviceClassController{}, "*:List_Del")                             // 删除设备分类列表
 	beego.Router("/DeviceClassList/Copy", &controllers.DeviceClassController{}, "*:List_Copy")                           // 复制
-	beego.Router("/DeviceClassList/Template_Download", &controllers.DeviceClassController{}, "*:List_Template_Download") // 添加设备列表模
+	beego.Router("/DeviceClassList/Template_Download", &controllers.DeviceClassController{}, "*:List_Template_Download") // 添加设备列表模
 	beego.Router("/DeviceClassList/Del_Duplication", &controllers.DeviceClassController{}, "*:List_Del_Duplication")     // 删除重复设备列表
 
 	// - 设备管理

+ 14 - 13
routers/InfoCollection.go

@@ -14,19 +14,20 @@ func init() {
 	beego.Router("/InfoCollection/Del", &controllers.InfoCollectionController{}, "*:Del")                         // 删除信息采集
 	beego.Router("/InfoCollection/UpStatus", &controllers.InfoCollectionController{}, "*:UpStatus")               // 修改信息采集状态
 	beego.Router("/InfoCollection/AuditRecordList", &controllers.InfoCollectionController{}, "*:AuditRecordList") // 信息采集审核记录
-	beego.Router("/InfoCollection/Statistics", &controllers.InfoCollectionController{}, "*:Statistics")      // 小程序统计
-
-
-	beego.Router("/InfoTemplate/Class_List", &controllers.InfoTemplateController{}, "*:Class_List") // 分类列表
-	beego.Router("/InfoTemplate/Class_Add", &controllers.InfoTemplateController{}, "*:Class_Add")   // 分类添加
-	beego.Router("/InfoTemplate/Class_Up", &controllers.InfoTemplateController{}, "*:Class_Up")     // 分类修改
-	beego.Router("/InfoTemplate/Class_Del", &controllers.InfoTemplateController{}, "*:Class_Del")   // 分类删除
-
-	beego.Router("/InfoTemplate/List", &controllers.InfoTemplateController{}, "*:List") // 模板列表
-	beego.Router("/InfoTemplate/Add", &controllers.InfoTemplateController{}, "*:Add")   // 模板添加
-	beego.Router("/InfoTemplate/Up", &controllers.InfoTemplateController{}, "*:Up")     // 模板编辑
-	beego.Router("/InfoTemplate/Del", &controllers.InfoTemplateController{}, "*:Del")   // 模板修改
-	beego.Router("/InfoTemplate/Copy", &controllers.InfoTemplateController{}, "*:Copy") // 模板复制
+	beego.Router("/InfoCollection/Statistics", &controllers.InfoCollectionController{}, "*:Statistics")           // 小程序统计
+	beego.Router("/InfoCollection/Copy", &controllers.InfoCollectionController{}, "*:Copy")                       // 复制信息采集
+
+	beego.Router("/InfoTemplate/Class_List", &controllers.InfoTemplateController{}, "*:Class_List") // 信息采集分类列表
+	beego.Router("/InfoTemplate/Class_Add", &controllers.InfoTemplateController{}, "*:Class_Add")   // 信息采集分类添加
+	beego.Router("/InfoTemplate/Class_Up", &controllers.InfoTemplateController{}, "*:Class_Up")     // 信息采集分类修改
+	beego.Router("/InfoTemplate/Class_Del", &controllers.InfoTemplateController{}, "*:Class_Del")   // 信息采集分类删除
+	beego.Router("/InfoTemplate/Class_Copy", &controllers.InfoTemplateController{}, "*:Class_Copy") // 复制信息采集分类
+
+	beego.Router("/InfoTemplate/List", &controllers.InfoTemplateController{}, "*:List") // 模版列表
+	beego.Router("/InfoTemplate/Add", &controllers.InfoTemplateController{}, "*:Add")   // 模版添加
+	beego.Router("/InfoTemplate/Up", &controllers.InfoTemplateController{}, "*:Up")     // 模版编辑
+	beego.Router("/InfoTemplate/Del", &controllers.InfoTemplateController{}, "*:Del")   // 模版修改
+	beego.Router("/InfoTemplate/Copy", &controllers.InfoTemplateController{}, "*:Copy") // 模版复制
 
 	beego.Router("/InfoTemplate/Map_List", &controllers.InfoTemplateController{}, "*:Map_List") // 标签列表
 	beego.Router("/InfoTemplate/Map_Add", &controllers.InfoTemplateController{}, "*:Map_Add")   // 标签添加

+ 26 - 1
routers/VerifyTemplate.go

@@ -7,7 +7,7 @@ import (
 
 func init() {
 
-	// 模路由
+	// 模路由
 	beego.Router("/Template/List_html", &controllers.TemplateController{}, "*:List_html") // 获取未读消息
 	beego.Router("/Template/List_", &controllers.TemplateController{}, "*:List_")         // 获取未读消息
 	beego.Router("/Template/List", &controllers.TemplateController{}, "*:List")           // 模版列表
@@ -16,4 +16,29 @@ func init() {
 	beego.Router("/Template/Up", &controllers.TemplateController{}, "*:Up")               // 编辑模版
 	beego.Router("/Template/Del", &controllers.TemplateController{}, "*:Del")             // 删除模版
 
+	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/Class_Copy", &controllers.VerifyTemplateController{}, "*:Class_Copy") // 复制信息采集分类
+
+	beego.Router("/VerifyTemplate/List", &controllers.VerifyTemplateController{}, "*:List") // 模版列表
+	beego.Router("/VerifyTemplate/Add", &controllers.VerifyTemplateController{}, "*:Add")   // 模版添加
+	beego.Router("/VerifyTemplate/Up", &controllers.VerifyTemplateController{}, "*:Up")     // 模版编辑
+	beego.Router("/VerifyTemplate/Del", &controllers.VerifyTemplateController{}, "*:Del")   // 模版修改
+	beego.Router("/VerifyTemplate/Get", &controllers.VerifyTemplateController{}, "*:Get")   // 模版修改
+	beego.Router("/VerifyTemplate/Copy", &controllers.VerifyTemplateController{}, "*:Copy") // 模版复制
+
+	beego.Router("/VerifyTemplate/Map_List", &controllers.VerifyTemplateController{}, "*:Map_List") // 标签列表
+	beego.Router("/VerifyTemplate/Map_Add", &controllers.VerifyTemplateController{}, "*:Map_Add")   // 标签添加
+	beego.Router("/VerifyTemplate/Map_Up", &controllers.VerifyTemplateController{}, "*:Map_Up")     // 标签修改
+	beego.Router("/VerifyTemplate/Map_Del", &controllers.VerifyTemplateController{}, "*:Map_Del")   // 标签删除
+
+	beego.Router("/VerifyTemplateMapData/List", &controllers.VerifyTemplateController{}, "*:Map_Data_List")                           // 标签数据列表
+	beego.Router("/VerifyTemplateMapData/Pu", &controllers.VerifyTemplateController{}, "*:Map_Data_Pu")                               // 添加标签数据
+	beego.Router("/VerifyTemplateMapData/Copy", &controllers.VerifyTemplateController{}, "*:Map_Data_Copy")                           // 复制标签数据
+	beego.Router("/VerifyTemplateMapData/Clear_Value", &controllers.VerifyTemplateController{}, "*:Map_Data_Clear_Value")             // 复制标签数据
+	beego.Router("/VerifyTemplateMapData/History_List", &controllers.VerifyTemplateController{}, "*:Map_Data_History_List")           // 历史提交列表
+	beego.Router("/VerifyTemplateMapData/History_Data_List", &controllers.VerifyTemplateController{}, "*:Map_Data_History_Data_List") // 历史提交列表
+	beego.Router("/VerifyTemplateMapData/History_Recover", &controllers.VerifyTemplateController{}, "*:Map_Data_History_Recover")     // 历史提交列表
 }

+ 0 - 29
routers/router.go

@@ -1,34 +1,5 @@
 package routers
 
-import (
-	"ColdVerify_server/controllers"
-	beego "github.com/beego/beego/v2/server/web"
-)
-
 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")     // 模板编辑
-	beego.Router("/VerifyTemplate/Del", &controllers.VerifyTemplateController{}, "*:Del")   // 模板修改
-	beego.Router("/VerifyTemplate/Get", &controllers.VerifyTemplateController{}, "*:Get")   // 模板修改
-	beego.Router("/VerifyTemplate/Copy", &controllers.VerifyTemplateController{}, "*:Copy") // 模板复制
-
-	beego.Router("/VerifyTemplate/Map_List", &controllers.VerifyTemplateController{}, "*:Map_List") // 标签列表
-	beego.Router("/VerifyTemplate/Map_Add", &controllers.VerifyTemplateController{}, "*:Map_Add")   // 标签添加
-	beego.Router("/VerifyTemplate/Map_Up", &controllers.VerifyTemplateController{}, "*:Map_Up")     // 标签修改
-	beego.Router("/VerifyTemplate/Map_Del", &controllers.VerifyTemplateController{}, "*:Map_Del")   // 标签删除
-
-	beego.Router("/VerifyTemplateMapData/List", &controllers.VerifyTemplateController{}, "*:Map_Data_List")                           // 标签数据列表
-	beego.Router("/VerifyTemplateMapData/Pu", &controllers.VerifyTemplateController{}, "*:Map_Data_Pu")                               // 添加标签数据
-	beego.Router("/VerifyTemplateMapData/Copy", &controllers.VerifyTemplateController{}, "*:Map_Data_Copy")                           // 复制标签数据
-	beego.Router("/VerifyTemplateMapData/Clear_Value", &controllers.VerifyTemplateController{}, "*:Map_Data_Clear_Value")             // 复制标签数据
-	beego.Router("/VerifyTemplateMapData/History_List", &controllers.VerifyTemplateController{}, "*:Map_Data_History_List")           // 历史提交列表
-	beego.Router("/VerifyTemplateMapData/History_Data_List", &controllers.VerifyTemplateController{}, "*:Map_Data_History_Data_List") // 历史提交列表
-	beego.Router("/VerifyTemplateMapData/History_Recover", &controllers.VerifyTemplateController{}, "*:Map_Data_History_Recover")     // 历史提交列表
 }