TaskData.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794
  1. package controllers
  2. import (
  3. "ColdVerify_local/Nats"
  4. "ColdVerify_local/Nats/NatsServer"
  5. "ColdVerify_local/conf"
  6. "ColdVerify_local/lib"
  7. "ColdVerify_local/logs"
  8. "ColdVerify_local/models/System"
  9. "ColdVerify_local/models/Task"
  10. "fmt"
  11. beego "github.com/beego/beego/v2/server/web"
  12. "github.com/vmihailenco/msgpack/v5"
  13. "github.com/xuri/excelize/v2"
  14. "math"
  15. "os"
  16. "sort"
  17. "strconv"
  18. "strings"
  19. "sync"
  20. "time"
  21. )
  22. type TaskDataController struct {
  23. beego.Controller
  24. }
  25. // 列表 -
  26. func (c *TaskDataController) TaskData_List() {
  27. var r_jsons lib.R_JSONS
  28. page, _ := c.GetInt("page")
  29. if page < 1 {
  30. page = 1
  31. }
  32. page_z, _ := c.GetInt("page_z")
  33. if page_z < 1 {
  34. page_z = conf.Page_size
  35. }
  36. Time_start := c.GetString("Time_start")
  37. Time_end := c.GetString("Time_end")
  38. T_sn := c.GetString("T_sn")
  39. T_id, err := c.GetInt("T_id")
  40. if err != nil {
  41. T_id = -1
  42. }
  43. T_task_id := c.GetString("T_task_id")
  44. Task_r, err := NatsServer.Read_Task(T_task_id)
  45. if err != nil {
  46. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  47. c.ServeJSON()
  48. return
  49. }
  50. if Task_r.T_collection_state == 2 {
  51. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  52. c.ServeJSON()
  53. return
  54. }
  55. var cnt int64
  56. List, cnt := Task.Read_TaskData_ById_List(Task_r.T_task_id, T_sn, T_id, Time_start, Time_end, page, page_z)
  57. page_size := math.Ceil(float64(cnt) / float64(page_z))
  58. r_jsons.List = List
  59. r_jsons.Page = page
  60. r_jsons.Page_size = int(page_size)
  61. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  62. r_jsons.Num = int(cnt)
  63. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  64. c.ServeJSON()
  65. return
  66. }
  67. // 列表 -
  68. func (c *TaskDataController) TaskDataClass_List() {
  69. page, _ := c.GetInt("page")
  70. if page < 1 {
  71. page = 1
  72. }
  73. page_z, _ := c.GetInt("page_z")
  74. if page_z < 1 {
  75. page_z = conf.Page_size
  76. }
  77. T_task_id := c.GetString("T_task_id")
  78. Task_r, err := NatsServer.Read_Task(T_task_id)
  79. if err != nil {
  80. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  81. c.ServeJSON()
  82. return
  83. }
  84. if Task_r.T_collection_state == 2 {
  85. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  86. c.ServeJSON()
  87. return
  88. }
  89. List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
  90. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: List}
  91. c.ServeJSON()
  92. return
  93. }
  94. func (c *TaskDataController) TaskDataClass_Edit() {
  95. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  96. T_task_id := c.GetString("T_task_id")
  97. T_sn := c.GetString("T_sn")
  98. T_id := c.GetString("T_id")
  99. Task_r, err := NatsServer.Read_Task(T_task_id)
  100. if err != nil {
  101. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  102. c.ServeJSON()
  103. return
  104. }
  105. err = Task.Update_TaskData_ByT_sn(Task_r.T_task_id, T_sn, T_id)
  106. if err != nil {
  107. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  108. c.ServeJSON()
  109. return
  110. }
  111. System.Add_UserLogs_T(T_uuid, "本地版-任务分裂", "修改分类数据"+Task_r.T_name, Task_r.T_task_id+"|"+T_sn+"|"+T_id)
  112. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  113. c.ServeJSON()
  114. return
  115. }
  116. func (c *TaskDataController) TaskDataClass_Del() {
  117. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  118. T_task_id := c.GetString("T_task_id")
  119. T_sn := c.GetString("T_sn")
  120. Task_r, err := NatsServer.Read_Task(T_task_id)
  121. if err != nil {
  122. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  123. c.ServeJSON()
  124. return
  125. }
  126. err = Task.Delete_TaskData_ByT_sn(Task_r.T_task_id, T_sn)
  127. if err != nil {
  128. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  129. c.ServeJSON()
  130. return
  131. }
  132. System.Add_UserLogs_T(T_uuid, "本地版-任务分裂", "删除分类数据"+Task_r.T_name, Task_r.T_task_id+"|"+T_sn)
  133. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  134. c.ServeJSON()
  135. return
  136. }
  137. // 添加-
  138. func (c *TaskDataController) TaskData_AddS() {
  139. // 获取登录用户的uuid
  140. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  141. T_task_id := c.GetString("T_task_id")
  142. Task_r, err := NatsServer.Read_Task(T_task_id)
  143. if err != nil {
  144. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  145. c.ServeJSON()
  146. return
  147. }
  148. //T_sn|T_id|T_t|T_rh|T_time?
  149. T_Data := c.GetString("T_Data")
  150. if len(T_Data) < 5 {
  151. c.Data["json"] = lib.JSONS{Code: 201, Msg: "err T_Data!"}
  152. c.ServeJSON()
  153. return
  154. }
  155. T_Data_list := strings.Split(T_Data, "?")
  156. println(len(T_Data_list), "len(T_Data_list)")
  157. var T_Data_list_x = 0
  158. for _, v := range T_Data_list {
  159. // 2022-08-09 14:25:00|27.7|55.2
  160. if len(v) < 5 {
  161. println(v, "len(v) < 5")
  162. continue
  163. }
  164. v_list := strings.Split(v, "|")
  165. is := Task.Add_TaskData(Task_r.T_task_id, v_list[0], v_list[1], v_list[2], v_list[3], v_list[4])
  166. if is {
  167. T_Data_list_x += 1
  168. }
  169. }
  170. 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)
  171. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: strconv.Itoa(T_Data_list_x)}
  172. c.ServeJSON()
  173. return
  174. }
  175. // 添加-
  176. func (c *TaskDataController) TaskData_Add() {
  177. // 获取登录用户的uuid
  178. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  179. T_sn := c.GetString("T_sn")
  180. T_id, _ := c.GetInt("T_id")
  181. T_t, _ := c.GetFloat("T_t")
  182. T_rh, _ := c.GetFloat("T_rh")
  183. T_time := c.GetString("T_time")
  184. T_task_id := c.GetString("T_task_id")
  185. Task_r, err := NatsServer.Read_Task(T_task_id)
  186. if err != nil {
  187. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  188. c.ServeJSON()
  189. return
  190. }
  191. is := Task.Add_TaskData(Task_r.T_task_id, T_sn, strconv.Itoa(T_id), fmt.Sprintf("%.2f", T_t), fmt.Sprintf("%.2f", T_rh), T_time)
  192. if !is {
  193. c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
  194. c.ServeJSON()
  195. return
  196. }
  197. 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)
  198. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  199. c.ServeJSON()
  200. return
  201. }
  202. // 修改-
  203. func (c *TaskDataController) TaskData_Up() {
  204. // 获取登录用户的uuid
  205. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  206. Id, err := c.GetInt("Id")
  207. if err != nil {
  208. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  209. c.ServeJSON()
  210. return
  211. }
  212. T_t, err := c.GetFloat("T_t")
  213. if err != nil {
  214. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_t 错误!"}
  215. c.ServeJSON()
  216. return
  217. }
  218. T_rh, err := c.GetFloat("T_rh")
  219. if err != nil {
  220. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_rh 错误!"}
  221. c.ServeJSON()
  222. return
  223. }
  224. T_time := c.GetString("T_time")
  225. T_task_id := c.GetString("T_task_id")
  226. Task_r, err := NatsServer.Read_Task(T_task_id)
  227. if err != nil {
  228. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  229. c.ServeJSON()
  230. return
  231. }
  232. is := Task.Up_TaskData(Task_r.T_task_id, strconv.Itoa(Id), fmt.Sprintf("%.2f", T_t), fmt.Sprintf("%.2f", T_rh), T_time)
  233. if !is {
  234. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  235. c.ServeJSON()
  236. return
  237. }
  238. 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)
  239. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  240. c.ServeJSON()
  241. return
  242. }
  243. // 删除-
  244. func (c *TaskDataController) TaskData_Del() {
  245. // 获取登录用户的uuid
  246. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  247. Id, err := c.GetInt("Id")
  248. if err != nil {
  249. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  250. c.ServeJSON()
  251. return
  252. }
  253. T_task_id := c.GetString("T_task_id")
  254. Task_r, err := NatsServer.Read_Task(T_task_id)
  255. if err != nil {
  256. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  257. c.ServeJSON()
  258. return
  259. }
  260. is := Task.Del_TaskData(Task_r.T_task_id, strconv.Itoa(Id))
  261. if !is {
  262. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  263. c.ServeJSON()
  264. return
  265. }
  266. System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
  267. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  268. c.ServeJSON()
  269. return
  270. }
  271. // 删除-
  272. func (c *TaskDataController) TaskData_Del_t_id() {
  273. // 获取登录用户的uuid
  274. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  275. Id, err := c.GetInt("Id")
  276. if err != nil {
  277. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  278. c.ServeJSON()
  279. return
  280. }
  281. T_task_id := c.GetString("T_task_id")
  282. Task_r, err := NatsServer.Read_Task(T_task_id)
  283. if err != nil {
  284. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  285. c.ServeJSON()
  286. return
  287. }
  288. is := Task.Del_TaskData_t_id(Task_r.T_task_id, strconv.Itoa(Id))
  289. if !is {
  290. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  291. c.ServeJSON()
  292. return
  293. }
  294. System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
  295. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  296. c.ServeJSON()
  297. return
  298. }
  299. // 列表 - 接口
  300. func (c *TaskDataController) Export_Data_Excel() {
  301. Time_start := c.GetString("Time_start")
  302. Time_end := c.GetString("Time_end")
  303. T_sn_str := c.GetString("T_sn_list") //865901058809339,865901058815849,865901058818991,865901058810568
  304. //T_id, err := c.GetInt("T_id")
  305. //if err != nil {
  306. // T_id = -1
  307. //
  308. //}
  309. T_task_id := c.GetString("T_task_id")
  310. Task_r, err := NatsServer.Read_Task(T_task_id)
  311. if err != nil {
  312. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  313. c.ServeJSON()
  314. return
  315. }
  316. if Task_r.T_collection_state == 2 {
  317. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  318. c.ServeJSON()
  319. return
  320. }
  321. T_sn_list := strings.Split(T_sn_str, ",")
  322. DeviceSensor_data_list := []Task.TaskData_{}
  323. for _, v := range T_sn_list {
  324. DeviceSensor_data, _ := Task.Read_TaskData_ById_List(Task_r.T_task_id, v, -1, Time_start, Time_end, 1, 9999)
  325. DeviceSensor_data_list = append(DeviceSensor_data_list, DeviceSensor_data...)
  326. }
  327. f := excelize.NewFile() // 设置单元格的值
  328. // 这里设置表头
  329. f.SetCellValue("Sheet1", "A1", "编号")
  330. f.SetCellValue("Sheet1", "B1", "SN")
  331. f.SetCellValue("Sheet1", "C1", "温度℃")
  332. f.SetCellValue("Sheet1", "D1", "湿度%")
  333. f.SetCellValue("Sheet1", "E1", "记录时间")
  334. // 设置列宽
  335. f.SetColWidth("Sheet1", "A", "A", 7)
  336. f.SetColWidth("Sheet1", "B", "B", 20)
  337. f.SetColWidth("Sheet1", "C", "C", 10)
  338. f.SetColWidth("Sheet1", "D", "D", 10)
  339. f.SetColWidth("Sheet1", "E", "E", 22)
  340. line := 1
  341. // 循环写入数据
  342. for _, v := range DeviceSensor_data_list {
  343. line++
  344. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), v.T_id)
  345. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_sn)
  346. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), strconv.FormatFloat(float64(v.T_t), 'f', 1, 64))
  347. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), strconv.FormatFloat(float64(v.T_rh), 'f', 1, 64))
  348. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.T_time)
  349. }
  350. fmt.Println("DeviceSensor_data:", len(DeviceSensor_data_list))
  351. lib.Create_Dir("./ofile")
  352. timeStr := time.Now().Format("20060102150405")
  353. // 保存文件
  354. if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
  355. fmt.Println(err)
  356. }
  357. if !lib.Pload_qiniu("ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx") {
  358. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  359. c.ServeJSON()
  360. return
  361. }
  362. //删除目录
  363. //err = os.Remove("ofile/" + timeStr + ".xlsx")
  364. //if err != nil {
  365. // fmt.Println(err)
  366. //}
  367. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: "https://bzdcoldverifyoss.baozhida.cn/" + "ofile/" + timeStr + ".xlsx"}
  368. c.ServeJSON()
  369. return
  370. }
  371. func (c *TaskDataController) Check() {
  372. T_task_id := c.GetString("T_task_id")
  373. Task_r, err := NatsServer.Read_Task(T_task_id)
  374. if Task_r.T_collection_state == 2 {
  375. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  376. c.ServeJSON()
  377. return
  378. }
  379. if err != nil {
  380. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  381. c.ServeJSON()
  382. return
  383. }
  384. type R_JSONS struct {
  385. T_sn string // SN
  386. T_id string // 编号
  387. T_unm int // 数据量
  388. T_time_interval int64 // 时间间隔
  389. Time_start string // 开始
  390. Time_end string // 结束
  391. Result int // 200 OK, 201 可以补 , 202 不能补
  392. Result_str string // 提示内容
  393. Result_Time_start string // 2022-8-05 21:01
  394. Result_Time_defect int64 // 缺失时间间隔
  395. }
  396. var r_jsons []R_JSONS
  397. List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
  398. for _, v := range List {
  399. var r_json R_JSONS
  400. r_json.T_sn = v.T_sn
  401. r_json.T_id = v.T_id
  402. r_json.Result = 200
  403. DeviceSensor_data := Task.Read_TaskData_ById_List_(Task_r.T_task_id, v.T_sn)
  404. r_json.T_unm = len(DeviceSensor_data)
  405. if r_json.T_unm > 2 {
  406. r_json.T_id = DeviceSensor_data[0].T_id
  407. r_json.Time_end = DeviceSensor_data[len(DeviceSensor_data)-1].T_time
  408. r_json.Time_start = DeviceSensor_data[0].T_time
  409. formatTime_a, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[0].T_time)
  410. formatTime_b, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[1].T_time)
  411. formatTime_x := formatTime_b.Unix() - formatTime_a.Unix()
  412. r_json.T_time_interval = formatTime_x
  413. println("formatTime_x:", v.T_id, v.T_sn, formatTime_x)
  414. if formatTime_x > 60*30 || formatTime_x < 60 {
  415. r_json.Result = 202
  416. r_json.Result_str = "数据异常(数据的第一个时间与第二个时间相差 " + strconv.FormatInt(formatTime_x, 10) + "秒),必须大于60秒,小于30分钟"
  417. r_jsons = append(r_jsons, r_json)
  418. continue
  419. }
  420. for data_i := 2; data_i < len(DeviceSensor_data); data_i++ {
  421. formatTime_a = formatTime_b
  422. formatTime_b, _ = time.Parse("2006-1-2 15:04", DeviceSensor_data[data_i].T_time)
  423. formatTime_ := formatTime_b.Unix() - formatTime_a.Unix()
  424. println("formatTime_x-:", formatTime_)
  425. if formatTime_ < formatTime_x {
  426. r_json.Result = 202
  427. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,间隔小于时间间隔,不能自动补充"
  428. break
  429. }
  430. if formatTime_x != formatTime_ {
  431. if formatTime_ > 60*30 {
  432. r_json.Result = 202
  433. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,相差时间大于30分钟,不能自动补充"
  434. break
  435. }
  436. r_json.Result = 201
  437. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒"
  438. r_json.Result_Time_start = DeviceSensor_data[data_i-1].T_time
  439. r_json.Result_Time_defect = formatTime_
  440. println(r_json.Result_str)
  441. break
  442. }
  443. }
  444. } else {
  445. r_json.Result = 202
  446. r_json.Result_str = "数据量太少 必须大于 2条以上!"
  447. }
  448. r_jsons = append(r_jsons, r_json)
  449. }
  450. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  451. c.ServeJSON()
  452. return
  453. }
  454. func (c *TaskDataController) Check_Asyn() {
  455. T_task_id := c.GetString("T_task_id")
  456. Task_r, err := NatsServer.Read_Task(T_task_id)
  457. if Task_r.T_collection_state == 2 {
  458. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  459. c.ServeJSON()
  460. return
  461. }
  462. if err != nil {
  463. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  464. c.ServeJSON()
  465. return
  466. }
  467. type R_JSONS struct {
  468. T_sn string // SN
  469. T_id string // 编号
  470. T_unm int // 数据量
  471. T_time_interval int64 // 时间间隔
  472. Time_start string // 开始
  473. Time_end string // 结束
  474. Result int // 200 OK, 201 可以补 , 202 不能补
  475. Result_str string // 提示内容
  476. Result_Time_start string // 2022-8-05 21:01
  477. Result_Time_defect int64 // 缺失时间间隔
  478. }
  479. List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
  480. r_jsons := make([]R_JSONS, 0)
  481. var limitMaxNum = 10
  482. var chData = make(chan int, limitMaxNum)
  483. var jobGroup sync.WaitGroup
  484. var tasknum = len(List)
  485. for i := 0; i < tasknum; i++ {
  486. chData <- 1
  487. jobGroup.Add(1)
  488. go func(index int, wg *sync.WaitGroup, res *[]R_JSONS) {
  489. defer wg.Done()
  490. var r_json R_JSONS
  491. r_json.T_sn = List[index].T_sn
  492. r_json.T_id = List[index].T_id
  493. r_json.Result = 200
  494. DeviceSensor_data := Task.Read_TaskData_ById_List_(Task_r.T_task_id, List[index].T_sn)
  495. r_json.T_unm = len(DeviceSensor_data)
  496. if r_json.T_unm > 2 {
  497. r_json.T_id = DeviceSensor_data[0].T_id
  498. r_json.Time_end = DeviceSensor_data[len(DeviceSensor_data)-1].T_time
  499. r_json.Time_start = DeviceSensor_data[0].T_time
  500. formatTime_a, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[0].T_time)
  501. formatTime_b, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[1].T_time)
  502. formatTime_x := formatTime_b.Unix() - formatTime_a.Unix()
  503. r_json.T_time_interval = formatTime_x
  504. println("formatTime_x:", List[index].T_id, List[index].T_sn, formatTime_x)
  505. if formatTime_x > 60*30 || formatTime_x < 60 {
  506. r_json.Result = 202
  507. r_json.Result_str = "数据异常(数据的第一个时间与第二个时间相差 " + strconv.FormatInt(formatTime_x, 10) + "秒),必须大于60秒,小于30分钟"
  508. *res = append(*res, r_json)
  509. <-chData
  510. return
  511. }
  512. for data_i := 2; data_i < len(DeviceSensor_data); data_i++ {
  513. formatTime_a = formatTime_b
  514. formatTime_b, _ = time.Parse("2006-1-2 15:04", DeviceSensor_data[data_i].T_time)
  515. formatTime_ := formatTime_b.Unix() - formatTime_a.Unix()
  516. if formatTime_ < formatTime_x {
  517. println("formatTime_x-:", formatTime_)
  518. r_json.Result = 202
  519. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,间隔小于时间间隔,不能自动补充"
  520. break
  521. }
  522. if formatTime_x != formatTime_ {
  523. if formatTime_ > 60*30 {
  524. println("formatTime_x-:", formatTime_)
  525. r_json.Result = 202
  526. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,相差时间大于30分钟,不能自动补充"
  527. break
  528. }
  529. r_json.Result = 202
  530. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒"
  531. r_json.Result_Time_start = DeviceSensor_data[data_i-1].T_time
  532. r_json.Result_Time_defect = formatTime_
  533. println(r_json.Result_str)
  534. break
  535. }
  536. }
  537. } else {
  538. r_json.Result = 202
  539. r_json.Result_str = "数据量太少 必须大于 2条以上!"
  540. }
  541. *res = append(*res, r_json)
  542. <-chData
  543. }(i, &jobGroup, &r_jsons)
  544. }
  545. //使用Wait等待所有任务执行完毕
  546. jobGroup.Wait()
  547. sort.Slice(r_jsons, func(i, j int) bool {
  548. return r_jsons[i].T_id < r_jsons[j].T_id
  549. })
  550. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  551. c.ServeJSON()
  552. return
  553. }
  554. // 打包数据本地数据
  555. func (c *TaskDataController) TaskData_Import_TaskData() {
  556. // 获取登录用户的uuid
  557. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  558. T_task_id := c.GetString("T_task_id")
  559. _, err := NatsServer.Read_Task(T_task_id)
  560. if err != nil {
  561. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  562. c.ServeJSON()
  563. return
  564. }
  565. if err = lib.Create_Dir(conf.Sql_Temp_Dir); err != nil {
  566. logs.Println("创建sql临时文件失败")
  567. }
  568. sql_file := fmt.Sprintf("%sZ_TaskData_%s.sql", conf.Sql_Temp_Dir, T_task_id)
  569. org, err := Task.Dump_TaskData(T_task_id, conf.MysqlServer2_Username, conf.MysqlServer2_Password, conf.MysqlServer2_UrlPort, conf.MysqlServer2_Database, sql_file)
  570. if err != nil {
  571. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线上数据导出失败!"}
  572. c.ServeJSON()
  573. return
  574. }
  575. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-打包本地数据", "导出线上数据Z_TaskData_"+T_task_id, org)
  576. i := 0
  577. flag := false
  578. Task.CREATE_TaskData(conf.Local_AliasName, T_task_id)
  579. for i < 10 {
  580. Task.Truncate_TaskData(conf.Local_AliasName, T_task_id)
  581. org, err = Task.Insert_TaskData(conf.MysqlServer_Username, conf.MysqlServer_Password, conf.MysqlServer_UrlPort, conf.MysqlServer_Database, sql_file)
  582. if err != nil {
  583. logs.Println("任务数据-打包本地数据", "线下导入数据Z_TaskData_"+T_task_id, err.Error())
  584. } else {
  585. if Task.Check_TaskData_Num(T_task_id) {
  586. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-打包本地数据", "线下导入数据Z_TaskData_"+T_task_id, org)
  587. flag = true
  588. break
  589. }
  590. }
  591. i++
  592. }
  593. // 重试10次后仍然没有成功导入数据
  594. if !flag {
  595. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线下导入数据失败!"}
  596. c.ServeJSON()
  597. return
  598. }
  599. //删除导出的sql文件
  600. _ = os.Remove(sql_file)
  601. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  602. c.ServeJSON()
  603. }
  604. // 更新线上数据
  605. func (c *TaskDataController) TaskData_Up_TaskData() {
  606. // 获取登录用户的uuid
  607. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  608. T_task_id := c.GetString("T_task_id")
  609. Task_r, err := NatsServer.Read_Task(T_task_id)
  610. if err != nil {
  611. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  612. c.ServeJSON()
  613. return
  614. }
  615. if err = lib.Create_Dir(conf.Sql_Temp_Dir); err != nil {
  616. logs.Println("创建sql临时文件失败")
  617. }
  618. sql_file := fmt.Sprintf("%sZ_TaskData_%s.sql", conf.Sql_Temp_Dir, T_task_id)
  619. org, err := Task.Dump_TaskData(T_task_id, conf.MysqlServer_Username, conf.MysqlServer_Password, conf.MysqlServer_UrlPort, conf.MysqlServer_Database, sql_file)
  620. if err != nil {
  621. logs.Println(T_uuid, "任务数据-更新线上数据", "导出线下数据Z_TaskData_"+T_task_id, err.Error())
  622. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线下数据导出失败!"}
  623. c.ServeJSON()
  624. return
  625. }
  626. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, org)
  627. i := 0
  628. flag := false
  629. for i < 10 {
  630. Task.Truncate_TaskData(conf.Server_AliasName, T_task_id)
  631. org, err = Task.Insert_TaskData(conf.MysqlServer2_Username, conf.MysqlServer2_Password, conf.MysqlServer2_UrlPort, conf.MysqlServer2_Database, sql_file)
  632. if err != nil {
  633. logs.Println(T_uuid, "任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, err.Error())
  634. } else {
  635. if Task.Check_TaskData_Num(T_task_id) {
  636. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, org)
  637. flag = true
  638. break
  639. }
  640. }
  641. i++
  642. }
  643. // 重试10次后仍然没有成功导入数据
  644. if !flag {
  645. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线上导入数据失败!"}
  646. c.ServeJSON()
  647. return
  648. }
  649. //删除导出的sql文件
  650. _ = os.Remove(sql_file)
  651. // 线上数据更新后 将当前任务 交付审核 标志 为 1
  652. Task_r.T_delivery_state = 1
  653. err = NatsServer.Update_Task(Task_r)
  654. if err != nil {
  655. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  656. c.ServeJSON()
  657. return
  658. }
  659. // 向线上用户日志表写入数据
  660. System.Add_UserLogs_T(T_uuid, "本地版-任务", "修改", Task_r)
  661. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  662. c.ServeJSON()
  663. }
  664. // 更新线上数据后台执行
  665. func (c *TaskDataController) TaskData_Up_TaskData_Back() {
  666. // 获取登录用户的uuid
  667. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  668. T_task_id := c.GetString("T_task_id")
  669. Task_r, err := NatsServer.Read_Task(T_task_id)
  670. if err != nil {
  671. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  672. c.ServeJSON()
  673. return
  674. }
  675. // 采集中
  676. Task_r.T_delivery_state = 2
  677. err = NatsServer.Update_Task(Task_r)
  678. if err != nil {
  679. c.Data["json"] = lib.JSONS{Code: 202, Msg: "提交失败!"}
  680. c.ServeJSON()
  681. return
  682. }
  683. data := Nats.Up_TaskData_Back{
  684. T_uuid: T_uuid,
  685. Task: Task_r,
  686. }
  687. b, _ := msgpack.Marshal(&data)
  688. _ = lib.Nats.Publish("ColdVerify_Local_Up_TaskData", b)
  689. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  690. c.ServeJSON()
  691. }