TaskData.go 52 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739
  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. // 132|132|23.9|72.1|2023-04-30 07:03:00
  156. if len(v) < 5 {
  157. println(v, "len(v) < 5")
  158. continue
  159. }
  160. v_list := strings.Split(v, "|")
  161. t, _ := lib.ReplaceSeconds(v_list[4])
  162. is := Task.Add_TaskData(Task_r.T_task_id, v_list[0], v_list[1], v_list[2], v_list[3], t)
  163. if is {
  164. T_Data_list_x += 1
  165. }
  166. }
  167. 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)
  168. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: strconv.Itoa(T_Data_list_x)}
  169. c.ServeJSON()
  170. return
  171. }
  172. // 添加-
  173. func (c *TaskDataController) TaskData_Add() {
  174. // 获取登录用户的uuid
  175. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  176. T_sn := c.GetString("T_sn")
  177. T_id, _ := c.GetInt("T_id")
  178. T_t, _ := c.GetFloat("T_t")
  179. T_rh, _ := c.GetFloat("T_rh")
  180. T_time := c.GetString("T_time")
  181. T_task_id := c.GetString("T_task_id")
  182. Task_r, err := NatsServer.Read_Task(T_task_id)
  183. if err != nil {
  184. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  185. c.ServeJSON()
  186. return
  187. }
  188. 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)
  189. if !is {
  190. c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
  191. c.ServeJSON()
  192. return
  193. }
  194. 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)
  195. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  196. c.ServeJSON()
  197. return
  198. }
  199. // 修改-
  200. func (c *TaskDataController) TaskData_Up() {
  201. // 获取登录用户的uuid
  202. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  203. Id, err := c.GetInt("Id")
  204. if err != nil {
  205. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  206. c.ServeJSON()
  207. return
  208. }
  209. T_t, err := c.GetFloat("T_t")
  210. if err != nil {
  211. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_t 错误!"}
  212. c.ServeJSON()
  213. return
  214. }
  215. T_rh, err := c.GetFloat("T_rh")
  216. if err != nil {
  217. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_rh 错误!"}
  218. c.ServeJSON()
  219. return
  220. }
  221. T_time := c.GetString("T_time")
  222. T_task_id := c.GetString("T_task_id")
  223. Task_r, err := NatsServer.Read_Task(T_task_id)
  224. if err != nil {
  225. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  226. c.ServeJSON()
  227. return
  228. }
  229. is := Task.Up_TaskData(Task_r.T_task_id, strconv.Itoa(Id), fmt.Sprintf("%.2f", T_t), fmt.Sprintf("%.2f", T_rh), T_time)
  230. if !is {
  231. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  232. c.ServeJSON()
  233. return
  234. }
  235. 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)
  236. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  237. c.ServeJSON()
  238. return
  239. }
  240. // 删除-
  241. func (c *TaskDataController) TaskData_Del() {
  242. // 获取登录用户的uuid
  243. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  244. Id, err := c.GetInt("Id")
  245. if err != nil {
  246. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  247. c.ServeJSON()
  248. return
  249. }
  250. T_task_id := c.GetString("T_task_id")
  251. Task_r, err := NatsServer.Read_Task(T_task_id)
  252. if err != nil {
  253. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  254. c.ServeJSON()
  255. return
  256. }
  257. is := Task.Del_TaskData(Task_r.T_task_id, strconv.Itoa(Id))
  258. if !is {
  259. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  260. c.ServeJSON()
  261. return
  262. }
  263. System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
  264. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  265. c.ServeJSON()
  266. return
  267. }
  268. // 删除-
  269. func (c *TaskDataController) TaskData_Del_t_id() {
  270. // 获取登录用户的uuid
  271. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  272. Id, err := c.GetInt("Id")
  273. if err != nil {
  274. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  275. c.ServeJSON()
  276. return
  277. }
  278. T_task_id := c.GetString("T_task_id")
  279. Task_r, err := NatsServer.Read_Task(T_task_id)
  280. if err != nil {
  281. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  282. c.ServeJSON()
  283. return
  284. }
  285. is := Task.Del_TaskData_t_id(Task_r.T_task_id, strconv.Itoa(Id))
  286. if !is {
  287. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  288. c.ServeJSON()
  289. return
  290. }
  291. System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
  292. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  293. c.ServeJSON()
  294. return
  295. }
  296. // 列表 - 接口
  297. func (c *TaskDataController) Export_Data_Excel() {
  298. Time_start := c.GetString("Time_start")
  299. Time_end := c.GetString("Time_end")
  300. T_sn_str := c.GetString("T_sn_list") //865901058809339,865901058815849,865901058818991,865901058810568
  301. //T_id, err := c.GetInt("T_id")
  302. //if err != nil {
  303. // T_id = -1
  304. //
  305. //}
  306. T_task_id := c.GetString("T_task_id")
  307. Task_r, err := NatsServer.Read_Task(T_task_id)
  308. if err != nil {
  309. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  310. c.ServeJSON()
  311. return
  312. }
  313. if Task_r.T_collection_state == 2 {
  314. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  315. c.ServeJSON()
  316. return
  317. }
  318. T_sn_list := strings.Split(T_sn_str, ",")
  319. DeviceSensor_data_list := []Task.TaskData_{}
  320. for _, v := range T_sn_list {
  321. DeviceSensor_data, _ := Task.Read_TaskData_ById_List(Task_r.T_task_id, v, "", Time_start, Time_end, 1, 9999)
  322. DeviceSensor_data_list = append(DeviceSensor_data_list, DeviceSensor_data...)
  323. }
  324. f := excelize.NewFile() // 设置单元格的值
  325. // 这里设置表头
  326. f.SetCellValue("Sheet1", "A1", "编号")
  327. f.SetCellValue("Sheet1", "B1", "SN")
  328. f.SetCellValue("Sheet1", "C1", "温度℃")
  329. f.SetCellValue("Sheet1", "D1", "湿度%")
  330. f.SetCellValue("Sheet1", "E1", "记录时间")
  331. // 设置列宽
  332. f.SetColWidth("Sheet1", "A", "A", 7)
  333. f.SetColWidth("Sheet1", "B", "B", 20)
  334. f.SetColWidth("Sheet1", "C", "C", 10)
  335. f.SetColWidth("Sheet1", "D", "D", 10)
  336. f.SetColWidth("Sheet1", "E", "E", 22)
  337. line := 1
  338. // 循环写入数据
  339. for _, v := range DeviceSensor_data_list {
  340. line++
  341. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), v.T_id)
  342. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_sn)
  343. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), strconv.FormatFloat(float64(v.T_t), 'f', 1, 64))
  344. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), strconv.FormatFloat(float64(v.T_rh), 'f', 1, 64))
  345. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.T_time)
  346. }
  347. fmt.Println("DeviceSensor_data:", len(DeviceSensor_data_list))
  348. lib.Create_Dir("./ofile")
  349. timeStr := time.Now().Format("20060102150405")
  350. // 保存文件
  351. if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
  352. fmt.Println(err)
  353. }
  354. if !lib.Pload_qiniu("ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx") {
  355. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  356. c.ServeJSON()
  357. return
  358. }
  359. //删除目录
  360. //err = os.Remove("ofile/" + timeStr + ".xlsx")
  361. //if err != nil {
  362. // fmt.Println(err)
  363. //}
  364. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: "https://bzdcoldverifyoss.baozhida.cn/" + "ofile/" + timeStr + ".xlsx"}
  365. c.ServeJSON()
  366. return
  367. }
  368. func (c *TaskDataController) Check() {
  369. T_task_id := c.GetString("T_task_id")
  370. Task_r, err := NatsServer.Read_Task(T_task_id)
  371. if Task_r.T_collection_state == 2 {
  372. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  373. c.ServeJSON()
  374. return
  375. }
  376. if err != nil {
  377. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  378. c.ServeJSON()
  379. return
  380. }
  381. type R_JSONS struct {
  382. T_sn string // SN
  383. T_id string // 编号
  384. T_unm int // 数据量
  385. T_time_interval int64 // 时间间隔
  386. Time_start string // 开始
  387. Time_end string // 结束
  388. Result int // 200 OK, 201 可以补 , 202 不能补
  389. Result_str string // 提示内容
  390. Result_Time_start string // 2022-8-05 21:01
  391. Result_Time_defect int64 // 缺失时间间隔
  392. }
  393. var r_jsons []R_JSONS
  394. List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
  395. for _, v := range List {
  396. var r_json R_JSONS
  397. r_json.T_sn = v.T_sn
  398. r_json.T_id = v.T_id
  399. r_json.Result = 200
  400. DeviceSensor_data := Task.Read_TaskData_ById_List_(Task_r.T_task_id, v.T_sn)
  401. r_json.T_unm = len(DeviceSensor_data)
  402. if r_json.T_unm > 2 {
  403. r_json.T_id = DeviceSensor_data[0].T_id
  404. r_json.Time_end = DeviceSensor_data[len(DeviceSensor_data)-1].T_time
  405. r_json.Time_start = DeviceSensor_data[0].T_time
  406. formatTime_a, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[0].T_time)
  407. formatTime_b, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[1].T_time)
  408. formatTime_x := formatTime_b.Unix() - formatTime_a.Unix()
  409. r_json.T_time_interval = formatTime_x
  410. println("formatTime_x:", v.T_id, v.T_sn, formatTime_x)
  411. if formatTime_x > 60*30 || formatTime_x < 60 {
  412. r_json.Result = 202
  413. r_json.Result_str = "数据异常(数据的第一个时间与第二个时间相差 " + strconv.FormatInt(formatTime_x, 10) + "秒),必须大于60秒,小于30分钟"
  414. r_jsons = append(r_jsons, r_json)
  415. continue
  416. }
  417. for data_i := 2; data_i < len(DeviceSensor_data); data_i++ {
  418. formatTime_a = formatTime_b
  419. formatTime_b, _ = time.Parse("2006-1-2 15:04", DeviceSensor_data[data_i].T_time)
  420. formatTime_ := formatTime_b.Unix() - formatTime_a.Unix()
  421. println("formatTime_x-:", formatTime_)
  422. if formatTime_ < formatTime_x {
  423. r_json.Result = 202
  424. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,间隔小于时间间隔,不能自动补充"
  425. break
  426. }
  427. if formatTime_x != formatTime_ {
  428. if formatTime_ > 60*30 {
  429. r_json.Result = 202
  430. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,相差时间大于30分钟,不能自动补充"
  431. break
  432. }
  433. r_json.Result = 201
  434. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒"
  435. r_json.Result_Time_start = DeviceSensor_data[data_i-1].T_time
  436. r_json.Result_Time_defect = formatTime_
  437. println(r_json.Result_str)
  438. break
  439. }
  440. }
  441. } else {
  442. r_json.Result = 202
  443. r_json.Result_str = "数据量太少 必须大于 2条以上!"
  444. }
  445. r_jsons = append(r_jsons, r_json)
  446. }
  447. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  448. c.ServeJSON()
  449. return
  450. }
  451. func (c *TaskDataController) Check_Asyn() {
  452. T_task_id := c.GetString("T_task_id")
  453. Task_r, err := NatsServer.Read_Task(T_task_id)
  454. if Task_r.T_collection_state == 2 {
  455. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  456. c.ServeJSON()
  457. return
  458. }
  459. if err != nil {
  460. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  461. c.ServeJSON()
  462. return
  463. }
  464. type R_JSONS struct {
  465. T_sn string // SN
  466. T_id string // 编号
  467. T_unm int // 数据量
  468. T_time_interval int64 // 时间间隔
  469. Time_start string // 开始
  470. Time_end string // 结束
  471. Result int // 200 OK, 201 可以补 , 202 不能补
  472. Result_str string // 提示内容
  473. Result_Time_start string // 2022-8-05 21:01
  474. Result_Time_defect int64 // 缺失时间间隔
  475. }
  476. List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
  477. r_jsons := make([]R_JSONS, len(List))
  478. var limitMaxNum = 10
  479. var chData = make(chan int, limitMaxNum)
  480. var jobGroup sync.WaitGroup
  481. var tasknum = len(List)
  482. for i := 0; i < tasknum; i++ {
  483. chData <- 1
  484. jobGroup.Add(1)
  485. go func(index int, wg *sync.WaitGroup, res *[]R_JSONS) {
  486. defer wg.Done()
  487. var r_json R_JSONS
  488. r_json.T_sn = List[index].T_sn
  489. r_json.T_id = List[index].T_id
  490. r_json.Result = 200
  491. DeviceSensor_data := Task.Read_TaskData_ById_List_(Task_r.T_task_id, List[index].T_sn)
  492. r_json.T_unm = len(DeviceSensor_data)
  493. if r_json.T_unm > 2 {
  494. r_json.T_id = DeviceSensor_data[0].T_id
  495. r_json.Time_end = DeviceSensor_data[len(DeviceSensor_data)-1].T_time
  496. r_json.Time_start = DeviceSensor_data[0].T_time
  497. formatTime_a, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[0].T_time)
  498. formatTime_b, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[1].T_time)
  499. formatTime_x := formatTime_b.Unix() - formatTime_a.Unix()
  500. r_json.T_time_interval = formatTime_x
  501. println("formatTime_x:", List[index].T_id, List[index].T_sn, formatTime_x)
  502. if formatTime_x > 60*30 || formatTime_x < 60 {
  503. r_json.Result = 202
  504. r_json.Result_str = "数据异常(数据的第一个时间与第二个时间相差 " + strconv.FormatInt(formatTime_x, 10) + "秒),必须大于60秒,小于30分钟"
  505. *res = append(*res, r_json)
  506. <-chData
  507. return
  508. }
  509. for data_i := 2; data_i < len(DeviceSensor_data); data_i++ {
  510. formatTime_a = formatTime_b
  511. formatTime_b, _ = time.Parse("2006-1-2 15:04", DeviceSensor_data[data_i].T_time)
  512. formatTime_ := formatTime_b.Unix() - formatTime_a.Unix()
  513. if formatTime_ < formatTime_x {
  514. println("formatTime_x-:", formatTime_)
  515. r_json.Result = 202
  516. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,间隔小于时间间隔,不能自动补充"
  517. break
  518. }
  519. if formatTime_x != formatTime_ {
  520. if formatTime_ > 60*30 {
  521. println("formatTime_x-:", formatTime_)
  522. r_json.Result = 202
  523. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,相差时间大于30分钟,不能自动补充"
  524. break
  525. }
  526. r_json.Result = 202
  527. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒"
  528. r_json.Result_Time_start = DeviceSensor_data[data_i-1].T_time
  529. r_json.Result_Time_defect = formatTime_
  530. println(r_json.Result_str)
  531. break
  532. }
  533. }
  534. } else {
  535. r_json.Result = 202
  536. r_json.Result_str = "数据量太少 必须大于 2条以上!"
  537. }
  538. *res = append(*res, r_json)
  539. <-chData
  540. }(i, &jobGroup, &r_jsons)
  541. }
  542. //使用Wait等待所有任务执行完毕
  543. jobGroup.Wait()
  544. jsonsMap := map[string]R_JSONS{}
  545. resp := make([]R_JSONS, 0)
  546. for _, json := range r_jsons {
  547. jsonsMap[json.T_id] = json
  548. }
  549. for _, v := range List {
  550. resp = append(resp, jsonsMap[v.T_id])
  551. }
  552. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: resp}
  553. c.ServeJSON()
  554. return
  555. }
  556. // 打包数据本地数据
  557. func (c *TaskDataController) TaskData_Import_TaskData() {
  558. // 获取登录用户的uuid
  559. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  560. T_task_id := c.GetString("T_task_id")
  561. _, err := NatsServer.Read_Task(T_task_id)
  562. if err != nil {
  563. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  564. c.ServeJSON()
  565. return
  566. }
  567. if err = lib.Create_Dir(conf.Sql_Temp_Dir); err != nil {
  568. logs.Println("创建sql临时文件失败")
  569. }
  570. sql_file := fmt.Sprintf("%sZ_TaskData_%s.sql", conf.Sql_Temp_Dir, T_task_id)
  571. org, err := Task.Dump_TaskData(T_task_id, conf.MysqlServer2_Username, conf.MysqlServer2_Password, conf.MysqlServer2_UrlPort, conf.MysqlServer2_Database, sql_file)
  572. if err != nil {
  573. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线上数据导出失败!"}
  574. c.ServeJSON()
  575. return
  576. }
  577. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-打包本地数据", "导出线上数据Z_TaskData_"+T_task_id, org)
  578. i := 0
  579. flag := false
  580. Task.CREATE_TaskData(conf.Local_AliasName, T_task_id)
  581. for i < 10 {
  582. Task.Truncate_TaskData(conf.Local_AliasName, T_task_id)
  583. org, err = Task.Insert_TaskData(conf.MysqlServer_Username, conf.MysqlServer_Password, conf.MysqlServer_UrlPort, conf.MysqlServer_Database, sql_file)
  584. if err != nil {
  585. logs.Println("任务数据-打包本地数据", "线下导入数据Z_TaskData_"+T_task_id, err.Error())
  586. } else {
  587. if Task.Check_TaskData_Num(T_task_id) {
  588. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-打包本地数据", "线下导入数据Z_TaskData_"+T_task_id, org)
  589. flag = true
  590. break
  591. }
  592. }
  593. i++
  594. }
  595. // 重试10次后仍然没有成功导入数据
  596. if !flag {
  597. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线下导入数据失败!"}
  598. c.ServeJSON()
  599. return
  600. }
  601. //删除导出的sql文件
  602. _ = os.Remove(sql_file)
  603. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  604. c.ServeJSON()
  605. }
  606. // 更新线上数据
  607. func (c *TaskDataController) TaskData_Up_TaskData() {
  608. // 获取登录用户的uuid
  609. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  610. T_task_id := c.GetString("T_task_id")
  611. Task_r, err := NatsServer.Read_Task(T_task_id)
  612. if err != nil {
  613. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  614. c.ServeJSON()
  615. return
  616. }
  617. if err = lib.Create_Dir(conf.Sql_Temp_Dir); err != nil {
  618. logs.Println("创建sql临时文件失败")
  619. }
  620. sql_file := fmt.Sprintf("%sZ_TaskData_%s.sql", conf.Sql_Temp_Dir, T_task_id)
  621. org, err := Task.Dump_TaskData(T_task_id, conf.MysqlServer_Username, conf.MysqlServer_Password, conf.MysqlServer_UrlPort, conf.MysqlServer_Database, sql_file)
  622. if err != nil {
  623. logs.Println(T_uuid, "任务数据-更新线上数据", "导出线下数据Z_TaskData_"+T_task_id, err.Error())
  624. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线下数据导出失败!"}
  625. c.ServeJSON()
  626. return
  627. }
  628. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, org)
  629. i := 0
  630. flag := false
  631. for i < 10 {
  632. Task.Truncate_TaskData(conf.Server_AliasName, T_task_id)
  633. org, err = Task.Insert_TaskData(conf.MysqlServer2_Username, conf.MysqlServer2_Password, conf.MysqlServer2_UrlPort, conf.MysqlServer2_Database, sql_file)
  634. if err != nil {
  635. logs.Println(T_uuid, "任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, err.Error())
  636. } else {
  637. if Task.Check_TaskData_Num(T_task_id) {
  638. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, org)
  639. flag = true
  640. break
  641. }
  642. }
  643. i++
  644. }
  645. // 重试10次后仍然没有成功导入数据
  646. if !flag {
  647. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线上导入数据失败!"}
  648. c.ServeJSON()
  649. return
  650. }
  651. //删除导出的sql文件
  652. _ = os.Remove(sql_file)
  653. // 线上数据更新后 将当前任务 交付审核 标志 为 1
  654. Task_r.T_delivery_state = 1
  655. err = NatsServer.Update_Task(Task_r)
  656. if err != nil {
  657. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  658. c.ServeJSON()
  659. return
  660. }
  661. // 向线上用户日志表写入数据
  662. System.Add_UserLogs_T(T_uuid, "本地版-任务", "修改", Task_r)
  663. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  664. c.ServeJSON()
  665. }
  666. // 更新线上数据后台执行
  667. func (c *TaskDataController) TaskData_Up_TaskData_Back() {
  668. // 获取登录用户的uuid
  669. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  670. T_task_id := c.GetString("T_task_id")
  671. Task_r, err := NatsServer.Read_Task(T_task_id)
  672. if err != nil {
  673. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  674. c.ServeJSON()
  675. return
  676. }
  677. if Task_r.T_delivery_state == 2 {
  678. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  679. c.ServeJSON()
  680. return
  681. }
  682. // 采集中
  683. Task_r.T_delivery_state = 2
  684. err = NatsServer.Update_Task(Task_r)
  685. if err != nil {
  686. c.Data["json"] = lib.JSONS{Code: 202, Msg: "提交失败!"}
  687. c.ServeJSON()
  688. return
  689. }
  690. data := Nats.Up_TaskData_Back{
  691. T_uuid: T_uuid,
  692. Task: Task_r,
  693. }
  694. b, _ := msgpack.Marshal(&data)
  695. _ = lib.Nats.Publish("ColdVerify_Local_Up_TaskData", b)
  696. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  697. c.ServeJSON()
  698. return
  699. }
  700. // CopyFromPosition 数据拷贝
  701. func (c *TaskDataController) CopyFromPosition() {
  702. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  703. //if !b_ {
  704. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  705. // c.ServeJSON()
  706. // return
  707. //}
  708. StartTime := c.GetString("StartTime")
  709. startTime, ok := lib.TimeStrToTime(StartTime)
  710. if !ok {
  711. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  712. c.ServeJSON()
  713. return
  714. }
  715. EndTime := c.GetString("EndTime")
  716. endTime, ok := lib.TimeStrToTime(EndTime)
  717. if !ok {
  718. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  719. c.ServeJSON()
  720. return
  721. }
  722. CopyTime := c.GetString("CopyTime")
  723. copyTime, ok := lib.TimeStrToTime(CopyTime)
  724. if !ok {
  725. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  726. c.ServeJSON()
  727. return
  728. }
  729. CopyEndTime := copyTime.Add(endTime.Sub(startTime)).Format("2006-01-02 15:04:05")
  730. // 时间间隔 分钟
  731. T_saveT, _ := c.GetInt("T_saveT")
  732. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  733. T_task_id := c.GetString("T_task_id")
  734. Task_r, err := NatsServer.Read_Task(T_task_id)
  735. if err != nil {
  736. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  737. c.ServeJSON()
  738. return
  739. }
  740. if Task_r.T_collection_state == 2 {
  741. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  742. c.ServeJSON()
  743. return
  744. }
  745. for _, v := range SN_List {
  746. sn_id := strings.Split(v, ",")
  747. if len(sn_id) != 2 {
  748. continue
  749. }
  750. sn, id_str := sn_id[0], sn_id[1]
  751. Task.DeleteTaskDataByTimeRange(Task_r.T_task_id, sn, id_str, CopyTime, CopyEndTime)
  752. List, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, 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. list, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, StartTime, EndTime, 0, 9999)
  812. for i := 0; i < len(list)-1; i++ {
  813. current := list[i].T_time
  814. next := list[i+1].T_time
  815. c, _ := time.Parse("2006-01-02 15:04:05", current)
  816. n, _ := time.Parse("2006-01-02 15:04:05", next)
  817. interval := n.Unix() - c.Unix()
  818. logs.Debug("时间间隔:", interval, "保存时间:", saveTime)
  819. fmt.Println("当前:", current, "下一个:", next)
  820. if int(interval) > saveTime {
  821. ttInterval := list[i+1].T_t - list[i].T_t
  822. ttt := list[i].T_t // 温度临时变量
  823. trhInterval := list[i+1].T_rh - list[i].T_rh
  824. trht := list[i].T_rh //湿度临时变量
  825. count := (int(interval) - saveTime) / saveTime
  826. if int(interval)%saveTime != 0 {
  827. count++
  828. }
  829. num += count
  830. for k := 0; k < count; k++ {
  831. t := c.Add(time.Second * time.Duration(saveTime)).Format("2006-01-02 15:04:05") //时间临时变量
  832. ttt += ttInterval / float32(count)
  833. trht += trhInterval / float32(count)
  834. Task.InsertTaskData(Task_r.T_task_id, Task.TaskData_{
  835. T_sn: list[i].T_sn,
  836. T_id: list[i].T_id,
  837. T_t: ttt,
  838. T_rh: trht,
  839. T_time: t,
  840. })
  841. c = c.Add(time.Second * time.Duration(saveTime))
  842. }
  843. }
  844. }
  845. }
  846. System.Add_UserLogs_T(T_uuid, "数据补漏", fmt.Sprintf("数据补漏(%s)[%s|%s],时间间隔:%d", T_task_id, StartTime, EndTime, saveTime), SN_List)
  847. c.Data["json"] = lib.JSONS{200, fmt.Sprintf("补漏完成!共补漏%d条数据", num), nil}
  848. c.ServeJSON()
  849. return
  850. }
  851. // DataSensorDataTrend 数据趋势
  852. func (c *TaskDataController) DataSensorDataTrend() {
  853. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  854. //if !b_ {
  855. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  856. // c.ServeJSON()
  857. // return
  858. //}
  859. StartTime := c.GetString("StartTime")
  860. _, ok := lib.TimeStrToTime(StartTime)
  861. if !ok {
  862. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  863. c.ServeJSON()
  864. return
  865. }
  866. EndTime := c.GetString("EndTime")
  867. _, ok = lib.TimeStrToTime(EndTime)
  868. if !ok {
  869. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  870. c.ServeJSON()
  871. return
  872. }
  873. // 时间间隔 秒
  874. saveTime, _ := c.GetInt("T_saveT")
  875. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  876. T_task_id := c.GetString("T_task_id")
  877. Task_r, err := NatsServer.Read_Task(T_task_id)
  878. if err != nil {
  879. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  880. c.ServeJSON()
  881. return
  882. }
  883. if Task_r.T_collection_state == 2 {
  884. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  885. c.ServeJSON()
  886. return
  887. }
  888. for _, v := range SN_List {
  889. sn_id := strings.Split(v, ",")
  890. if len(sn_id) != 2 {
  891. continue
  892. }
  893. sn, id_str := sn_id[0], sn_id[1]
  894. list, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, StartTime, EndTime, 0, 9999)
  895. if len(list) == 0 {
  896. continue
  897. }
  898. Task.DeleteTaskDataByTimeRange(Task_r.T_task_id, sn, id_str, StartTime, EndTime)
  899. first := list[0]
  900. last := list[len(list)-1]
  901. current, _ := time.Parse("2006-01-02 15:04:05", first.T_time)
  902. next, _ := time.Parse("2006-01-02 15:04:05", last.T_time)
  903. interval := next.Sub(current).Seconds() / float64(saveTime)
  904. ttInterval := (last.T_t - first.T_t) / float32(interval)
  905. trhInterval := (last.T_rh - first.T_rh) / float32(interval)
  906. tt := first.T_t
  907. ttrh := first.T_rh
  908. for current.Unix() < next.Unix() {
  909. tt += ttInterval
  910. ttrh += trhInterval
  911. ttime := current.Format("2006-01-02 15:04:05")
  912. Task.InsertTaskData(Task_r.T_task_id, Task.TaskData_{
  913. //加保存时间
  914. T_sn: first.T_sn,
  915. T_id: id_str,
  916. T_t: tt,
  917. T_rh: ttrh,
  918. T_time: ttime,
  919. })
  920. current = current.Add(time.Second * time.Duration(saveTime))
  921. }
  922. }
  923. System.Add_UserLogs_T(T_uuid, "数据趋势", fmt.Sprintf("数据趋势(%s)[%s|%s],时间间隔:%d", T_task_id, StartTime, EndTime, saveTime), SN_List)
  924. c.Data["json"] = lib.JSONS{200, "设置趋势操作成功", nil}
  925. c.ServeJSON()
  926. return
  927. }
  928. // UpdateRand 数据随机
  929. func (c *TaskDataController) UpdateRand() {
  930. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  931. //if !b_ {
  932. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  933. // c.ServeJSON()
  934. // return
  935. //}
  936. StartTime := c.GetString("StartTime")
  937. _, ok := lib.TimeStrToTime(StartTime)
  938. if !ok {
  939. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  940. c.ServeJSON()
  941. return
  942. }
  943. EndTime := c.GetString("EndTime")
  944. _, ok = lib.TimeStrToTime(EndTime)
  945. if !ok {
  946. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  947. c.ServeJSON()
  948. return
  949. }
  950. TemperatureMin, _ := c.GetInt("TemperatureMin") // 温度
  951. TemperatureMax, _ := c.GetInt("TemperatureMax")
  952. HumidityMax, _ := c.GetInt("HumidityMax") // 湿度
  953. HumidityMin, _ := c.GetInt("HumidityMin")
  954. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  955. T_task_id := c.GetString("T_task_id")
  956. Task_r, err := NatsServer.Read_Task(T_task_id)
  957. if err != nil {
  958. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  959. c.ServeJSON()
  960. return
  961. }
  962. if Task_r.T_collection_state == 2 {
  963. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  964. c.ServeJSON()
  965. return
  966. }
  967. for _, v := range SN_List {
  968. sn_id := strings.Split(v, ",")
  969. if len(sn_id) != 2 {
  970. continue
  971. }
  972. sn, id := sn_id[0], sn_id[1]
  973. Task.UpdateTaskDataTemperatureAndHumidityRandom(Task_r.T_task_id, sn, id, StartTime, EndTime, TemperatureMax, TemperatureMin, HumidityMax, HumidityMin)
  974. }
  975. 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)
  976. //反馈成功
  977. c.Data["json"] = lib.JSONS{200, "调整随机偏移值成功!", nil}
  978. c.ServeJSON()
  979. return
  980. }
  981. // UpdateFix 更新固定值
  982. func (c *TaskDataController) UpdateFix() {
  983. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  984. //if !b_ {
  985. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  986. // c.ServeJSON()
  987. // return
  988. //}
  989. StartTime := c.GetString("StartTime")
  990. _, ok := lib.TimeStrToTime(StartTime)
  991. if !ok {
  992. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  993. c.ServeJSON()
  994. return
  995. }
  996. EndTime := c.GetString("EndTime")
  997. _, ok = lib.TimeStrToTime(EndTime)
  998. if !ok {
  999. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1000. c.ServeJSON()
  1001. return
  1002. }
  1003. FixTemperature := c.GetString("FixTemperature")
  1004. FixHumidity := c.GetString("FixHumidity")
  1005. //2.得到数据进行统一设置访问修改
  1006. humidity, _ := strconv.ParseFloat(FixHumidity, 64)
  1007. temperature, _ := strconv.ParseFloat(FixTemperature, 64)
  1008. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1009. T_task_id := c.GetString("T_task_id")
  1010. Task_r, err := NatsServer.Read_Task(T_task_id)
  1011. if err != nil {
  1012. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1013. c.ServeJSON()
  1014. return
  1015. }
  1016. if Task_r.T_collection_state == 2 {
  1017. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1018. c.ServeJSON()
  1019. return
  1020. }
  1021. //3.循环更新数据
  1022. for _, v := range SN_List {
  1023. sn_id := strings.Split(v, ",")
  1024. if len(sn_id) != 2 {
  1025. continue
  1026. }
  1027. sn, id := sn_id[0], sn_id[1]
  1028. Task.UpdateTaskDataTemperatureAndHumidity(Task_r.T_task_id, sn, id, StartTime, EndTime, temperature, humidity)
  1029. }
  1030. System.Add_UserLogs_T(T_uuid, "更新固定值", fmt.Sprintf("更新固定值(%s)[%s|%s],温度[%f],湿度[%f]", T_task_id, StartTime, EndTime, temperature, humidity), SN_List)
  1031. //4.反馈成功
  1032. c.Data["json"] = lib.JSONS{200, "调整固定偏移值成功!", nil}
  1033. c.ServeJSON()
  1034. }
  1035. // DataSensorDataSmooth 数据平滑
  1036. func (c *TaskDataController) DataSensorDataSmooth() {
  1037. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1038. //if !b_ {
  1039. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1040. // c.ServeJSON()
  1041. // return
  1042. //}
  1043. StartTime := c.GetString("StartTime")
  1044. _, ok := lib.TimeStrToTime(StartTime)
  1045. if !ok {
  1046. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1047. c.ServeJSON()
  1048. return
  1049. }
  1050. EndTime := c.GetString("EndTime")
  1051. _, ok = lib.TimeStrToTime(EndTime)
  1052. if !ok {
  1053. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1054. c.ServeJSON()
  1055. return
  1056. }
  1057. tRange, _ := c.GetFloat("tRange")
  1058. hRange, _ := c.GetFloat("hRange")
  1059. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1060. T_task_id := c.GetString("T_task_id")
  1061. Task_r, err := NatsServer.Read_Task(T_task_id)
  1062. if err != nil {
  1063. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1064. c.ServeJSON()
  1065. return
  1066. }
  1067. if Task_r.T_collection_state == 2 {
  1068. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1069. c.ServeJSON()
  1070. return
  1071. }
  1072. var count int
  1073. for _, v := range SN_List {
  1074. sn_id := strings.Split(v, ",")
  1075. if len(sn_id) != 2 {
  1076. continue
  1077. }
  1078. sn := sn_id[0]
  1079. id_str := sn_id[1]
  1080. list, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, StartTime, EndTime, 0, 9999)
  1081. for i := 1; i < len(list); i++ {
  1082. n := list[i-1]
  1083. old := list[i]
  1084. newO := list[i]
  1085. //变化差
  1086. var tInterval = old.T_t - n.T_t
  1087. var hInterval = old.T_rh - n.T_rh
  1088. fmt.Println("温度:", n.T_t, "温度next:", old.T_t, "差值:", n.T_t-old.T_t)
  1089. if tRange != 0 {
  1090. if tInterval > float32(tRange) {
  1091. newO.T_t = n.T_t + float32(tRange)
  1092. } else if tInterval < -float32(tRange) {
  1093. newO.T_t = n.T_t - float32(tRange)
  1094. }
  1095. }
  1096. if hRange != 0 {
  1097. if hInterval > float32(hRange) {
  1098. newO.T_rh = n.T_rh + float32(hRange)
  1099. } else if hInterval < -float32(hRange) {
  1100. newO.T_rh = n.T_rh - float32(hRange)
  1101. }
  1102. }
  1103. if old.T_rh != newO.T_rh || old.T_t != newO.T_t {
  1104. fmt.Println("原始数据:", old, "新数据:", newO)
  1105. list[i] = newO
  1106. Task.UpdateTaskData(Task_r.T_task_id, sn, id_str, old, newO)
  1107. count++
  1108. }
  1109. }
  1110. }
  1111. System.Add_UserLogs_T(T_uuid, "数据平滑", fmt.Sprintf("数据平滑(%s)[%s|%s],温度[%f],湿度[%f]", T_task_id, StartTime, EndTime, tRange, hRange), SN_List)
  1112. c.Data["json"] = lib.JSONS{200, "操作成功处理" + fmt.Sprint(count) + "条数据", nil}
  1113. c.ServeJSON()
  1114. }
  1115. // CopyFromPosition 数据拷贝平均值
  1116. func (c *TaskDataController) CopyFromPositionAverageSN() {
  1117. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1118. //if !b_ {
  1119. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1120. // c.ServeJSON()
  1121. // return
  1122. //}
  1123. StartTime := c.GetString("StartTime")
  1124. startTime, ok := lib.TimeStrToTime(StartTime)
  1125. if !ok {
  1126. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1127. c.ServeJSON()
  1128. return
  1129. }
  1130. EndTime := c.GetString("EndTime")
  1131. endTime, ok := lib.TimeStrToTime(EndTime)
  1132. if !ok {
  1133. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1134. c.ServeJSON()
  1135. return
  1136. }
  1137. CopyTime := c.GetString("CopyTime")
  1138. CopySN := c.GetString("CopySN")
  1139. CopyID := c.GetString("CopyID")
  1140. copyTime, ok := lib.TimeStrToTime(CopyTime)
  1141. // 时间间隔 s
  1142. T_saveT, _ := c.GetInt("T_saveT")
  1143. if !ok {
  1144. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1145. c.ServeJSON()
  1146. return
  1147. }
  1148. CopyEndTime := copyTime.Add(endTime.Sub(startTime)).Format("2006-01-02 15:04:05")
  1149. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1150. if len(SN_List) != 2 {
  1151. c.Data["json"] = lib.JSONS{Code: 202, Msg: "SN_List Err!"}
  1152. c.ServeJSON()
  1153. return
  1154. }
  1155. T_task_id := c.GetString("T_task_id")
  1156. Task_r, err := NatsServer.Read_Task(T_task_id)
  1157. if err != nil {
  1158. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1159. c.ServeJSON()
  1160. return
  1161. }
  1162. if Task_r.T_collection_state == 2 {
  1163. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1164. c.ServeJSON()
  1165. return
  1166. }
  1167. sn_id1 := strings.Split(SN_List[0], ",")
  1168. if len(sn_id1) != 2 {
  1169. c.Data["json"] = lib.JSONS{Code: 202, Msg: "SN_List Err!"}
  1170. c.ServeJSON()
  1171. return
  1172. }
  1173. sn1, id_str1 := sn_id1[0], sn_id1[1]
  1174. sn_id2 := strings.Split(SN_List[1], ",")
  1175. if len(sn_id2) != 2 {
  1176. c.Data["json"] = lib.JSONS{Code: 202, Msg: "SN_List Err!"}
  1177. c.ServeJSON()
  1178. return
  1179. }
  1180. sn2, id_str2 := sn_id2[0], sn_id2[1]
  1181. List1, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn1, id_str1, StartTime, EndTime, 0, 9999)
  1182. List2, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn2, id_str2, StartTime, EndTime, 0, 9999)
  1183. num := len(List1)
  1184. if len(List2) < len(List1) {
  1185. num = len(List2)
  1186. }
  1187. var list []Task.TaskData_
  1188. ct := copyTime
  1189. for i := 0; i < num; i++ {
  1190. if List1[i].T_time != List2[i].T_time {
  1191. c.Data["json"] = lib.JSONS{202, fmt.Sprintf("%s【%s】、%s【%s】时间不一致", List1[i].T_id, List1[i].T_time, List2[i].T_id, List2[i].T_time), nil}
  1192. c.ServeJSON()
  1193. return
  1194. //ct = ct.Add(time.Second * time.Duration(T_saveT))
  1195. //continue
  1196. }
  1197. T_t := (List1[i].T_t + List2[i].T_t) / 2
  1198. T_rh := (List1[i].T_rh + List2[i].T_rh) / 2
  1199. list = append(list, Task.TaskData_{
  1200. T_sn: CopySN,
  1201. T_id: CopyID,
  1202. T_t: T_t,
  1203. T_rh: T_rh,
  1204. T_time: ct.Format("2006-01-02 15:04:05"),
  1205. })
  1206. ct = ct.Add(time.Second * time.Duration(T_saveT))
  1207. }
  1208. Task.DeleteTaskDataByTimeRange(Task_r.T_task_id, CopySN, CopyID, CopyTime, CopyEndTime)
  1209. go func(TaskDataList []Task.TaskData_, task_id string) {
  1210. for _, taskData := range TaskDataList {
  1211. Task.InsertTaskData(task_id, taskData)
  1212. }
  1213. }(list, Task_r.T_task_id)
  1214. System.Add_UserLogs_T(T_uuid, "数据复制平均值", fmt.Sprintf("数据复制(%s)[%s|%s],复制时间:%s,,时间间隔:%d", T_task_id, StartTime, EndTime, CopyTime, T_saveT), SN_List)
  1215. c.Data["json"] = lib.JSONS{200, "数据复制已提交后台处理!", nil}
  1216. c.ServeJSON()
  1217. return
  1218. }
  1219. // CopyFromPosition 数据拷贝
  1220. func (c *TaskDataController) CopyFromPositionSN() {
  1221. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1222. //if !b_ {
  1223. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1224. // c.ServeJSON()
  1225. // return
  1226. //}
  1227. StartTime := c.GetString("StartTime")
  1228. startTime, ok := lib.TimeStrToTime(StartTime)
  1229. if !ok {
  1230. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1231. c.ServeJSON()
  1232. return
  1233. }
  1234. EndTime := c.GetString("EndTime")
  1235. endTime, ok := lib.TimeStrToTime(EndTime)
  1236. if !ok {
  1237. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1238. c.ServeJSON()
  1239. return
  1240. }
  1241. CopyTime := c.GetString("CopyTime")
  1242. copyTime, ok := lib.TimeStrToTime(CopyTime)
  1243. CopySN := c.GetString("CopySN")
  1244. CopyID := c.GetString("CopyID")
  1245. if !ok {
  1246. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1247. c.ServeJSON()
  1248. return
  1249. }
  1250. CopyEndTime := copyTime.Add(endTime.Sub(startTime)).Format("2006-01-02 15:04:05")
  1251. // 时间间隔 分钟
  1252. T_saveT, _ := c.GetInt("T_saveT")
  1253. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1254. if len(SN_List) != 1 {
  1255. c.Data["json"] = lib.JSONS{202, "SN_List Err!", nil}
  1256. c.ServeJSON()
  1257. return
  1258. }
  1259. T_task_id := c.GetString("T_task_id")
  1260. Task_r, err := NatsServer.Read_Task(T_task_id)
  1261. if err != nil {
  1262. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1263. c.ServeJSON()
  1264. return
  1265. }
  1266. if Task_r.T_collection_state == 2 {
  1267. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1268. c.ServeJSON()
  1269. return
  1270. }
  1271. sn_id := strings.Split(SN_List[0], ",")
  1272. if len(sn_id) != 2 {
  1273. c.Data["json"] = lib.JSONS{202, "SN_List Err!", nil}
  1274. c.ServeJSON()
  1275. return
  1276. }
  1277. sn, id_str := sn_id[0], sn_id[1]
  1278. Task.DeleteTaskDataByTimeRange(Task_r.T_task_id, CopySN, CopyID, CopyTime, CopyEndTime)
  1279. List, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, StartTime, EndTime, 0, 9999)
  1280. ct := copyTime
  1281. go func(TaskDataList []Task.TaskData_, task_id string, T_saveT int) {
  1282. for _, taskData := range TaskDataList {
  1283. taskData.T_time = ct.Format("2006-01-02 15:04:05")
  1284. taskData.T_sn = CopySN
  1285. taskData.T_id = CopyID
  1286. Task.InsertTaskData(task_id, taskData)
  1287. ct = ct.Add(time.Second * time.Duration(T_saveT))
  1288. }
  1289. }(List, Task_r.T_task_id, T_saveT)
  1290. System.Add_UserLogs_T(T_uuid, "数据复制", fmt.Sprintf("数据复制(%s)[%s|%s],复制时间:%s,,时间间隔:%d", T_task_id, StartTime, EndTime, CopyTime, T_saveT), SN_List)
  1291. c.Data["json"] = lib.JSONS{200, "数据复制已提交后台处理!", nil}
  1292. c.ServeJSON()
  1293. return
  1294. }
  1295. // 数据偏移到区间内
  1296. func (c *TaskDataController) DataSkewingInterval() {
  1297. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1298. //if !b_ {
  1299. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1300. // c.ServeJSON()
  1301. // return
  1302. //}
  1303. StartTime := c.GetString("StartTime")
  1304. _, ok := lib.TimeStrToTime(StartTime)
  1305. if !ok {
  1306. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1307. c.ServeJSON()
  1308. return
  1309. }
  1310. EndTime := c.GetString("EndTime")
  1311. _, ok = lib.TimeStrToTime(EndTime)
  1312. if !ok {
  1313. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1314. c.ServeJSON()
  1315. return
  1316. }
  1317. TemperatureMin, _ := c.GetFloat("TemperatureMin") // 温度
  1318. TemperatureMax, _ := c.GetFloat("TemperatureMax")
  1319. Tmin, Tmax := TemperatureMin, TemperatureMax
  1320. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1321. T_task_id := c.GetString("T_task_id")
  1322. Task_r, err := NatsServer.Read_Task(T_task_id)
  1323. if err != nil {
  1324. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1325. c.ServeJSON()
  1326. return
  1327. }
  1328. if Task_r.T_collection_state == 2 {
  1329. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1330. c.ServeJSON()
  1331. return
  1332. }
  1333. errMsg := []string{}
  1334. for _, v := range SN_List {
  1335. sn_id := strings.Split(v, ",")
  1336. if len(sn_id) != 2 {
  1337. continue
  1338. }
  1339. sn, id := sn_id[0], sn_id[1]
  1340. min, max := Task.Read_TaskData_T_Min_Max(Task_r.T_task_id, sn, id, StartTime, EndTime)
  1341. if min < Tmin && max > Tmax {
  1342. errMsg = append(errMsg, fmt.Sprintf("【%s】最低温度[%.2f]低于给定的最低温度[%.2f],并且最高温度[%.2f]高于给定的最高温度[%.2f],无法偏移!", id, min, Tmin, max, Tmax))
  1343. continue
  1344. }
  1345. if min > Tmin && max < Tmax {
  1346. continue
  1347. //errMsg = append(errMsg, fmt.Sprintf("【%s】最低温度[%.2f]高于给定最低温度[%.2f],并且最高温度[%.2f]低于给定最高温度[%.2f],无须偏移!", id, min, Tmin, max, Tmax))
  1348. }
  1349. // 判断是否能向上偏移
  1350. if min < Tmin && max < Tmax && (Tmin-min+max) > Tmax {
  1351. errMsg = append(errMsg, fmt.Sprintf("【%s】偏移后最高温度[%.2f]将高于给定的最高温度[%.2f],无法偏移!", id, Tmin-min+max, Tmax))
  1352. continue
  1353. }
  1354. if max > Tmax && min > Tmin && (min-(max-Tmax)) < Tmin {
  1355. errMsg = append(errMsg, fmt.Sprintf("【%s】偏移后最低温度[%.2f]将低于给定的最低温度[%.2f],无法偏移!", id, min-(max-Tmax), Tmin))
  1356. continue
  1357. }
  1358. // 向上偏移
  1359. if min < Tmin && max < Tmax && (Tmin-min+max) <= Tmax {
  1360. Task.UpdateTaskDataTemperatureAndHumidity(Task_r.T_task_id, sn, id, StartTime, EndTime, Tmin-min, 0)
  1361. continue
  1362. }
  1363. // 向下偏移
  1364. if max > Tmax && min > Tmin && (min-(max-Tmax)) >= Tmin {
  1365. Task.UpdateTaskDataTemperatureAndHumidity(Task_r.T_task_id, sn, id, StartTime, EndTime, -(max - Tmax), 0)
  1366. continue
  1367. }
  1368. }
  1369. System.Add_UserLogs_T(T_uuid, "数据偏移到给定范围", fmt.Sprintf("数据偏移到给定范围(%s)[%s|%s],温度[%f-%f]", T_task_id, StartTime, EndTime, TemperatureMin, TemperatureMax), SN_List)
  1370. if len(errMsg) > 0 {
  1371. c.Data["json"] = lib.JSONS{202, "", errMsg}
  1372. c.ServeJSON()
  1373. return
  1374. }
  1375. //反馈成功
  1376. c.Data["json"] = lib.JSONS{200, "调整区间偏移值成功!", nil}
  1377. c.ServeJSON()
  1378. return
  1379. }
  1380. // 等比缩放
  1381. func (c *TaskDataController) DataGeometricScale() {
  1382. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1383. //if !b_ {
  1384. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1385. // c.ServeJSON()
  1386. // return
  1387. //}
  1388. StartTime := c.GetString("StartTime")
  1389. _, ok := lib.TimeStrToTime(StartTime)
  1390. if !ok {
  1391. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1392. c.ServeJSON()
  1393. return
  1394. }
  1395. EndTime := c.GetString("EndTime")
  1396. _, ok = lib.TimeStrToTime(EndTime)
  1397. if !ok {
  1398. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1399. c.ServeJSON()
  1400. return
  1401. }
  1402. Temperature, _ := c.GetFloat("Temperature") // 温度比列
  1403. Humidity, _ := c.GetFloat("Humidity") // 适度比列
  1404. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1405. T_task_id := c.GetString("T_task_id")
  1406. Task_r, err := NatsServer.Read_Task(T_task_id)
  1407. if err != nil {
  1408. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1409. c.ServeJSON()
  1410. return
  1411. }
  1412. if Task_r.T_collection_state == 2 {
  1413. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1414. c.ServeJSON()
  1415. return
  1416. }
  1417. errMsg := []string{}
  1418. for _, v := range SN_List {
  1419. sn_id := strings.Split(v, ",")
  1420. if len(sn_id) != 2 {
  1421. continue
  1422. }
  1423. sn, id := sn_id[0], sn_id[1]
  1424. Task.UpdateTaskDataTemperatureAndHumidityByGeometric(Task_r.T_task_id, sn, id, StartTime, EndTime, Temperature, Humidity)
  1425. }
  1426. System.Add_UserLogs_T(T_uuid, "数据等比缩放", fmt.Sprintf("数据等比缩放(%s)[%s|%s],温度[%f-%f]", T_task_id, StartTime, EndTime, Temperature, Humidity), SN_List)
  1427. if len(errMsg) > 0 {
  1428. c.Data["json"] = lib.JSONS{202, "", errMsg}
  1429. c.ServeJSON()
  1430. return
  1431. }
  1432. //反馈成功
  1433. c.Data["json"] = lib.JSONS{200, "数据等比缩放成功!", nil}
  1434. c.ServeJSON()
  1435. return
  1436. }
  1437. // 存档列表
  1438. func (c *TaskDataController) TaskDataCopy_List() {
  1439. var r_jsons lib.R_JSONS
  1440. page, _ := c.GetInt("page")
  1441. if page < 1 {
  1442. page = 1
  1443. }
  1444. page_z, _ := c.GetInt("page_z")
  1445. if page_z < 1 {
  1446. page_z = conf.Page_size
  1447. }
  1448. T_task_id := c.GetString("T_task_id")
  1449. Task_r, err := NatsServer.Read_Task(T_task_id)
  1450. if err != nil {
  1451. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1452. c.ServeJSON()
  1453. return
  1454. }
  1455. if Task_r.T_collection_state == 2 {
  1456. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1457. c.ServeJSON()
  1458. return
  1459. }
  1460. var cnt int64
  1461. List, cnt := Task.Read_TaskCopy_List(Task_r.T_task_id, page, page_z)
  1462. page_size := math.Ceil(float64(cnt) / float64(page_z))
  1463. r_jsons.List = List
  1464. r_jsons.Page = page
  1465. r_jsons.Page_size = int(page_size)
  1466. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  1467. r_jsons.Num = int(cnt)
  1468. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  1469. c.ServeJSON()
  1470. return
  1471. }
  1472. // 添加存档
  1473. func (c *TaskDataController) TaskDataCopy_Add() {
  1474. T_task_id := c.GetString("T_task_id")
  1475. Task_r, err := NatsServer.Read_Task(T_task_id)
  1476. if err != nil {
  1477. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1478. c.ServeJSON()
  1479. return
  1480. }
  1481. if Task_r.T_collection_state == 2 {
  1482. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1483. c.ServeJSON()
  1484. return
  1485. }
  1486. var_ := Task.TaskCopy{
  1487. T_task_id: T_task_id,
  1488. T_time: time.Now().Format("2006-01-02 15:04:05"),
  1489. T_State: 1,
  1490. }
  1491. T_copy_id, is := Task.Add_TaskCopy(var_)
  1492. if !is {
  1493. c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
  1494. c.ServeJSON()
  1495. return
  1496. }
  1497. // 创建数据表
  1498. Task.CREATE_TaskDataCopy(conf.Local_AliasName, T_copy_id)
  1499. // 将数据表存档
  1500. Task.TaskData_Arhiving(T_task_id, T_copy_id)
  1501. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: T_copy_id}
  1502. c.ServeJSON()
  1503. return
  1504. }
  1505. // 删除存档
  1506. func (c *TaskDataController) TaskDataCopy_Del() {
  1507. T_copy_id := c.GetString("T_copy_id")
  1508. r, err := Task.Read_TaskCopy(T_copy_id)
  1509. if err != nil {
  1510. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_copy_id 错误!"}
  1511. c.ServeJSON()
  1512. return
  1513. }
  1514. is := Task.Delete_TaskCopy(r)
  1515. if !is {
  1516. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  1517. c.ServeJSON()
  1518. return
  1519. }
  1520. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: T_copy_id}
  1521. c.ServeJSON()
  1522. return
  1523. }
  1524. // 存档恢复
  1525. func (c *TaskDataController) TaskDataCopy_Recover() {
  1526. T_task_id := c.GetString("T_task_id")
  1527. T_copy_id := c.GetString("T_copy_id")
  1528. Task_r, err := NatsServer.Read_Task(T_task_id)
  1529. if err != nil {
  1530. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1531. c.ServeJSON()
  1532. return
  1533. }
  1534. if Task_r.T_collection_state == 2 {
  1535. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1536. c.ServeJSON()
  1537. return
  1538. }
  1539. _, err = Task.Read_TaskCopy(T_copy_id)
  1540. if err != nil {
  1541. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_copy_id 错误!"}
  1542. c.ServeJSON()
  1543. return
  1544. }
  1545. is := Task.TaskData_Recover(T_task_id, T_copy_id)
  1546. if !is {
  1547. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  1548. c.ServeJSON()
  1549. return
  1550. }
  1551. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: T_copy_id}
  1552. c.ServeJSON()
  1553. return
  1554. }