Sfoglia il codice sorgente

add:模板复制,模板数据复制

zoie 2 anni fa
parent
commit
d1a2e52726

+ 8 - 0
Nats/NatsServer/NatsLocal.go

@@ -30,3 +30,11 @@ func Import_TaskData(T_uuid, T_task_id string, TaskData_Num int) {
 		logs.Error("Nats =>", lib.FuncName(), err)
 	}
 }
+func Create_Table(T_task_id string) {
+	logs.Println("Nats =>", lib.FuncName(), T_task_id)
+
+	err := lib.Nats.Publish("ColdVerify_Local_Create_Table", []byte(T_task_id))
+	if err != nil {
+		logs.Error("Nats =>", lib.FuncName(), err)
+	}
+}

+ 2 - 1
controllers/Device.go

@@ -194,7 +194,8 @@ func (c *DeviceController) Device_Class() {
 	}
 
 	var cnt int64
-	DeviceList, cnt := Device.Read_DeviceClassList_List(T_class, T_sn, page, 9999)
+	//DeviceList, cnt := Device.Read_DeviceClassList_List(T_class, T_sn, page, 9999)
+	DeviceList, cnt := Device.Read_DeviceClassList_OrderList(T_class, T_sn, page, 9999)
 
 	for _, v := range DeviceList {
 		Device_r, _ := Device.Read_Device(v.T_sn)

+ 3 - 1
controllers/DeviceClass.go

@@ -222,7 +222,9 @@ func (c *DeviceClassController) List_List() {
 	}
 
 	var cnt int64
-	List, cnt := Device.Read_DeviceClassList_List(T_class, T_sn, page, 9999)
+	//List, cnt := Device.Read_DeviceClassList_List(T_class, T_sn, page, 9999)
+	List, cnt := Device.Read_DeviceClassList_OrderList(T_class, T_sn, page, 9999)
+
 	page_size := math.Ceil(float64(cnt) / float64(page_z))
 	r_jsons.List = List
 	r_jsons.Page = page

+ 2 - 0
controllers/Task.go

@@ -1,6 +1,7 @@
 package controllers
 
 import (
+	"ColdVerify_server/Nats/NatsServer"
 	"ColdVerify_server/conf"
 	"ColdVerify_server/lib"
 	"ColdVerify_server/models/Account"
@@ -176,6 +177,7 @@ func (c *TaskController) Add() {
 		c.ServeJSON()
 		return
 	}
+	NatsServer.Create_Table(T_task_id)
 	// 添加任务操作日志
 	Task.Add_TaskLogs_T(User_r.T_uuid, T_task_id, "任务管理", "添加", var_)
 	System.Add_UserLogs_T(User_r.T_uuid, "任务管理", "添加", var_)

+ 2 - 1
controllers/TaskData.go

@@ -110,7 +110,7 @@ func (c *TaskDataController) Extract_TaskData_Back() {
 		return
 	}
 
-	// 采集中
+	// 更新状态为采集中
 	Task_r.T_collection_state = 2
 	if !Task.Update_Task(Task_r, "T_collection_state") {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "导出数据失败!"}
@@ -125,6 +125,7 @@ func (c *TaskDataController) Extract_TaskData_Back() {
 		DeviceClassList: DeviceClass_List,
 		Task:            Task_r,
 	}
+	// 后台执行打包数据
 	b, _ := msgpack.Marshal(&data)
 	_ = lib.Nats.Publish("ColdVerify_Server_Extract_TaskData_Back", b)
 

+ 190 - 21
controllers/VerifyTemplate.go

@@ -158,18 +158,113 @@ func (c *VerifyTemplateController) Del() {
 
 	T_VerifyTemplate_id := c.GetString("T_VerifyTemplate_id")
 
-	if r, is := VerifyTemplate.Read_VerifyTemplate(T_VerifyTemplate_id); is {
-		if !VerifyTemplate.Delete_VerifyTemplate(r) {
-			c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
-			c.ServeJSON()
-			return
+	r, is := VerifyTemplate.Read_VerifyTemplate(T_VerifyTemplate_id)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
+		c.ServeJSON()
+		return
+	}
+	if !VerifyTemplate.Delete_VerifyTemplate(r) {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	mapList, _ := VerifyTemplate.Read_VerifyTemplateMap_List(T_VerifyTemplate_id, 0, 0)
+	for _, v := range mapList {
+		if vtm, is := VerifyTemplate.Read_VerifyTemplateMap(v.T_id); is {
+			VerifyTemplate.Delete_VerifyTemplateMap(vtm)
 		}
-		System.Add_UserLogs_T(User_r.T_uuid, "验证模板", "删除", r)
-		c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	}
+
+	System.Add_UserLogs_T(User_r.T_uuid, "验证模板", "删除", r)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+
+}
+
+// 复制-
+func (c *VerifyTemplateController) 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
 	}
-	c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
+
+	T_VerifyTemplate_id := c.GetString("T_VerifyTemplate_id")
+	T_name := c.GetString("T_name")
+	r, is := VerifyTemplate.Read_VerifyTemplate(T_VerifyTemplate_id)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
+		c.ServeJSON()
+		return
+	}
+
+	var_ := VerifyTemplate.VerifyTemplate{
+		T_class: r.T_class,
+		T_name:  T_name,
+		T_sort:  r.T_sort,
+	}
+
+	new_id, is := VerifyTemplate.Add_VerifyTemplate(var_)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "复制失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	mapList, _ := VerifyTemplate.Read_VerifyTemplateMap_List(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 = VerifyTemplate.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([]VerifyTemplate.VerifyTemplateMap, 0)
+	for i, v := range mapList {
+		vtm := VerifyTemplate.VerifyTemplateMap{
+			T_id:                idList[i],
+			T_VerifyTemplate_id: new_id,
+			T_name:              v.T_name,
+			T_text:              v.T_text,
+			T_label:             v.T_label,
+			T_source:            v.T_source,
+			T_sort:              v.T_sort,
+			T_flow_sort:         v.T_flow_sort,
+			T_max_time:          v.T_max_time,
+			T_min_time:          v.T_min_time,
+		}
+
+		mapInsertList = append(mapInsertList, vtm)
+	}
+
+	_, is = VerifyTemplate.Add_VerifyTemplateMapMulti(mapInsertList)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "复制失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	System.Add_UserLogs_T(User_r.T_uuid, "验证模板", "复制", var_)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: new_id}
 	c.ServeJSON()
 	return
 }
@@ -187,14 +282,18 @@ func (c *VerifyTemplateController) Map_List() {
 	}
 
 	var r_jsons lib.R_JSONS
-	//page, _ := c.GetInt("page")
-	//if page < 1 {
-	//	page = 1
-	//}
-	//page_z, _ := c.GetInt("page_z")
-	//if page_z < 1 {
-	//	page_z = conf.Page_size
-	//}
+
+	// page, _ := c.GetInt("page")
+	//
+	//	if page < 1 {
+	//		page = 1
+	//	}
+	//
+	// page_z, _ := c.GetInt("page_z")
+	//
+	//	if page_z < 1 {
+	//		page_z = conf.Page_size
+	//	}
 	T_sort, _ := c.GetInt("T_sort")           // 排序
 	T_flow_sort, _ := c.GetInt("T_flow_sort") // 验证流程排序
 
@@ -347,6 +446,7 @@ func (c *VerifyTemplateController) Map_Del() {
 		c.ServeJSON()
 		return
 	}
+
 	c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
 	c.ServeJSON()
 	return
@@ -356,7 +456,7 @@ func (c *VerifyTemplateController) Map_Del() {
 
 // 标签数据列表 -
 func (c *VerifyTemplateController) Map_Data_List() {
-	//验证登录 User_is, User_r
+	// 验证登录 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: "请重新登录!"}
@@ -367,7 +467,7 @@ func (c *VerifyTemplateController) Map_Data_List() {
 	T_VerifyTemplate_id := c.GetString("T_VerifyTemplate_id")
 	T_source, _ := c.GetInt("T_source")
 
-	T_flow, _ := c.GetInt("T_flow")
+	T_flow, _ := c.GetInt("T_flow") // app 时间流程
 
 	if T_flow == 0 && T_source == 0 {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_source Err!"}
@@ -435,9 +535,6 @@ func (c *VerifyTemplateController) Map_Data_Pu() {
 
 	MapDataList := make([]VerifyTemplate.VerifyTemplateMapData, 0)
 	for _, v := range body.VerifyTemplateMapData {
-		if len(v.T_value) == 0 {
-			continue
-		}
 		val := VerifyTemplate.VerifyTemplateMapData{
 			T_source:               v.T_source,
 			T_task_id:              body.T_task_id,
@@ -465,6 +562,78 @@ func (c *VerifyTemplateController) Map_Data_Pu() {
 	return
 }
 
+func (c *VerifyTemplateController) Map_Data_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_source, _ := c.GetInt("T_source")
+
+	T_flow, _ := c.GetInt("T_flow")
+
+	if T_flow == 0 && T_source == 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_source Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	T_copy_task_id := c.GetString("T_copy_task_id")
+	copy_task, is := Task.Read_Task(T_copy_task_id)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_copy_task_id 错误!"}
+		c.ServeJSON()
+		return
+	}
+	T_paste_task_id := c.GetString("T_paste_task_id")
+	paste_task, is := Task.Read_Task(T_paste_task_id)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_paste_task_id 错误!"}
+		c.ServeJSON()
+		return
+	}
+
+	if copy_task.T_VerifyTemplate_id != paste_task.T_VerifyTemplate_id {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "仅支持相同模板间复制!"}
+		c.ServeJSON()
+		return
+	}
+
+	list := VerifyTemplate.Read_MapData_List(T_source, T_copy_task_id, copy_task.T_VerifyTemplate_id)
+
+	MapDataList := make([]VerifyTemplate.VerifyTemplateMapData, 0)
+	for _, v := range list {
+		val := VerifyTemplate.VerifyTemplateMapData{
+			T_source:               T_source,
+			T_task_id:              paste_task.T_task_id,
+			T_VerifyTemplate_id:    paste_task.T_VerifyTemplate_id,
+			T_VerifyTemplateMap_id: v.T_VerifyTemplateMap_id,
+
+			T_flow_sort: v.T_flow_sort,
+			T_max_time:  v.T_max_time,
+			T_min_time:  v.T_min_time,
+
+			T_value: v.T_value,
+		}
+		MapDataList = append(MapDataList, val)
+	}
+	var ids []int64
+	ids, is = VerifyTemplate.AddOrUpdate_VerifyTemplateMapData(MapDataList)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "保存失败"}
+		c.ServeJSON()
+		return
+	}
+	System.Add_UserLogs_T(User_r.T_uuid, "验证模版标签数据", "复制", MapDataList)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: ids}
+	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"))

+ 1 - 1
lib/libString.go

@@ -17,7 +17,7 @@ func GetRandstring(length int, char string, rand_x int64) string {
 	}
 
 	charArr := strings.Split(char, "")
-	ran := rand.New(rand.NewSource(time.Now().Unix() + rand_x))
+	ran := rand.New(rand.NewSource(time.Now().UnixMilli() + rand_x))
 
 	l := len(charArr)
 	for i := l - 1; i > 0; i-- {

+ 48 - 2
models/Device/DeviceClassList.go

@@ -4,10 +4,10 @@ import (
 	"ColdVerify_server/conf"
 	"ColdVerify_server/lib"
 	"ColdVerify_server/logs"
-	orm2 "github.com/beego/beego/v2/client/orm"
-
 	"encoding/json"
 	"fmt"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	"strconv"
 
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
@@ -221,6 +221,52 @@ func Read_DeviceClassList_List(T_class int, T_sn string, page int, page_z int) (
 	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
 	return r, cnt
 }
+func Read_DeviceClassList_OrderList(T_class int, T_sn string, page int, page_z int) (r []DeviceClassList, cnt int64) {
+
+	o := orm.NewOrm()
+	var maps_z []orm2.ParamsList
+	pagez := page_z
+
+	var offset int
+	if page <= 1 {
+		offset = 0
+	} else {
+		page -= 1
+		offset = page * pagez
+	}
+
+	sqlWhere := "t_class = " + strconv.Itoa(T_class) + " AND t__state = 1"
+
+	if len(T_sn) > 1 {
+		sqlWhere += " AND t_sn like \"%" + T_sn + "%\""
+	}
+
+	sql := "SELECT COUNT(ID) FROM device_class_list WHERE " + sqlWhere
+	fmt.Println(sql)
+	_, err := o.Raw(sql).ValuesList(&maps_z)
+	if err != nil {
+		return r, 0
+	}
+	if len(maps_z) == 0 {
+		return r, 0
+	}
+	//fmt.Println("maps_z;",maps_z[0][0])
+	sql = "SELECT *  FROM device_class_list WHERE " + sqlWhere + " ORDER BY t_id+0 "
+	if page_z != 9999 {
+		sql = sql + " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(pagez)
+	}
+
+	fmt.Println(sql)
+	_, err = o.Raw(sql).QueryRows(&r)
+	if err != nil {
+		logs.Println(lib.FuncName(), err)
+		return r, 0
+	}
+
+	//value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", cnt), 64)
+	key, _ := strconv.Atoi(maps_z[0][0].(string))
+	return r, int64(key)
+}
 
 // 获取列表
 func Read_DeviceClassList_List_id(T_class_Id int) (r []DeviceClassList) {

+ 16 - 4
models/VerifyTemplate/VerifyTemplate.go

@@ -84,8 +84,20 @@ func Read_VerifyTemplate(T_VerifyTemplate_id string) (r VerifyTemplate, is bool)
 	return r, true
 }
 
+func Read_VerifyTemplate_T_name(T_name string) (r VerifyTemplate, is bool) {
+
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(VerifyTemplate))
+	err := qs.Filter("T_name", T_name).One(&r)
+	if err != nil {
+		return r, false
+	}
+
+	return r, true
+}
+
 // 添加
-func Add_VerifyTemplate(r VerifyTemplate) (id int64, is bool) {
+func Add_VerifyTemplate(r VerifyTemplate) (T_VerifyTemplate_id string, is bool) {
 	o := orm.NewOrm()
 
 	// 生成编号
@@ -99,13 +111,13 @@ func Add_VerifyTemplate(r VerifyTemplate) (id int64, is bool) {
 		rand_x += 1
 	}
 
-	id, err := o.Insert(&r)
+	_, err := o.Insert(&r)
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
-		return 0, false
+		return "", false
 	}
 
-	return id, true
+	return r.T_VerifyTemplate_id, true
 }
 
 // 删除

+ 12 - 0
models/VerifyTemplate/VerifyTemplateMap.go

@@ -128,6 +128,18 @@ func Add_VerifyTemplateMap(r VerifyTemplateMap) (id int64, is bool) {
 	return id, true
 }
 
+// 添加
+func Add_VerifyTemplateMapMulti(r []VerifyTemplateMap) (id int64, is bool) {
+	o := orm.NewOrm()
+	n, err := o.InsertMulti(len(r), r)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return n, false
+	}
+
+	return n, true
+}
+
 // 删除
 func Delete_VerifyTemplateMap(v VerifyTemplateMap) bool {
 	o := orm.NewOrm()

+ 24 - 0
models/VerifyTemplate/VerifyTemplateMapData.go

@@ -163,6 +163,30 @@ func Read_VerifyTemplateMapData_List(T_source int, T_task_id, T_VerifyTemplate_i
 	return VerifyTemplateMapData_r
 }
 
+// 获取列表
+func Read_MapData_List(T_source int, T_task_id, T_VerifyTemplate_id string) []VerifyTemplateMapData {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	var r []VerifyTemplateMapData
+	qs := o.QueryTable(new(VerifyTemplateMapData))
+	cond := orm.NewCondition()
+
+	source := []int{T_source}
+	if T_source == 2 {
+		source = append(source, 3)
+	}
+	if T_source != 3 {
+		source = append(source, 0)
+	}
+
+	cond1 := cond.And("T_source__in", source).And("T_task_id", T_task_id).And("T_VerifyTemplate_id", T_VerifyTemplate_id)
+
+	qs.SetCond((*orm2.Condition)(cond1)).All(&r)
+
+	return r
+}
+
 func VerifyTemplateMapDataToMap(T []VerifyTemplateMapData) map[string]string {
 	maps := make(map[string]string, len(T))
 	for _, v := range T {

+ 2 - 0
routers/router.go

@@ -16,6 +16,7 @@ func init() {
 	beego.Router("/VerifyTemplate/Add", &controllers.VerifyTemplateController{}, "*:Add")   // 模板添加
 	beego.Router("/VerifyTemplate/Up", &controllers.VerifyTemplateController{}, "*:Up")     // 模板删除
 	beego.Router("/VerifyTemplate/Del", &controllers.VerifyTemplateController{}, "*:Del")   // 模板修改
+	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")   // 标签添加
@@ -24,4 +25,5 @@ func init() {
 
 	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") // 复制标签数据
 }