|
@@ -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()
|