Explorar el Código

update: 数据校验排序,设备列表修改id及排序

zoie hace 2 años
padre
commit
2d36636d18
Se han modificado 7 ficheros con 268 adiciones y 35 borrados
  1. 26 9
      Nats/Nats.go
  2. 0 0
      Nats/NatsServer/NatsServer.go
  3. 1 1
      conf/app.conf
  4. 178 14
      controllers/TaskData.go
  5. 1 1
      models/Task/Task.go
  6. 58 9
      models/Task/TaskData.go
  7. 4 1
      routers/TaskData.go

+ 26 - 9
Nats/Nats.go

@@ -41,17 +41,35 @@ func NatsInit() {
 		logs.Info(lib.FuncName(), "任务数据-打包本地数据 开始打包数据...!")
 
 		type T_R struct {
-			T_uuid    string `xml:"T_uuid"`
-			T_task_id string `xml:"T_task_id"`
+			T_uuid       string `xml:"T_uuid"`
+			T_task_id    string `xml:"T_task_id"`
+			TaskData_Num int    `xml:"TaskData_Num"`
 		}
 		var t_r T_R
 		err := msgpack.Unmarshal(m.Data, &t_r)
 		if err != nil {
-			System.Add_Logs("Nats", "msgpack Unmarshal err", string(m.Data))
+			logs.Error("Nats", "msgpack Unmarshal err", string(m.Data))
 			return
 		}
 		T_uuid, T_task_id := t_r.T_uuid, t_r.T_task_id
 
+		Task_r, err := NatsServer.Read_Task(T_task_id)
+		if err != nil {
+			logs.Error(lib.FuncName(), err)
+		}
+
+		if t_r.TaskData_Num == 0 {
+			// 已采集 无数据
+			Task.CREATE_TaskData(conf.Local_AliasName, T_task_id)
+			Task.Truncate_TaskData(conf.Local_AliasName, T_task_id)
+			Task_r.T_collection_state = 3
+			err = NatsServer.Update_Task(Task_r)
+			if err != nil {
+				logs.Error(lib.FuncName(), err)
+			}
+			return
+		}
+
 		if err = lib.Create_Dir(conf.Sql_Temp_Dir); err != nil {
 			logs.Println("创建sql临时文件失败")
 		}
@@ -60,11 +78,12 @@ func NatsInit() {
 		var org string
 
 		//导出线上数据
+		logs.Info("--------开始导出线上数据---------")
 		i := 0
 		for i < 10 {
 			org, err = Task.Dump_TaskData(T_task_id, conf.MysqlServer2_Username, conf.MysqlServer2_Password, conf.MysqlServer2_UrlPort, conf.MysqlServer2_Database, sql_file)
 			if err != nil {
-				logs.Error(lib.FuncName(), "导出线上数据失败")
+				logs.Error(lib.FuncName(), "导出线上数据失败", err)
 			} else {
 				System.Add_UserLogs_T(T_uuid, "任务数据-导出线上数据", "z_task_data_"+T_task_id, org)
 				break
@@ -72,6 +91,7 @@ func NatsInit() {
 			i++
 		}
 
+		logs.Info("--------开始导入数据到本地---------")
 		j := 0
 		flag := false
 		Task.CREATE_TaskData(conf.Local_AliasName, T_task_id)
@@ -79,7 +99,7 @@ func NatsInit() {
 			Task.Truncate_TaskData(conf.Local_AliasName, T_task_id)
 			org, err = Task.Insert_TaskData(conf.MysqlServer_Username, conf.MysqlServer_Password, conf.MysqlServer_UrlPort, conf.MysqlServer_Database, sql_file)
 			if err != nil {
-				logs.Println("任务数据-打包本地数据", "z_task_data_"+T_task_id, err.Error())
+				logs.Error("任务数据-打包本地数据", "z_task_data_"+T_task_id, err.Error())
 			} else {
 				if Task.Check_TaskData_Num(T_task_id) {
 					System.Add_UserLogs_T(T_uuid, "任务数据-打包本地数据", "z_task_data_"+T_task_id, org)
@@ -90,10 +110,7 @@ func NatsInit() {
 			j++
 		}
 		// 重试10次后仍然没有成功导入数据
-		Task_r, err := NatsServer.Read_Task(T_task_id)
-		if err != nil {
-			logs.Error(lib.FuncName(), err)
-		}
+
 		if !flag {
 			Task.Truncate_TaskData(conf.Local_AliasName, T_task_id)
 			Task_r.T_collection_state = 0

+ 0 - 0
Nats/NatsServer/NatsMqtt.go → Nats/NatsServer/NatsServer.go


+ 1 - 1
conf/app.conf

@@ -18,7 +18,7 @@ Redis_dbNum = "2"
 
 # Mysql 本地
 Local_AliasName = "default"
-MysqlServer_UrlPort = "192.168.1.23:3306"
+MysqlServer_UrlPort = "192.168.11.23:3306"
 MysqlServer_Database = "coldverify_local"
 MysqlServer_Username = "coldverify_local"
 MysqlServer_Password = "hmZbXNWdpXKB3K8x"

+ 178 - 14
controllers/TaskData.go

@@ -14,8 +14,10 @@ import (
 	"github.com/xuri/excelize/v2"
 	"math"
 	"os"
+	"sort"
 	"strconv"
 	"strings"
+	"sync"
 	"time"
 )
 
@@ -91,6 +93,58 @@ func (c *TaskDataController) TaskDataClass_List() {
 	return
 }
 
+func (c *TaskDataController) TaskDataClass_Edit() {
+	T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	T_task_id := c.GetString("T_task_id")
+	T_sn := c.GetString("T_sn")
+	T_id := c.GetString("T_id")
+	Task_r, err := NatsServer.Read_Task(T_task_id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
+		c.ServeJSON()
+		return
+	}
+
+	err = Task.Update_TaskData_ByT_sn(Task_r.T_task_id, T_sn, T_id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	System.Add_UserLogs_T(T_uuid, "本地版-任务分裂", "修改分类数据"+Task_r.T_name, Task_r.T_task_id+"|"+T_sn+"|"+T_id)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
+func (c *TaskDataController) TaskDataClass_Del() {
+	T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+
+	T_task_id := c.GetString("T_task_id")
+	T_sn := c.GetString("T_sn")
+	Task_r, err := NatsServer.Read_Task(T_task_id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
+		c.ServeJSON()
+		return
+	}
+
+	err = Task.Delete_TaskData_ByT_sn(Task_r.T_task_id, T_sn)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	System.Add_UserLogs_T(T_uuid, "本地版-任务分裂", "删除分类数据"+Task_r.T_name, Task_r.T_task_id+"|"+T_sn)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
 // 添加-
 func (c *TaskDataController) TaskData_AddS() {
 	// 获取登录用户的uuid
@@ -129,7 +183,7 @@ func (c *TaskDataController) TaskData_AddS() {
 		}
 	}
 
-	System.Add_UserLogs_T(T_uuid, "任务数据", "添加数据"+Task_r.T_name, Task_r.T_task_id+"结果:"+string(len(T_Data_list))+"/"+string(T_Data_list_x)+"|=> "+T_Data)
+	System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "添加数据"+Task_r.T_name, Task_r.T_task_id+"结果:"+string(len(T_Data_list))+"/"+string(T_Data_list_x)+"|=> "+T_Data)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: strconv.Itoa(T_Data_list_x)}
 	c.ServeJSON()
@@ -162,7 +216,7 @@ func (c *TaskDataController) TaskData_Add() {
 		return
 	}
 
-	System.Add_UserLogs_T(T_uuid, "任务数据", "添加数据"+Task_r.T_name, Task_r.T_task_id+"|"+T_sn+"|"+strconv.Itoa(T_id)+"|"+fmt.Sprintf("%.2f", T_t)+"|"+fmt.Sprintf("%.2f", T_rh)+T_time)
+	System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "添加数据"+Task_r.T_name, Task_r.T_task_id+"|"+T_sn+"|"+strconv.Itoa(T_id)+"|"+fmt.Sprintf("%.2f", T_t)+"|"+fmt.Sprintf("%.2f", T_rh)+T_time)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
@@ -209,7 +263,7 @@ func (c *TaskDataController) TaskData_Up() {
 		return
 	}
 
-	System.Add_UserLogs_T(T_uuid, "任务数据", "修改数据"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id)+"|"+fmt.Sprintf("%.2f", T_t)+"|"+fmt.Sprintf("%.2f", T_rh)+T_time)
+	System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "修改数据"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id)+"|"+fmt.Sprintf("%.2f", T_t)+"|"+fmt.Sprintf("%.2f", T_rh)+T_time)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
@@ -242,7 +296,7 @@ func (c *TaskDataController) TaskData_Del() {
 		c.ServeJSON()
 		return
 	}
-	System.Add_UserLogs_T(T_uuid, "任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
+	System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
@@ -275,7 +329,7 @@ func (c *TaskDataController) TaskData_Del_t_id() {
 		c.ServeJSON()
 		return
 	}
-	System.Add_UserLogs_T(T_uuid, "任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
+	System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
@@ -371,7 +425,7 @@ func (c *TaskDataController) Check() {
 	}
 	type R_JSONS struct {
 		T_sn               string // SN
-		T_id               int    // 编号
+		T_id               string // 编号
 		T_unm              int    // 数据量
 		T_time_interval    int64  // 时间间隔
 		Time_start         string // 开始
@@ -387,14 +441,14 @@ func (c *TaskDataController) Check() {
 	for _, v := range List {
 		var r_json R_JSONS
 		r_json.T_sn = v.T_sn
-		r_json.T_id = v.T_id
+
 		r_json.Result = 200
 
-		DeviceSensor_data := Task.Read_TaskData_ById_List_(Task_r.T_task_id, v.T_sn, v.T_id)
+		DeviceSensor_data := Task.Read_TaskData_ById_List_(Task_r.T_task_id, v.T_sn)
 		r_json.T_unm = len(DeviceSensor_data)
 
 		if r_json.T_unm > 2 {
-
+			r_json.T_id = DeviceSensor_data[0].T_id
 			r_json.Time_end = DeviceSensor_data[len(DeviceSensor_data)-1].T_time
 			r_json.Time_start = DeviceSensor_data[0].T_time
 
@@ -447,6 +501,116 @@ func (c *TaskDataController) Check() {
 	return
 }
 
+func (c *TaskDataController) Check_Asyn() {
+	T_task_id := c.GetString("T_task_id")
+	Task_r, err := NatsServer.Read_Task(T_task_id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
+		c.ServeJSON()
+		return
+	}
+	type R_JSONS struct {
+		T_sn               string // SN
+		T_id               string // 编号
+		T_unm              int    // 数据量
+		T_time_interval    int64  // 时间间隔
+		Time_start         string // 开始
+		Time_end           string //  结束
+		Result             int    //  200 OK, 201 可以补 , 202 不能补
+		Result_str         string //  提示内容
+		Result_Time_start  string //  2022-8-05 21:01
+		Result_Time_defect int64  //  缺失时间间隔
+	}
+	var r_jsons []R_JSONS
+
+	List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
+
+	var limitMaxNum = 10
+	var chData = make(chan int, limitMaxNum)
+	var jobGroup sync.WaitGroup
+	var tasknum = len(List)
+
+	//处理任务,最多同时有10个协程
+	for i := 0; i < tasknum; i++ {
+		chData <- 1
+		go func(index int, r_jsons *[]R_JSONS) {
+			defer jobGroup.Done()
+			jobGroup.Add(1)
+			var r_json R_JSONS
+			r_json.T_sn = List[index].T_sn
+
+			r_json.Result = 200
+
+			DeviceSensor_data := Task.Read_TaskData_ById_List_(Task_r.T_task_id, List[index].T_sn)
+			r_json.T_unm = len(DeviceSensor_data)
+
+			if r_json.T_unm > 2 {
+				if List[index].T_sn == "000000000000004" {
+					fmt.Println("-------------", List[index].T_sn)
+
+				}
+				r_json.T_id = DeviceSensor_data[0].T_id
+				r_json.Time_end = DeviceSensor_data[len(DeviceSensor_data)-1].T_time
+				r_json.Time_start = DeviceSensor_data[0].T_time
+
+				formatTime_a, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[0].T_time)
+				formatTime_b, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[1].T_time)
+				formatTime_x := formatTime_b.Unix() - formatTime_a.Unix()
+				r_json.T_time_interval = formatTime_x
+				println("formatTime_x:", List[index].T_id, List[index].T_sn, formatTime_x)
+				if formatTime_x > 60*30 || formatTime_x < 60 {
+					r_json.Result = 202
+					r_json.Result_str = "数据异常(数据的第一个时间与第二个时间相差 " + strconv.FormatInt(formatTime_x, 10) + "秒),必须大于60秒,小于30分钟"
+					*r_jsons = append(*r_jsons, r_json)
+					<-chData
+					return
+				}
+				for data_i := 2; data_i < len(DeviceSensor_data); data_i++ {
+					formatTime_a = formatTime_b
+					formatTime_b, _ = time.Parse("2006-1-2 15:04", DeviceSensor_data[data_i].T_time)
+					formatTime_ := formatTime_b.Unix() - formatTime_a.Unix()
+					if formatTime_ < formatTime_x {
+						println("formatTime_x-:", formatTime_)
+						r_json.Result = 202
+						r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + "  离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,间隔小于时间间隔,不能自动补充"
+						break
+					}
+					if formatTime_x != formatTime_ {
+						if formatTime_ > 60*30 {
+							println("formatTime_x-:", formatTime_)
+							r_json.Result = 202
+							r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + "  离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,相差时间大于30分钟,不能自动补充"
+							break
+						}
+						r_json.Result = 201
+						r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + "  离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒"
+						r_json.Result_Time_start = DeviceSensor_data[data_i-1].T_time
+						r_json.Result_Time_defect = formatTime_
+						println(r_json.Result_str)
+						break
+					}
+				}
+			} else {
+				r_json.Result = 202
+				r_json.Result_str = "数据量太少 必须大于 2条以上!"
+			}
+
+			*r_jsons = append(*r_jsons, r_json)
+			<-chData
+		}(i, &r_jsons)
+	}
+	//使用Wait等待所有任务执行完毕
+	jobGroup.Wait()
+
+	sort.Slice(r_jsons, func(i, j int) bool {
+		return r_jsons[i].T_id < r_jsons[j].T_id
+	})
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
 // 打包数据本地数据
 func (c *TaskDataController) TaskData_Import_TaskData() {
 	// 获取登录用户的uuid
@@ -469,7 +633,7 @@ func (c *TaskDataController) TaskData_Import_TaskData() {
 		c.ServeJSON()
 		return
 	}
-	System.Add_UserLogs_T(T_uuid, "任务数据-打包本地数据", "导出线上数据Z_TaskData_"+T_task_id, org)
+	System.Add_UserLogs_T(T_uuid, "本地版-任务数据-打包本地数据", "导出线上数据Z_TaskData_"+T_task_id, org)
 
 	i := 0
 	flag := false
@@ -481,7 +645,7 @@ func (c *TaskDataController) TaskData_Import_TaskData() {
 			logs.Println("任务数据-打包本地数据", "线下导入数据Z_TaskData_"+T_task_id, err.Error())
 		} else {
 			if Task.Check_TaskData_Num(T_task_id) {
-				System.Add_UserLogs_T(T_uuid, "任务数据-打包本地数据", "线下导入数据Z_TaskData_"+T_task_id, org)
+				System.Add_UserLogs_T(T_uuid, "本地版-任务数据-打包本地数据", "线下导入数据Z_TaskData_"+T_task_id, org)
 				flag = true
 				break
 			}
@@ -527,7 +691,7 @@ func (c *TaskDataController) TaskData_Up_TaskData() {
 		c.ServeJSON()
 		return
 	}
-	System.Add_UserLogs_T(T_uuid, "任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, org)
+	System.Add_UserLogs_T(T_uuid, "本地版-任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, org)
 
 	i := 0
 	flag := false
@@ -538,7 +702,7 @@ func (c *TaskDataController) TaskData_Up_TaskData() {
 			logs.Println(T_uuid, "任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, err.Error())
 		} else {
 			if Task.Check_TaskData_Num(T_task_id) {
-				System.Add_UserLogs_T(T_uuid, "任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, org)
+				System.Add_UserLogs_T(T_uuid, "本地版-任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, org)
 				flag = true
 				break
 			}
@@ -564,7 +728,7 @@ func (c *TaskDataController) TaskData_Up_TaskData() {
 		return
 	}
 	// 向线上用户日志表写入数据
-	System.Add_UserLogs_T(T_uuid, "任务", "修改", Task_r)
+	System.Add_UserLogs_T(T_uuid, "本地版-任务", "修改", Task_r)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()

+ 1 - 1
models/Task/Task.go

@@ -19,7 +19,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 采集中
 

+ 58 - 9
models/Task/TaskData.go

@@ -43,11 +43,14 @@ func CREATE_TaskData(alias_name, 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;"
 
 	_, err := o.Raw(sql).Exec()
@@ -79,15 +82,15 @@ func Truncate_TaskData(alias_name, T_task_id string) bool {
 
 type TaskData_ struct {
 	ID     int     `orm:"column(ID);size(100);null"`   // ID
-	T_sn   string  `orm:"column(t_sn);size(256);null"` // 标题
-	T_id   int     `orm:"column(t_id);size(10);null"`  // ID
+	T_sn   string  `orm:"column(t_sn);size(256);null"` // sn
+	T_id   string  `orm:"column(t_id);size(256);null"` // 标题
 	T_t    float32 `orm:"column(t_t);size(10);null"`   // 温度
 	T_rh   float32 `orm:"column(t_rh);size(10);null"`  // 湿度
 	T_time string  `orm:"column(t_times);null;"`       // 采集时间
 }
 type TaskDataClass_ struct {
 	T_sn string `orm:"column(t_sn);size(256);null"` // 标题
-	T_id int    `orm:"column(t_id);size(10);null"`  // ID
+	T_id string `orm:"column(t_id);size(256);null"` // 名称
 }
 
 func Read_TaskData_ById_List(T_task_id string, SN string, T_id int, Time_start_ string, Time_end_ string, page int, page_z int) ([]TaskData_, int64) {
@@ -151,14 +154,13 @@ func Read_TaskData_ById_List(T_task_id string, SN string, T_id int, Time_start_
 	return maps, int64(key)
 }
 
-func Read_TaskData_ById_List_(T_task_id string, SN string, T_id int) []TaskData_ {
+func Read_TaskData_ById_List_(T_task_id string, SN string) []TaskData_ {
 	o := orm.NewOrm()
 	var maps []TaskData_
 
 	sql_condition := ""
 
-	sql_condition += " t_id = " + strconv.Itoa(T_id) + " AND "
-	sql_condition += " t_sn LIKE '%" + SN + "%' "
+	sql_condition += " t_sn ='" + SN + "'"
 
 	//fmt.Println("maps_z;",maps_z[0][0])
 	sql := "SELECT ID,t_sn,t_id,t_t,t_rh,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i') AS t_times,t_time  FROM z_task_data_" + T_task_id + " WHERE " + sql_condition + " ORDER BY t_time "
@@ -178,7 +180,9 @@ func Read_TaskData_ById_ClassList(T_task_id string) []TaskDataClass_ {
 	var maps []TaskDataClass_
 
 	//fmt.Println("maps_z;",maps_z[0][0])
-	sql := "SELECT DISTINCT t_sn,t_id FROM z_task_data_" + T_task_id + " ORDER BY t_id "
+	//sql := "SELECT DISTINCT t_sn,t_id FROM z_task_data_" + T_task_id + " ORDER BY t_id "
+	//sql := "SELECT DISTINCT t_sn FROM z_task_data_" + T_task_id + " ORDER BY t_id "
+	sql := "SELECT t_sn,t_id FROM z_task_data_" + T_task_id + "  GROUP BY t_sn ORDER BY t_id "
 
 	fmt.Println(sql)
 	_, err := o.Raw(sql).QueryRows(&maps)
@@ -191,6 +195,51 @@ func Read_TaskData_ById_ClassList(T_task_id string) []TaskDataClass_ {
 	return maps
 }
 
+func Read_TaskData_sn(T_task_id string) []TaskDataClass_ {
+	o := orm.NewOrm()
+	var maps []TaskDataClass_
+
+	sql := "SELECT DISTINCT t_sn FROM z_task_data_" + T_task_id + " ORDER BY t_sn "
+
+	fmt.Println(sql)
+	_, err := o.Raw(sql).QueryRows(&maps)
+
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return maps
+	}
+
+	return maps
+}
+
+func Update_TaskData_ByT_sn(T_task_id, T_sn, T_id string) error {
+	o := orm.NewOrm()
+	// 修改id
+	sql := "UPDATE z_task_data_" + T_task_id + " SET `t_id` = '" + T_id + "' WHERE `t_sn` = " + T_sn
+	logs.Println(sql)
+	_, err := o.Raw(sql).Exec()
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return err
+	}
+
+	return nil
+}
+
+func Delete_TaskData_ByT_sn(T_task_id, T_sn string) error {
+	o := orm.NewOrm()
+	// 修改id
+	sql := "DELETE FROM z_task_data_" + T_task_id + " WHERE `t_sn` = " + T_sn
+	logs.Println(sql)
+	_, err := o.Raw(sql).Exec()
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return err
+	}
+
+	return nil
+}
+
 // 添加
 func Add_TaskData(T_task_id string, T_sn string, T_id string, T_t string, T_rh string, T_time string) bool {
 

+ 4 - 1
routers/TaskData.go

@@ -9,6 +9,8 @@ func init() {
 
 	// 提取数据
 	beego.Router("/TaskData/TaskDataClass_List", &controllers.TaskDataController{}, "*:TaskDataClass_List")
+	beego.Router("/TaskData/TaskDataClass_Edit", &controllers.TaskDataController{}, "*:TaskDataClass_Edit")
+	beego.Router("/TaskData/TaskDataClass_Del", &controllers.TaskDataController{}, "*:TaskDataClass_Del")
 	beego.Router("/TaskData/List", &controllers.TaskDataController{}, "*:TaskData_List")
 	beego.Router("/TaskData/Add", &controllers.TaskDataController{}, "*:TaskData_Add")         //
 	beego.Router("/TaskData/AddS", &controllers.TaskDataController{}, "*:TaskData_AddS")       //
@@ -19,7 +21,8 @@ func init() {
 	beego.Router("/TaskData/Export_Data_Excel", &controllers.TaskDataController{}, "*:Export_Data_Excel") // 设置 设备参数
 
 	// 数据校验
-	beego.Router("/TaskData/Check", &controllers.TaskDataController{}, "*:Check") // 设置 设备参数
+	//beego.Router("/TaskData/Check", &controllers.TaskDataController{}, "*:Check")           // 设置 设备参数
+	beego.Router("/TaskData/Check", &controllers.TaskDataController{}, "*:Check_Asyn") // 设置 设备参数
 
 	beego.Router("/TaskData/Import_TaskData", &controllers.TaskDataController{}, "*:TaskData_Import_TaskData") // 打包本地数据
 	beego.Router("/TaskData/Up_TaskData", &controllers.TaskDataController{}, "*:TaskData_Up_TaskData_Back")    // 更新线上数据