TaskData.go 38 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259
  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. "strconv"
  17. "strings"
  18. "sync"
  19. "time"
  20. )
  21. type TaskDataController struct {
  22. beego.Controller
  23. }
  24. // 列表 -
  25. func (c *TaskDataController) TaskData_List() {
  26. var r_jsons lib.R_JSONS
  27. page, _ := c.GetInt("page")
  28. if page < 1 {
  29. page = 1
  30. }
  31. page_z, _ := c.GetInt("page_z")
  32. if page_z < 1 {
  33. page_z = conf.Page_size
  34. }
  35. Time_start := c.GetString("Time_start")
  36. Time_end := c.GetString("Time_end")
  37. T_sn := c.GetString("T_sn")
  38. T_id := c.GetString("T_id")
  39. T_task_id := c.GetString("T_task_id")
  40. Task_r, err := NatsServer.Read_Task(T_task_id)
  41. if err != nil {
  42. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  43. c.ServeJSON()
  44. return
  45. }
  46. if Task_r.T_collection_state == 2 {
  47. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  48. c.ServeJSON()
  49. return
  50. }
  51. var cnt int64
  52. List, cnt := Task.Read_TaskData_ById_List(Task_r.T_task_id, T_sn, T_id, Time_start, Time_end, page, page_z)
  53. page_size := math.Ceil(float64(cnt) / float64(page_z))
  54. r_jsons.List = List
  55. r_jsons.Page = page
  56. r_jsons.Page_size = int(page_size)
  57. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  58. r_jsons.Num = int(cnt)
  59. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  60. c.ServeJSON()
  61. return
  62. }
  63. // 列表 -
  64. func (c *TaskDataController) TaskDataClass_List() {
  65. page, _ := c.GetInt("page")
  66. if page < 1 {
  67. page = 1
  68. }
  69. page_z, _ := c.GetInt("page_z")
  70. if page_z < 1 {
  71. page_z = conf.Page_size
  72. }
  73. T_task_id := c.GetString("T_task_id")
  74. Task_r, err := NatsServer.Read_Task(T_task_id)
  75. if err != nil {
  76. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  77. c.ServeJSON()
  78. return
  79. }
  80. if Task_r.T_collection_state == 2 {
  81. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  82. c.ServeJSON()
  83. return
  84. }
  85. List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
  86. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: List}
  87. c.ServeJSON()
  88. return
  89. }
  90. func (c *TaskDataController) TaskDataClass_Edit() {
  91. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  92. T_task_id := c.GetString("T_task_id")
  93. T_sn := c.GetString("T_sn")
  94. T_id := c.GetString("T_id")
  95. Task_r, err := NatsServer.Read_Task(T_task_id)
  96. if err != nil {
  97. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  98. c.ServeJSON()
  99. return
  100. }
  101. err = Task.Update_TaskData_ByT_sn(Task_r.T_task_id, T_sn, T_id)
  102. if err != nil {
  103. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  104. c.ServeJSON()
  105. return
  106. }
  107. System.Add_UserLogs_T(T_uuid, "本地版-任务分裂", "修改分类数据"+Task_r.T_name, Task_r.T_task_id+"|"+T_sn+"|"+T_id)
  108. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  109. c.ServeJSON()
  110. return
  111. }
  112. func (c *TaskDataController) TaskDataClass_Del() {
  113. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  114. T_task_id := c.GetString("T_task_id")
  115. T_sn := c.GetString("T_sn")
  116. Task_r, err := NatsServer.Read_Task(T_task_id)
  117. if err != nil {
  118. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  119. c.ServeJSON()
  120. return
  121. }
  122. err = Task.Delete_TaskData_ByT_sn(Task_r.T_task_id, T_sn)
  123. if err != nil {
  124. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  125. c.ServeJSON()
  126. return
  127. }
  128. System.Add_UserLogs_T(T_uuid, "本地版-任务分裂", "删除分类数据"+Task_r.T_name, Task_r.T_task_id+"|"+T_sn)
  129. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  130. c.ServeJSON()
  131. return
  132. }
  133. // 添加-
  134. func (c *TaskDataController) TaskData_AddS() {
  135. // 获取登录用户的uuid
  136. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  137. T_task_id := c.GetString("T_task_id")
  138. Task_r, err := NatsServer.Read_Task(T_task_id)
  139. if err != nil {
  140. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  141. c.ServeJSON()
  142. return
  143. }
  144. //T_sn|T_id|T_t|T_rh|T_time?
  145. T_Data := c.GetString("T_Data")
  146. if len(T_Data) < 5 {
  147. c.Data["json"] = lib.JSONS{Code: 201, Msg: "err T_Data!"}
  148. c.ServeJSON()
  149. return
  150. }
  151. T_Data_list := strings.Split(T_Data, "?")
  152. println(len(T_Data_list), "len(T_Data_list)")
  153. var T_Data_list_x = 0
  154. for _, v := range T_Data_list {
  155. // 2022-08-09 14:25:00|27.7|55.2
  156. if len(v) < 5 {
  157. println(v, "len(v) < 5")
  158. continue
  159. }
  160. v_list := strings.Split(v, "|")
  161. is := Task.Add_TaskData(Task_r.T_task_id, v_list[0], v_list[1], v_list[2], v_list[3], v_list[4])
  162. if is {
  163. T_Data_list_x += 1
  164. }
  165. }
  166. 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)
  167. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: strconv.Itoa(T_Data_list_x)}
  168. c.ServeJSON()
  169. return
  170. }
  171. // 添加-
  172. func (c *TaskDataController) TaskData_Add() {
  173. // 获取登录用户的uuid
  174. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  175. T_sn := c.GetString("T_sn")
  176. T_id, _ := c.GetInt("T_id")
  177. T_t, _ := c.GetFloat("T_t")
  178. T_rh, _ := c.GetFloat("T_rh")
  179. T_time := c.GetString("T_time")
  180. T_task_id := c.GetString("T_task_id")
  181. Task_r, err := NatsServer.Read_Task(T_task_id)
  182. if err != nil {
  183. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  184. c.ServeJSON()
  185. return
  186. }
  187. 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)
  188. if !is {
  189. c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
  190. c.ServeJSON()
  191. return
  192. }
  193. 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)
  194. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  195. c.ServeJSON()
  196. return
  197. }
  198. // 修改-
  199. func (c *TaskDataController) TaskData_Up() {
  200. // 获取登录用户的uuid
  201. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  202. Id, err := c.GetInt("Id")
  203. if err != nil {
  204. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  205. c.ServeJSON()
  206. return
  207. }
  208. T_t, err := c.GetFloat("T_t")
  209. if err != nil {
  210. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_t 错误!"}
  211. c.ServeJSON()
  212. return
  213. }
  214. T_rh, err := c.GetFloat("T_rh")
  215. if err != nil {
  216. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_rh 错误!"}
  217. c.ServeJSON()
  218. return
  219. }
  220. T_time := c.GetString("T_time")
  221. T_task_id := c.GetString("T_task_id")
  222. Task_r, err := NatsServer.Read_Task(T_task_id)
  223. if err != nil {
  224. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  225. c.ServeJSON()
  226. return
  227. }
  228. is := Task.Up_TaskData(Task_r.T_task_id, strconv.Itoa(Id), fmt.Sprintf("%.2f", T_t), fmt.Sprintf("%.2f", T_rh), T_time)
  229. if !is {
  230. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  231. c.ServeJSON()
  232. return
  233. }
  234. 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)
  235. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  236. c.ServeJSON()
  237. return
  238. }
  239. // 删除-
  240. func (c *TaskDataController) TaskData_Del() {
  241. // 获取登录用户的uuid
  242. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  243. Id, err := c.GetInt("Id")
  244. if err != nil {
  245. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  246. c.ServeJSON()
  247. return
  248. }
  249. T_task_id := c.GetString("T_task_id")
  250. Task_r, err := NatsServer.Read_Task(T_task_id)
  251. if err != nil {
  252. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  253. c.ServeJSON()
  254. return
  255. }
  256. is := Task.Del_TaskData(Task_r.T_task_id, strconv.Itoa(Id))
  257. if !is {
  258. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  259. c.ServeJSON()
  260. return
  261. }
  262. System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
  263. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  264. c.ServeJSON()
  265. return
  266. }
  267. // 删除-
  268. func (c *TaskDataController) TaskData_Del_t_id() {
  269. // 获取登录用户的uuid
  270. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  271. Id, err := c.GetInt("Id")
  272. if err != nil {
  273. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  274. c.ServeJSON()
  275. return
  276. }
  277. T_task_id := c.GetString("T_task_id")
  278. Task_r, err := NatsServer.Read_Task(T_task_id)
  279. if err != nil {
  280. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  281. c.ServeJSON()
  282. return
  283. }
  284. is := Task.Del_TaskData_t_id(Task_r.T_task_id, strconv.Itoa(Id))
  285. if !is {
  286. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  287. c.ServeJSON()
  288. return
  289. }
  290. System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
  291. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  292. c.ServeJSON()
  293. return
  294. }
  295. // 列表 - 接口
  296. func (c *TaskDataController) Export_Data_Excel() {
  297. Time_start := c.GetString("Time_start")
  298. Time_end := c.GetString("Time_end")
  299. T_sn_str := c.GetString("T_sn_list") //865901058809339,865901058815849,865901058818991,865901058810568
  300. //T_id, err := c.GetInt("T_id")
  301. //if err != nil {
  302. // T_id = -1
  303. //
  304. //}
  305. T_task_id := c.GetString("T_task_id")
  306. Task_r, err := NatsServer.Read_Task(T_task_id)
  307. if err != nil {
  308. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  309. c.ServeJSON()
  310. return
  311. }
  312. if Task_r.T_collection_state == 2 {
  313. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  314. c.ServeJSON()
  315. return
  316. }
  317. T_sn_list := strings.Split(T_sn_str, ",")
  318. DeviceSensor_data_list := []Task.TaskData_{}
  319. for _, v := range T_sn_list {
  320. DeviceSensor_data, _ := Task.Read_TaskData_ById_List(Task_r.T_task_id, v, "", Time_start, Time_end, 1, 9999)
  321. DeviceSensor_data_list = append(DeviceSensor_data_list, DeviceSensor_data...)
  322. }
  323. f := excelize.NewFile() // 设置单元格的值
  324. // 这里设置表头
  325. f.SetCellValue("Sheet1", "A1", "编号")
  326. f.SetCellValue("Sheet1", "B1", "SN")
  327. f.SetCellValue("Sheet1", "C1", "温度℃")
  328. f.SetCellValue("Sheet1", "D1", "湿度%")
  329. f.SetCellValue("Sheet1", "E1", "记录时间")
  330. // 设置列宽
  331. f.SetColWidth("Sheet1", "A", "A", 7)
  332. f.SetColWidth("Sheet1", "B", "B", 20)
  333. f.SetColWidth("Sheet1", "C", "C", 10)
  334. f.SetColWidth("Sheet1", "D", "D", 10)
  335. f.SetColWidth("Sheet1", "E", "E", 22)
  336. line := 1
  337. // 循环写入数据
  338. for _, v := range DeviceSensor_data_list {
  339. line++
  340. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), v.T_id)
  341. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_sn)
  342. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), strconv.FormatFloat(float64(v.T_t), 'f', 1, 64))
  343. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), strconv.FormatFloat(float64(v.T_rh), 'f', 1, 64))
  344. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.T_time)
  345. }
  346. fmt.Println("DeviceSensor_data:", len(DeviceSensor_data_list))
  347. lib.Create_Dir("./ofile")
  348. timeStr := time.Now().Format("20060102150405")
  349. // 保存文件
  350. if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
  351. fmt.Println(err)
  352. }
  353. if !lib.Pload_qiniu("ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx") {
  354. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  355. c.ServeJSON()
  356. return
  357. }
  358. //删除目录
  359. //err = os.Remove("ofile/" + timeStr + ".xlsx")
  360. //if err != nil {
  361. // fmt.Println(err)
  362. //}
  363. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: "https://bzdcoldverifyoss.baozhida.cn/" + "ofile/" + timeStr + ".xlsx"}
  364. c.ServeJSON()
  365. return
  366. }
  367. func (c *TaskDataController) Check() {
  368. T_task_id := c.GetString("T_task_id")
  369. Task_r, err := NatsServer.Read_Task(T_task_id)
  370. if Task_r.T_collection_state == 2 {
  371. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  372. c.ServeJSON()
  373. return
  374. }
  375. if err != nil {
  376. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  377. c.ServeJSON()
  378. return
  379. }
  380. type R_JSONS struct {
  381. T_sn string // SN
  382. T_id string // 编号
  383. T_unm int // 数据量
  384. T_time_interval int64 // 时间间隔
  385. Time_start string // 开始
  386. Time_end string // 结束
  387. Result int // 200 OK, 201 可以补 , 202 不能补
  388. Result_str string // 提示内容
  389. Result_Time_start string // 2022-8-05 21:01
  390. Result_Time_defect int64 // 缺失时间间隔
  391. }
  392. var r_jsons []R_JSONS
  393. List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
  394. for _, v := range List {
  395. var r_json R_JSONS
  396. r_json.T_sn = v.T_sn
  397. r_json.T_id = v.T_id
  398. r_json.Result = 200
  399. DeviceSensor_data := Task.Read_TaskData_ById_List_(Task_r.T_task_id, v.T_sn)
  400. r_json.T_unm = len(DeviceSensor_data)
  401. if r_json.T_unm > 2 {
  402. r_json.T_id = DeviceSensor_data[0].T_id
  403. r_json.Time_end = DeviceSensor_data[len(DeviceSensor_data)-1].T_time
  404. r_json.Time_start = DeviceSensor_data[0].T_time
  405. formatTime_a, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[0].T_time)
  406. formatTime_b, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[1].T_time)
  407. formatTime_x := formatTime_b.Unix() - formatTime_a.Unix()
  408. r_json.T_time_interval = formatTime_x
  409. println("formatTime_x:", v.T_id, v.T_sn, formatTime_x)
  410. if formatTime_x > 60*30 || formatTime_x < 60 {
  411. r_json.Result = 202
  412. r_json.Result_str = "数据异常(数据的第一个时间与第二个时间相差 " + strconv.FormatInt(formatTime_x, 10) + "秒),必须大于60秒,小于30分钟"
  413. r_jsons = append(r_jsons, r_json)
  414. continue
  415. }
  416. for data_i := 2; data_i < len(DeviceSensor_data); data_i++ {
  417. formatTime_a = formatTime_b
  418. formatTime_b, _ = time.Parse("2006-1-2 15:04", DeviceSensor_data[data_i].T_time)
  419. formatTime_ := formatTime_b.Unix() - formatTime_a.Unix()
  420. println("formatTime_x-:", formatTime_)
  421. if formatTime_ < formatTime_x {
  422. r_json.Result = 202
  423. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,间隔小于时间间隔,不能自动补充"
  424. break
  425. }
  426. if formatTime_x != formatTime_ {
  427. if formatTime_ > 60*30 {
  428. r_json.Result = 202
  429. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,相差时间大于30分钟,不能自动补充"
  430. break
  431. }
  432. r_json.Result = 201
  433. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒"
  434. r_json.Result_Time_start = DeviceSensor_data[data_i-1].T_time
  435. r_json.Result_Time_defect = formatTime_
  436. println(r_json.Result_str)
  437. break
  438. }
  439. }
  440. } else {
  441. r_json.Result = 202
  442. r_json.Result_str = "数据量太少 必须大于 2条以上!"
  443. }
  444. r_jsons = append(r_jsons, r_json)
  445. }
  446. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  447. c.ServeJSON()
  448. return
  449. }
  450. func (c *TaskDataController) Check_Asyn() {
  451. T_task_id := c.GetString("T_task_id")
  452. Task_r, err := NatsServer.Read_Task(T_task_id)
  453. if Task_r.T_collection_state == 2 {
  454. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  455. c.ServeJSON()
  456. return
  457. }
  458. if err != nil {
  459. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  460. c.ServeJSON()
  461. return
  462. }
  463. type R_JSONS struct {
  464. T_sn string // SN
  465. T_id string // 编号
  466. T_unm int // 数据量
  467. T_time_interval int64 // 时间间隔
  468. Time_start string // 开始
  469. Time_end string // 结束
  470. Result int // 200 OK, 201 可以补 , 202 不能补
  471. Result_str string // 提示内容
  472. Result_Time_start string // 2022-8-05 21:01
  473. Result_Time_defect int64 // 缺失时间间隔
  474. }
  475. List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
  476. r_jsons := make([]R_JSONS, len(List))
  477. var limitMaxNum = 10
  478. var chData = make(chan int, limitMaxNum)
  479. var jobGroup sync.WaitGroup
  480. var tasknum = len(List)
  481. for i := 0; i < tasknum; i++ {
  482. chData <- 1
  483. jobGroup.Add(1)
  484. go func(index int, wg *sync.WaitGroup, res *[]R_JSONS) {
  485. defer wg.Done()
  486. var r_json R_JSONS
  487. r_json.T_sn = List[index].T_sn
  488. r_json.T_id = List[index].T_id
  489. r_json.Result = 200
  490. DeviceSensor_data := Task.Read_TaskData_ById_List_(Task_r.T_task_id, List[index].T_sn)
  491. r_json.T_unm = len(DeviceSensor_data)
  492. if r_json.T_unm > 2 {
  493. r_json.T_id = DeviceSensor_data[0].T_id
  494. r_json.Time_end = DeviceSensor_data[len(DeviceSensor_data)-1].T_time
  495. r_json.Time_start = DeviceSensor_data[0].T_time
  496. formatTime_a, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[0].T_time)
  497. formatTime_b, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[1].T_time)
  498. formatTime_x := formatTime_b.Unix() - formatTime_a.Unix()
  499. r_json.T_time_interval = formatTime_x
  500. println("formatTime_x:", List[index].T_id, List[index].T_sn, formatTime_x)
  501. if formatTime_x > 60*30 || formatTime_x < 60 {
  502. r_json.Result = 202
  503. r_json.Result_str = "数据异常(数据的第一个时间与第二个时间相差 " + strconv.FormatInt(formatTime_x, 10) + "秒),必须大于60秒,小于30分钟"
  504. *res = append(*res, r_json)
  505. <-chData
  506. return
  507. }
  508. for data_i := 2; data_i < len(DeviceSensor_data); data_i++ {
  509. formatTime_a = formatTime_b
  510. formatTime_b, _ = time.Parse("2006-1-2 15:04", DeviceSensor_data[data_i].T_time)
  511. formatTime_ := formatTime_b.Unix() - formatTime_a.Unix()
  512. if formatTime_ < formatTime_x {
  513. println("formatTime_x-:", formatTime_)
  514. r_json.Result = 202
  515. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,间隔小于时间间隔,不能自动补充"
  516. break
  517. }
  518. if formatTime_x != formatTime_ {
  519. if formatTime_ > 60*30 {
  520. println("formatTime_x-:", formatTime_)
  521. r_json.Result = 202
  522. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,相差时间大于30分钟,不能自动补充"
  523. break
  524. }
  525. r_json.Result = 202
  526. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒"
  527. r_json.Result_Time_start = DeviceSensor_data[data_i-1].T_time
  528. r_json.Result_Time_defect = formatTime_
  529. println(r_json.Result_str)
  530. break
  531. }
  532. }
  533. } else {
  534. r_json.Result = 202
  535. r_json.Result_str = "数据量太少 必须大于 2条以上!"
  536. }
  537. *res = append(*res, r_json)
  538. <-chData
  539. }(i, &jobGroup, &r_jsons)
  540. }
  541. //使用Wait等待所有任务执行完毕
  542. jobGroup.Wait()
  543. jsonsMap := map[string]R_JSONS{}
  544. resp := make([]R_JSONS, 0)
  545. for _, json := range r_jsons {
  546. jsonsMap[json.T_id] = json
  547. }
  548. for _, v := range List {
  549. resp = append(resp, jsonsMap[v.T_id])
  550. }
  551. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: resp}
  552. c.ServeJSON()
  553. return
  554. }
  555. // 打包数据本地数据
  556. func (c *TaskDataController) TaskData_Import_TaskData() {
  557. // 获取登录用户的uuid
  558. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  559. T_task_id := c.GetString("T_task_id")
  560. _, err := NatsServer.Read_Task(T_task_id)
  561. if err != nil {
  562. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  563. c.ServeJSON()
  564. return
  565. }
  566. if err = lib.Create_Dir(conf.Sql_Temp_Dir); err != nil {
  567. logs.Println("创建sql临时文件失败")
  568. }
  569. sql_file := fmt.Sprintf("%sZ_TaskData_%s.sql", conf.Sql_Temp_Dir, T_task_id)
  570. org, err := Task.Dump_TaskData(T_task_id, conf.MysqlServer2_Username, conf.MysqlServer2_Password, conf.MysqlServer2_UrlPort, conf.MysqlServer2_Database, sql_file)
  571. if err != nil {
  572. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线上数据导出失败!"}
  573. c.ServeJSON()
  574. return
  575. }
  576. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-打包本地数据", "导出线上数据Z_TaskData_"+T_task_id, org)
  577. i := 0
  578. flag := false
  579. Task.CREATE_TaskData(conf.Local_AliasName, T_task_id)
  580. for i < 10 {
  581. Task.Truncate_TaskData(conf.Local_AliasName, T_task_id)
  582. org, err = Task.Insert_TaskData(conf.MysqlServer_Username, conf.MysqlServer_Password, conf.MysqlServer_UrlPort, conf.MysqlServer_Database, sql_file)
  583. if err != nil {
  584. logs.Println("任务数据-打包本地数据", "线下导入数据Z_TaskData_"+T_task_id, err.Error())
  585. } else {
  586. if Task.Check_TaskData_Num(T_task_id) {
  587. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-打包本地数据", "线下导入数据Z_TaskData_"+T_task_id, org)
  588. flag = true
  589. break
  590. }
  591. }
  592. i++
  593. }
  594. // 重试10次后仍然没有成功导入数据
  595. if !flag {
  596. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线下导入数据失败!"}
  597. c.ServeJSON()
  598. return
  599. }
  600. //删除导出的sql文件
  601. _ = os.Remove(sql_file)
  602. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  603. c.ServeJSON()
  604. }
  605. // 更新线上数据
  606. func (c *TaskDataController) TaskData_Up_TaskData() {
  607. // 获取登录用户的uuid
  608. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  609. T_task_id := c.GetString("T_task_id")
  610. Task_r, err := NatsServer.Read_Task(T_task_id)
  611. if err != nil {
  612. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  613. c.ServeJSON()
  614. return
  615. }
  616. if err = lib.Create_Dir(conf.Sql_Temp_Dir); err != nil {
  617. logs.Println("创建sql临时文件失败")
  618. }
  619. sql_file := fmt.Sprintf("%sZ_TaskData_%s.sql", conf.Sql_Temp_Dir, T_task_id)
  620. org, err := Task.Dump_TaskData(T_task_id, conf.MysqlServer_Username, conf.MysqlServer_Password, conf.MysqlServer_UrlPort, conf.MysqlServer_Database, sql_file)
  621. if err != nil {
  622. logs.Println(T_uuid, "任务数据-更新线上数据", "导出线下数据Z_TaskData_"+T_task_id, err.Error())
  623. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线下数据导出失败!"}
  624. c.ServeJSON()
  625. return
  626. }
  627. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, org)
  628. i := 0
  629. flag := false
  630. for i < 10 {
  631. Task.Truncate_TaskData(conf.Server_AliasName, T_task_id)
  632. org, err = Task.Insert_TaskData(conf.MysqlServer2_Username, conf.MysqlServer2_Password, conf.MysqlServer2_UrlPort, conf.MysqlServer2_Database, sql_file)
  633. if err != nil {
  634. logs.Println(T_uuid, "任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, err.Error())
  635. } else {
  636. if Task.Check_TaskData_Num(T_task_id) {
  637. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, org)
  638. flag = true
  639. break
  640. }
  641. }
  642. i++
  643. }
  644. // 重试10次后仍然没有成功导入数据
  645. if !flag {
  646. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线上导入数据失败!"}
  647. c.ServeJSON()
  648. return
  649. }
  650. //删除导出的sql文件
  651. _ = os.Remove(sql_file)
  652. // 线上数据更新后 将当前任务 交付审核 标志 为 1
  653. Task_r.T_delivery_state = 1
  654. err = NatsServer.Update_Task(Task_r)
  655. if err != nil {
  656. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  657. c.ServeJSON()
  658. return
  659. }
  660. // 向线上用户日志表写入数据
  661. System.Add_UserLogs_T(T_uuid, "本地版-任务", "修改", Task_r)
  662. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  663. c.ServeJSON()
  664. }
  665. // 更新线上数据后台执行
  666. func (c *TaskDataController) TaskData_Up_TaskData_Back() {
  667. // 获取登录用户的uuid
  668. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  669. T_task_id := c.GetString("T_task_id")
  670. Task_r, err := NatsServer.Read_Task(T_task_id)
  671. if err != nil {
  672. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  673. c.ServeJSON()
  674. return
  675. }
  676. if Task_r.T_delivery_state == 2 {
  677. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  678. c.ServeJSON()
  679. return
  680. }
  681. // 采集中
  682. Task_r.T_delivery_state = 2
  683. err = NatsServer.Update_Task(Task_r)
  684. if err != nil {
  685. c.Data["json"] = lib.JSONS{Code: 202, Msg: "提交失败!"}
  686. c.ServeJSON()
  687. return
  688. }
  689. data := Nats.Up_TaskData_Back{
  690. T_uuid: T_uuid,
  691. Task: Task_r,
  692. }
  693. b, _ := msgpack.Marshal(&data)
  694. _ = lib.Nats.Publish("ColdVerify_Local_Up_TaskData", b)
  695. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  696. c.ServeJSON()
  697. return
  698. }
  699. // CopyFromPosition 数据拷贝
  700. func (c *TaskDataController) CopyFromPosition() {
  701. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  702. //if !b_ {
  703. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  704. // c.ServeJSON()
  705. // return
  706. //}
  707. StartTime := c.GetString("StartTime")
  708. startTime, ok := lib.TimeStrToTime(StartTime)
  709. if !ok {
  710. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  711. c.ServeJSON()
  712. return
  713. }
  714. EndTime := c.GetString("EndTime")
  715. endTime, ok := lib.TimeStrToTime(EndTime)
  716. if !ok {
  717. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  718. c.ServeJSON()
  719. return
  720. }
  721. CopyTime := c.GetString("CopyTime")
  722. copyTime, ok := lib.TimeStrToTime(CopyTime)
  723. if !ok {
  724. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  725. c.ServeJSON()
  726. return
  727. }
  728. CopyEndTime := copyTime.Add(endTime.Sub(startTime)).Format("2006-01-02 15:04:05")
  729. // 时间间隔 分钟
  730. T_saveT, _ := c.GetInt("T_saveT")
  731. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  732. T_task_id := c.GetString("T_task_id")
  733. Task_r, err := NatsServer.Read_Task(T_task_id)
  734. if err != nil {
  735. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  736. c.ServeJSON()
  737. return
  738. }
  739. if Task_r.T_collection_state == 2 {
  740. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  741. c.ServeJSON()
  742. return
  743. }
  744. for _, v := range SN_List {
  745. sn_id := strings.Split(v, ",")
  746. if len(sn_id) != 2 {
  747. continue
  748. }
  749. sn, id_str := sn_id[0], sn_id[1]
  750. id, _ := strconv.Atoi(id_str)
  751. Task.DeleteTaskDataByTimeRange(Task_r.T_task_id, sn, id, CopyTime, CopyEndTime)
  752. List, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id, StartTime, EndTime, 0, 9999)
  753. ct := copyTime
  754. go func(TaskDataList []Task.TaskData_, task_id string, T_saveT int) {
  755. for _, taskData := range TaskDataList {
  756. taskData.T_time = ct.Format("2006-01-02 15:04:05")
  757. Task.InsertTaskData(task_id, taskData)
  758. ct = ct.Add(time.Second * time.Duration(T_saveT))
  759. }
  760. }(List, Task_r.T_task_id, T_saveT)
  761. }
  762. System.Add_UserLogs_T(T_uuid, "数据复制", fmt.Sprintf("数据复制(%s)[%s|%s],复制时间:%s,,时间间隔:%d", T_task_id, StartTime, EndTime, CopyTime, T_saveT), SN_List)
  763. c.Data["json"] = lib.JSONS{200, "数据复制已提交后台处理!", nil}
  764. c.ServeJSON()
  765. return
  766. }
  767. // RepairSensorData 数据补漏
  768. func (c *TaskDataController) RepairSensorData() {
  769. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  770. //if !b_ {
  771. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  772. // c.ServeJSON()
  773. // return
  774. //}
  775. StartTime := c.GetString("StartTime")
  776. _, ok := lib.TimeStrToTime(StartTime)
  777. if !ok {
  778. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  779. c.ServeJSON()
  780. return
  781. }
  782. EndTime := c.GetString("EndTime")
  783. _, ok = lib.TimeStrToTime(EndTime)
  784. if !ok {
  785. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  786. c.ServeJSON()
  787. return
  788. }
  789. // 时间间隔 秒
  790. saveTime, _ := c.GetInt("T_saveT")
  791. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  792. T_task_id := c.GetString("T_task_id")
  793. Task_r, err := NatsServer.Read_Task(T_task_id)
  794. if err != nil {
  795. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  796. c.ServeJSON()
  797. return
  798. }
  799. if Task_r.T_collection_state == 2 {
  800. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  801. c.ServeJSON()
  802. return
  803. }
  804. num := 0
  805. for _, v := range SN_List {
  806. sn_id := strings.Split(v, ",")
  807. if len(sn_id) != 2 {
  808. continue
  809. }
  810. sn, id_str := sn_id[0], sn_id[1]
  811. id, _ := strconv.Atoi(id_str)
  812. list, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id, StartTime, EndTime, 0, 9999)
  813. for i := 0; i < len(list)-1; i++ {
  814. current := list[i].T_time
  815. next := list[i+1].T_time
  816. c, _ := time.Parse("2006-01-02 15:04:05", current)
  817. n, _ := time.Parse("2006-01-02 15:04:05", next)
  818. interval := n.Unix() - c.Unix()
  819. logs.Debug("时间间隔:", interval, "保存时间:", saveTime)
  820. fmt.Println("当前:", current, "下一个:", next)
  821. if int(interval) > saveTime {
  822. ttInterval := list[i+1].T_t - list[i].T_t
  823. ttt := list[i].T_t // 温度临时变量
  824. trhInterval := list[i+1].T_rh - list[i].T_rh
  825. trht := list[i].T_rh //湿度临时变量
  826. count := (int(interval) - saveTime) / saveTime
  827. if int(interval)%saveTime != 0 {
  828. count++
  829. }
  830. num += count
  831. for k := 0; k < count; k++ {
  832. t := c.Add(time.Second * time.Duration(saveTime)).Format("2006-01-02 15:04:05") //时间临时变量
  833. ttt += ttInterval / float32(count)
  834. trht += trhInterval / float32(count)
  835. Task.InsertTaskData(Task_r.T_task_id, Task.TaskData_{
  836. T_sn: list[i].T_sn,
  837. T_id: list[i].T_id,
  838. T_t: ttt,
  839. T_rh: trht,
  840. T_time: t,
  841. })
  842. c = c.Add(time.Second * time.Duration(saveTime))
  843. }
  844. }
  845. }
  846. }
  847. System.Add_UserLogs_T(T_uuid, "数据补漏", fmt.Sprintf("数据补漏(%s)[%s|%s],时间间隔:%d", T_task_id, StartTime, EndTime, saveTime), SN_List)
  848. c.Data["json"] = lib.JSONS{200, fmt.Sprintf("补漏完成!共补漏%d条数据", num), nil}
  849. c.ServeJSON()
  850. return
  851. }
  852. // DataSensorDataTrend 数据趋势
  853. func (c *TaskDataController) DataSensorDataTrend() {
  854. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  855. //if !b_ {
  856. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  857. // c.ServeJSON()
  858. // return
  859. //}
  860. StartTime := c.GetString("StartTime")
  861. _, ok := lib.TimeStrToTime(StartTime)
  862. if !ok {
  863. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  864. c.ServeJSON()
  865. return
  866. }
  867. EndTime := c.GetString("EndTime")
  868. _, ok = lib.TimeStrToTime(EndTime)
  869. if !ok {
  870. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  871. c.ServeJSON()
  872. return
  873. }
  874. // 时间间隔 秒
  875. saveTime, _ := c.GetInt("T_saveT")
  876. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  877. T_task_id := c.GetString("T_task_id")
  878. Task_r, err := NatsServer.Read_Task(T_task_id)
  879. if err != nil {
  880. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  881. c.ServeJSON()
  882. return
  883. }
  884. if Task_r.T_collection_state == 2 {
  885. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  886. c.ServeJSON()
  887. return
  888. }
  889. for _, v := range SN_List {
  890. sn_id := strings.Split(v, ",")
  891. if len(sn_id) != 2 {
  892. continue
  893. }
  894. sn, id_str := sn_id[0], sn_id[1]
  895. id, _ := strconv.Atoi(id_str)
  896. list, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id, StartTime, EndTime, 0, 9999)
  897. if len(list) == 0 {
  898. continue
  899. }
  900. Task.DeleteTaskDataByTimeRange(Task_r.T_task_id, sn, id, StartTime, EndTime)
  901. first := list[0]
  902. last := list[len(list)-1]
  903. current, _ := time.Parse("2006-01-02 15:04:05", first.T_time)
  904. next, _ := time.Parse("2006-01-02 15:04:05", last.T_time)
  905. interval := next.Sub(current).Seconds() / float64(saveTime)
  906. ttInterval := (last.T_t - first.T_t) / float32(interval)
  907. trhInterval := (last.T_rh - first.T_rh) / float32(interval)
  908. tt := first.T_t
  909. ttrh := first.T_rh
  910. for current.Unix() < next.Unix() {
  911. tt += ttInterval
  912. ttrh += trhInterval
  913. ttime := current.Format("2006-01-02 15:04:05")
  914. Task.InsertTaskData(Task_r.T_task_id, Task.TaskData_{
  915. //加保存时间
  916. T_sn: first.T_sn,
  917. T_id: strconv.Itoa(id),
  918. T_t: tt,
  919. T_rh: ttrh,
  920. T_time: ttime,
  921. })
  922. current = current.Add(time.Second * time.Duration(saveTime))
  923. }
  924. }
  925. System.Add_UserLogs_T(T_uuid, "数据趋势", fmt.Sprintf("数据趋势(%s)[%s|%s],时间间隔:%d", T_task_id, StartTime, EndTime, saveTime), SN_List)
  926. c.Data["json"] = lib.JSONS{200, "设置趋势操作成功", nil}
  927. c.ServeJSON()
  928. return
  929. }
  930. // UpdateRand 数据随机
  931. func (c *TaskDataController) UpdateRand() {
  932. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  933. //if !b_ {
  934. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  935. // c.ServeJSON()
  936. // return
  937. //}
  938. StartTime := c.GetString("StartTime")
  939. _, ok := lib.TimeStrToTime(StartTime)
  940. if !ok {
  941. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  942. c.ServeJSON()
  943. return
  944. }
  945. EndTime := c.GetString("EndTime")
  946. _, ok = lib.TimeStrToTime(EndTime)
  947. if !ok {
  948. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  949. c.ServeJSON()
  950. return
  951. }
  952. TemperatureMin, _ := c.GetInt("TemperatureMin") // 温度
  953. TemperatureMax, _ := c.GetInt("TemperatureMax")
  954. HumidityMax, _ := c.GetInt("HumidityMax") // 湿度
  955. HumidityMin, _ := c.GetInt("HumidityMin")
  956. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  957. T_task_id := c.GetString("T_task_id")
  958. Task_r, err := NatsServer.Read_Task(T_task_id)
  959. if err != nil {
  960. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  961. c.ServeJSON()
  962. return
  963. }
  964. if Task_r.T_collection_state == 2 {
  965. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  966. c.ServeJSON()
  967. return
  968. }
  969. for _, v := range SN_List {
  970. sn_id := strings.Split(v, ",")
  971. if len(sn_id) != 2 {
  972. continue
  973. }
  974. sn, id := sn_id[0], sn_id[1]
  975. Task.UpdateTaskDataTemperatureAndHumidityRandom(Task_r.T_task_id, sn, id, StartTime, EndTime, TemperatureMax, TemperatureMin, HumidityMax, HumidityMin)
  976. }
  977. System.Add_UserLogs_T(T_uuid, "数据随机", fmt.Sprintf("数据随机(%s)[%s|%s],温度[%d-%d],湿度[%d-%d]", T_task_id, StartTime, EndTime, TemperatureMin, TemperatureMax, HumidityMax, HumidityMin), SN_List)
  978. //反馈成功
  979. c.Data["json"] = lib.JSONS{200, "调整随机偏移值成功!", nil}
  980. c.ServeJSON()
  981. return
  982. }
  983. // UpdateFix 更新固定值
  984. func (c *TaskDataController) UpdateFix() {
  985. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  986. //if !b_ {
  987. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  988. // c.ServeJSON()
  989. // return
  990. //}
  991. StartTime := c.GetString("StartTime")
  992. _, ok := lib.TimeStrToTime(StartTime)
  993. if !ok {
  994. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  995. c.ServeJSON()
  996. return
  997. }
  998. EndTime := c.GetString("EndTime")
  999. _, ok = lib.TimeStrToTime(EndTime)
  1000. if !ok {
  1001. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1002. c.ServeJSON()
  1003. return
  1004. }
  1005. FixTemperature := c.GetString("FixTemperature")
  1006. FixHumidity := c.GetString("FixHumidity")
  1007. //2.得到数据进行统一设置访问修改
  1008. humidity, _ := strconv.ParseFloat(FixHumidity, 64)
  1009. temperature, _ := strconv.ParseFloat(FixTemperature, 64)
  1010. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1011. T_task_id := c.GetString("T_task_id")
  1012. Task_r, err := NatsServer.Read_Task(T_task_id)
  1013. if err != nil {
  1014. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1015. c.ServeJSON()
  1016. return
  1017. }
  1018. if Task_r.T_collection_state == 2 {
  1019. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1020. c.ServeJSON()
  1021. return
  1022. }
  1023. //3.循环更新数据
  1024. for _, v := range SN_List {
  1025. sn_id := strings.Split(v, ",")
  1026. if len(sn_id) != 2 {
  1027. continue
  1028. }
  1029. sn, id := sn_id[0], sn_id[1]
  1030. Task.UpdateTaskDataTemperatureAndHumidity(Task_r.T_task_id, sn, id, StartTime, EndTime, temperature, humidity)
  1031. }
  1032. System.Add_UserLogs_T(T_uuid, "更新固定值", fmt.Sprintf("更新固定值(%s)[%s|%s],温度[%f],湿度[%f]", T_task_id, StartTime, EndTime, temperature, humidity), SN_List)
  1033. //4.反馈成功
  1034. c.Data["json"] = lib.JSONS{200, "调整固定偏移值成功!", nil}
  1035. c.ServeJSON()
  1036. }
  1037. // DataSensorDataSmooth 数据平滑
  1038. func (c *TaskDataController) DataSensorDataSmooth() {
  1039. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1040. //if !b_ {
  1041. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1042. // c.ServeJSON()
  1043. // return
  1044. //}
  1045. StartTime := c.GetString("StartTime")
  1046. _, ok := lib.TimeStrToTime(StartTime)
  1047. if !ok {
  1048. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1049. c.ServeJSON()
  1050. return
  1051. }
  1052. EndTime := c.GetString("EndTime")
  1053. _, ok = lib.TimeStrToTime(EndTime)
  1054. if !ok {
  1055. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1056. c.ServeJSON()
  1057. return
  1058. }
  1059. tRange, _ := c.GetFloat("tRange")
  1060. hRange, _ := c.GetFloat("hRange")
  1061. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1062. T_task_id := c.GetString("T_task_id")
  1063. Task_r, err := NatsServer.Read_Task(T_task_id)
  1064. if err != nil {
  1065. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1066. c.ServeJSON()
  1067. return
  1068. }
  1069. if Task_r.T_collection_state == 2 {
  1070. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1071. c.ServeJSON()
  1072. return
  1073. }
  1074. var count int
  1075. for _, v := range SN_List {
  1076. sn_id := strings.Split(v, ",")
  1077. if len(sn_id) != 2 {
  1078. continue
  1079. }
  1080. sn := sn_id[0]
  1081. id_str := sn_id[1]
  1082. id, _ := strconv.Atoi(id_str)
  1083. list, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id, StartTime, EndTime, 0, 9999)
  1084. for i := 1; i < len(list); i++ {
  1085. n := list[i-1]
  1086. old := list[i]
  1087. newO := list[i]
  1088. //变化差
  1089. var tInterval = old.T_t - n.T_t
  1090. var hInterval = old.T_rh - n.T_rh
  1091. fmt.Println("温度:", n.T_t, "温度next:", old.T_t, "差值:", n.T_t-old.T_t)
  1092. if tRange != 0 {
  1093. if tInterval > float32(tRange) {
  1094. newO.T_t = n.T_t + float32(tRange)
  1095. } else if tInterval < -float32(tRange) {
  1096. newO.T_t = n.T_t - float32(tRange)
  1097. }
  1098. }
  1099. if hRange != 0 {
  1100. if hInterval > float32(hRange) {
  1101. newO.T_rh = n.T_rh + float32(hRange)
  1102. } else if hInterval < -float32(hRange) {
  1103. newO.T_rh = n.T_rh - float32(hRange)
  1104. }
  1105. }
  1106. if old.T_rh != newO.T_rh || old.T_t != newO.T_t {
  1107. fmt.Println("原始数据:", old, "新数据:", newO)
  1108. list[i] = newO
  1109. Task.UpdateTaskData(Task_r.T_task_id, sn, id_str, old, newO)
  1110. count++
  1111. }
  1112. }
  1113. }
  1114. System.Add_UserLogs_T(T_uuid, "数据平滑", fmt.Sprintf("数据平滑(%s)[%s|%s],温度[%f],湿度[%f]", T_task_id, StartTime, EndTime, tRange, hRange), SN_List)
  1115. c.Data["json"] = lib.JSONS{200, "操作成功处理" + fmt.Sprint(count) + "条数据", nil}
  1116. c.ServeJSON()
  1117. }