浏览代码

add:数据校验

zoie 2 年之前
父节点
当前提交
59887bec09
共有 7 个文件被更改,包括 119 次插入7 次删除
  1. 1 0
      .gitignore
  2. 1 1
      conf/app.conf
  3. 1 1
      conf/config.go
  4. 98 4
      controllers/TaskData.go
  5. 2 1
      models/Task/Task.go
  6. 13 0
      models/Task/TaskData.go
  7. 3 0
      routers/Task.go

+ 1 - 0
.gitignore

@@ -33,3 +33,4 @@ _testmain.go
 lastupdate.tmp
 ColdVerify_local
 /temp
+/ofile

+ 1 - 1
conf/app.conf

@@ -29,7 +29,7 @@ MysqlServer2_MaxIdleConnections = 100
 MysqlServer2_MaxOpenConnections = 200
 
 # 存放sql临时文件目录
-Sql_Temp_Path = "./temp/"
+Sql_Temp_Dir = "./temp/"
 
 # Redis
 Redis_address = "175.178.229.79:30379"

+ 1 - 1
conf/config.go

@@ -38,7 +38,7 @@ var MysqlServer2_Password, _ = beego.AppConfig.String("MysqlServer2_Password")
 var MysqlServer2_MaxIdleConnections, _ = beego.AppConfig.Int("MysqlServer2_MaxIdleConnections")
 var MysqlServer2_MaxOpenConnections, _ = beego.AppConfig.Int("MysqlServer2_MaxOpenConnections")
 
-var Sql_Temp_Path, _ = beego.AppConfig.String("Sql_Temp_Path")
+var Sql_Temp_Dir, _ = beego.AppConfig.String("Sql_Temp_Dir")
 
 // Redis
 var Redis_address, _ = beego.AppConfig.String("Redis_address")

+ 98 - 4
controllers/TaskData.go

@@ -328,6 +328,9 @@ func (c *TaskDataController) Export_Data_Excel() {
 	}
 	fmt.Println("DeviceSensor_data:", len(DeviceSensor_data_list))
 
+	path := "./ofile"
+	Task.Create_Dir(path)
+
 	timeStr := time.Now().Format("20060102150405")
 	// 保存文件
 	if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
@@ -350,6 +353,92 @@ func (c *TaskDataController) Export_Data_Excel() {
 	return
 }
 
+func (c *TaskDataController) Check() {
+	T_task_id := c.GetString("T_task_id")
+	Task_r, is := Task.Read_Task(T_task_id)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
+		c.ServeJSON()
+		return
+	}
+	type R_JSONS struct {
+		T_sn               string // SN
+		T_id               int    // 编号
+		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)
+	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)
+		r_json.T_unm = len(DeviceSensor_data)
+
+		if r_json.T_unm > 2 {
+
+			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:", v.T_id, v.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)
+				continue
+			}
+			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()
+				println("formatTime_x-:", formatTime_)
+				if formatTime_ < formatTime_x {
+					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 {
+						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)
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
 // 打包数据本地数据
 func (c *TaskDataController) TaskData_Import_TaskData() {
 	// 获取登录用户的uuid
@@ -362,7 +451,10 @@ func (c *TaskDataController) TaskData_Import_TaskData() {
 		c.ServeJSON()
 		return
 	}
-	sql_file := fmt.Sprintf("%sZ_TaskData_%s.sql", conf.Sql_Temp_Path, T_task_id)
+	if err := Task.Create_Dir(conf.Sql_Temp_Dir); err != nil {
+		logs.Println("创建sql临时文件失败")
+	}
+	sql_file := fmt.Sprintf("%sZ_TaskData_%s.sql", conf.Sql_Temp_Dir, T_task_id)
 	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 {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Z_TaskData_" + T_task_id + "线上数据导出失败!"}
@@ -376,7 +468,7 @@ func (c *TaskDataController) TaskData_Import_TaskData() {
 	Task.CREATE_TaskData(conf.Local_AliasName, T_task_id)
 	for i < 10 {
 		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)
+		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_TaskData_"+T_task_id, err.Error())
 		} else {
@@ -416,8 +508,10 @@ func (c *TaskDataController) TaskData_Up_TaskData() {
 		c.ServeJSON()
 		return
 	}
-
-	sql_file := fmt.Sprintf("%sZ_TaskData_%s.sql", conf.Sql_Temp_Path, T_task_id)
+	if err := Task.Create_Dir(conf.Sql_Temp_Dir); err != nil {
+		logs.Println("创建sql临时文件失败")
+	}
+	sql_file := fmt.Sprintf("%sZ_TaskData_%s.sql", conf.Sql_Temp_Dir, T_task_id)
 	org, err := Task.Dump_TaskData(T_task_id, conf.MysqlServer_Username, conf.MysqlServer_Password, conf.MysqlServer_UrlPort, conf.MysqlServer_Database, sql_file)
 	if err != nil {
 		logs.Println(T_uuid, "任务数据-更新线上数据", "导出线下数据Z_TaskData_"+T_task_id, err.Error())

+ 2 - 1
models/Task/Task.go

@@ -148,7 +148,8 @@ func Read_Task(T_task_id string) (r Task, is bool) {
 	}
 	o := orm2.NewOrmUsingDB(conf.Server_AliasName)
 	qs := o.QueryTable(new(Task))
-	err := qs.Filter("T_task_id", T_task_id).Filter("T_State", 1).One(&r)
+	//err := qs.Filter("T_task_id", T_task_id).Filter("T_State", 1).One(&r)
+	err := qs.Filter("T_task_id", T_task_id).One(&r)
 	if err != nil {
 		return r, false
 	}

+ 13 - 0
models/Task/TaskData.go

@@ -9,6 +9,7 @@ import (
 	"github.com/beego/beego/v2/adapter/orm"
 	orm2 "github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
+	"os"
 	"strconv"
 	"strings"
 	"sync"
@@ -444,3 +445,15 @@ func Read_Local_Mysql_Version() int {
 	version, _ := strconv.Atoi(params[0]["version()"].(string)[0:1])
 	return version
 }
+
+func Create_Dir(path string) error {
+	_, err := os.Stat(path)
+	// 如果返回的错误为nil,说明文件或文件夹存在
+	if err == nil {
+		return nil
+	}
+	if err = os.Mkdir(path, 0777); err != nil {
+		return err
+	}
+	return nil
+}

+ 3 - 0
routers/Task.go

@@ -18,6 +18,9 @@ func init() {
 
 	beego.Router("/TaskData/Export_Data_Excel", &controllers.TaskDataController{}, "*:Export_Data_Excel") // 设置 设备参数
 
+	// 数据校验
+	beego.Router("/TaskData/Check", &controllers.TaskDataController{}, "*:Check") // 设置 设备参数
+
 	beego.Router("/TaskData/Import_TaskData", &controllers.TaskDataController{}, "*:TaskData_Import_TaskData") // 打包本地数据
 	beego.Router("/TaskData/Up_TaskData", &controllers.TaskDataController{}, "*:TaskData_Up_TaskData")         // 更新线上数据