TaskData.go 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446
  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. Task.DeleteTaskDataByTimeRange(Task_r.T_task_id, sn, id_str, CopyTime, CopyEndTime)
  751. List, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, StartTime, EndTime, 0, 9999)
  752. ct := copyTime
  753. go func(TaskDataList []Task.TaskData_, task_id string, T_saveT int) {
  754. for _, taskData := range TaskDataList {
  755. taskData.T_time = ct.Format("2006-01-02 15:04:05")
  756. Task.InsertTaskData(task_id, taskData)
  757. ct = ct.Add(time.Second * time.Duration(T_saveT))
  758. }
  759. }(List, Task_r.T_task_id, T_saveT)
  760. }
  761. System.Add_UserLogs_T(T_uuid, "数据复制", fmt.Sprintf("数据复制(%s)[%s|%s],复制时间:%s,,时间间隔:%d", T_task_id, StartTime, EndTime, CopyTime, T_saveT), SN_List)
  762. c.Data["json"] = lib.JSONS{200, "数据复制已提交后台处理!", nil}
  763. c.ServeJSON()
  764. return
  765. }
  766. // RepairSensorData 数据补漏
  767. func (c *TaskDataController) RepairSensorData() {
  768. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  769. //if !b_ {
  770. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  771. // c.ServeJSON()
  772. // return
  773. //}
  774. StartTime := c.GetString("StartTime")
  775. _, ok := lib.TimeStrToTime(StartTime)
  776. if !ok {
  777. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  778. c.ServeJSON()
  779. return
  780. }
  781. EndTime := c.GetString("EndTime")
  782. _, ok = lib.TimeStrToTime(EndTime)
  783. if !ok {
  784. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  785. c.ServeJSON()
  786. return
  787. }
  788. // 时间间隔 秒
  789. saveTime, _ := c.GetInt("T_saveT")
  790. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  791. T_task_id := c.GetString("T_task_id")
  792. Task_r, err := NatsServer.Read_Task(T_task_id)
  793. if err != nil {
  794. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  795. c.ServeJSON()
  796. return
  797. }
  798. if Task_r.T_collection_state == 2 {
  799. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  800. c.ServeJSON()
  801. return
  802. }
  803. num := 0
  804. for _, v := range SN_List {
  805. sn_id := strings.Split(v, ",")
  806. if len(sn_id) != 2 {
  807. continue
  808. }
  809. sn, id_str := sn_id[0], sn_id[1]
  810. list, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, StartTime, EndTime, 0, 9999)
  811. for i := 0; i < len(list)-1; i++ {
  812. current := list[i].T_time
  813. next := list[i+1].T_time
  814. c, _ := time.Parse("2006-01-02 15:04:05", current)
  815. n, _ := time.Parse("2006-01-02 15:04:05", next)
  816. interval := n.Unix() - c.Unix()
  817. logs.Debug("时间间隔:", interval, "保存时间:", saveTime)
  818. fmt.Println("当前:", current, "下一个:", next)
  819. if int(interval) > saveTime {
  820. ttInterval := list[i+1].T_t - list[i].T_t
  821. ttt := list[i].T_t // 温度临时变量
  822. trhInterval := list[i+1].T_rh - list[i].T_rh
  823. trht := list[i].T_rh //湿度临时变量
  824. count := (int(interval) - saveTime) / saveTime
  825. if int(interval)%saveTime != 0 {
  826. count++
  827. }
  828. num += count
  829. for k := 0; k < count; k++ {
  830. t := c.Add(time.Second * time.Duration(saveTime)).Format("2006-01-02 15:04:05") //时间临时变量
  831. ttt += ttInterval / float32(count)
  832. trht += trhInterval / float32(count)
  833. Task.InsertTaskData(Task_r.T_task_id, Task.TaskData_{
  834. T_sn: list[i].T_sn,
  835. T_id: list[i].T_id,
  836. T_t: ttt,
  837. T_rh: trht,
  838. T_time: t,
  839. })
  840. c = c.Add(time.Second * time.Duration(saveTime))
  841. }
  842. }
  843. }
  844. }
  845. System.Add_UserLogs_T(T_uuid, "数据补漏", fmt.Sprintf("数据补漏(%s)[%s|%s],时间间隔:%d", T_task_id, StartTime, EndTime, saveTime), SN_List)
  846. c.Data["json"] = lib.JSONS{200, fmt.Sprintf("补漏完成!共补漏%d条数据", num), nil}
  847. c.ServeJSON()
  848. return
  849. }
  850. // DataSensorDataTrend 数据趋势
  851. func (c *TaskDataController) DataSensorDataTrend() {
  852. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  853. //if !b_ {
  854. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  855. // c.ServeJSON()
  856. // return
  857. //}
  858. StartTime := c.GetString("StartTime")
  859. _, ok := lib.TimeStrToTime(StartTime)
  860. if !ok {
  861. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  862. c.ServeJSON()
  863. return
  864. }
  865. EndTime := c.GetString("EndTime")
  866. _, ok = lib.TimeStrToTime(EndTime)
  867. if !ok {
  868. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  869. c.ServeJSON()
  870. return
  871. }
  872. // 时间间隔 秒
  873. saveTime, _ := c.GetInt("T_saveT")
  874. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  875. T_task_id := c.GetString("T_task_id")
  876. Task_r, err := NatsServer.Read_Task(T_task_id)
  877. if err != nil {
  878. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  879. c.ServeJSON()
  880. return
  881. }
  882. if Task_r.T_collection_state == 2 {
  883. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  884. c.ServeJSON()
  885. return
  886. }
  887. for _, v := range SN_List {
  888. sn_id := strings.Split(v, ",")
  889. if len(sn_id) != 2 {
  890. continue
  891. }
  892. sn, id_str := sn_id[0], sn_id[1]
  893. list, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, StartTime, EndTime, 0, 9999)
  894. if len(list) == 0 {
  895. continue
  896. }
  897. Task.DeleteTaskDataByTimeRange(Task_r.T_task_id, sn, id_str, StartTime, EndTime)
  898. first := list[0]
  899. last := list[len(list)-1]
  900. current, _ := time.Parse("2006-01-02 15:04:05", first.T_time)
  901. next, _ := time.Parse("2006-01-02 15:04:05", last.T_time)
  902. interval := next.Sub(current).Seconds() / float64(saveTime)
  903. ttInterval := (last.T_t - first.T_t) / float32(interval)
  904. trhInterval := (last.T_rh - first.T_rh) / float32(interval)
  905. tt := first.T_t
  906. ttrh := first.T_rh
  907. for current.Unix() < next.Unix() {
  908. tt += ttInterval
  909. ttrh += trhInterval
  910. ttime := current.Format("2006-01-02 15:04:05")
  911. Task.InsertTaskData(Task_r.T_task_id, Task.TaskData_{
  912. //加保存时间
  913. T_sn: first.T_sn,
  914. T_id: id_str,
  915. T_t: tt,
  916. T_rh: ttrh,
  917. T_time: ttime,
  918. })
  919. current = current.Add(time.Second * time.Duration(saveTime))
  920. }
  921. }
  922. System.Add_UserLogs_T(T_uuid, "数据趋势", fmt.Sprintf("数据趋势(%s)[%s|%s],时间间隔:%d", T_task_id, StartTime, EndTime, saveTime), SN_List)
  923. c.Data["json"] = lib.JSONS{200, "设置趋势操作成功", nil}
  924. c.ServeJSON()
  925. return
  926. }
  927. // UpdateRand 数据随机
  928. func (c *TaskDataController) UpdateRand() {
  929. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  930. //if !b_ {
  931. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  932. // c.ServeJSON()
  933. // return
  934. //}
  935. StartTime := c.GetString("StartTime")
  936. _, ok := lib.TimeStrToTime(StartTime)
  937. if !ok {
  938. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  939. c.ServeJSON()
  940. return
  941. }
  942. EndTime := c.GetString("EndTime")
  943. _, ok = lib.TimeStrToTime(EndTime)
  944. if !ok {
  945. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  946. c.ServeJSON()
  947. return
  948. }
  949. TemperatureMin, _ := c.GetInt("TemperatureMin") // 温度
  950. TemperatureMax, _ := c.GetInt("TemperatureMax")
  951. HumidityMax, _ := c.GetInt("HumidityMax") // 湿度
  952. HumidityMin, _ := c.GetInt("HumidityMin")
  953. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  954. T_task_id := c.GetString("T_task_id")
  955. Task_r, err := NatsServer.Read_Task(T_task_id)
  956. if err != nil {
  957. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  958. c.ServeJSON()
  959. return
  960. }
  961. if Task_r.T_collection_state == 2 {
  962. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  963. c.ServeJSON()
  964. return
  965. }
  966. for _, v := range SN_List {
  967. sn_id := strings.Split(v, ",")
  968. if len(sn_id) != 2 {
  969. continue
  970. }
  971. sn, id := sn_id[0], sn_id[1]
  972. Task.UpdateTaskDataTemperatureAndHumidityRandom(Task_r.T_task_id, sn, id, StartTime, EndTime, TemperatureMax, TemperatureMin, HumidityMax, HumidityMin)
  973. }
  974. 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)
  975. //反馈成功
  976. c.Data["json"] = lib.JSONS{200, "调整随机偏移值成功!", nil}
  977. c.ServeJSON()
  978. return
  979. }
  980. // UpdateFix 更新固定值
  981. func (c *TaskDataController) UpdateFix() {
  982. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  983. //if !b_ {
  984. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  985. // c.ServeJSON()
  986. // return
  987. //}
  988. StartTime := c.GetString("StartTime")
  989. _, ok := lib.TimeStrToTime(StartTime)
  990. if !ok {
  991. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  992. c.ServeJSON()
  993. return
  994. }
  995. EndTime := c.GetString("EndTime")
  996. _, ok = lib.TimeStrToTime(EndTime)
  997. if !ok {
  998. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  999. c.ServeJSON()
  1000. return
  1001. }
  1002. FixTemperature := c.GetString("FixTemperature")
  1003. FixHumidity := c.GetString("FixHumidity")
  1004. //2.得到数据进行统一设置访问修改
  1005. humidity, _ := strconv.ParseFloat(FixHumidity, 64)
  1006. temperature, _ := strconv.ParseFloat(FixTemperature, 64)
  1007. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1008. T_task_id := c.GetString("T_task_id")
  1009. Task_r, err := NatsServer.Read_Task(T_task_id)
  1010. if err != nil {
  1011. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1012. c.ServeJSON()
  1013. return
  1014. }
  1015. if Task_r.T_collection_state == 2 {
  1016. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1017. c.ServeJSON()
  1018. return
  1019. }
  1020. //3.循环更新数据
  1021. for _, v := range SN_List {
  1022. sn_id := strings.Split(v, ",")
  1023. if len(sn_id) != 2 {
  1024. continue
  1025. }
  1026. sn, id := sn_id[0], sn_id[1]
  1027. Task.UpdateTaskDataTemperatureAndHumidity(Task_r.T_task_id, sn, id, StartTime, EndTime, temperature, humidity)
  1028. }
  1029. System.Add_UserLogs_T(T_uuid, "更新固定值", fmt.Sprintf("更新固定值(%s)[%s|%s],温度[%f],湿度[%f]", T_task_id, StartTime, EndTime, temperature, humidity), SN_List)
  1030. //4.反馈成功
  1031. c.Data["json"] = lib.JSONS{200, "调整固定偏移值成功!", nil}
  1032. c.ServeJSON()
  1033. }
  1034. // DataSensorDataSmooth 数据平滑
  1035. func (c *TaskDataController) DataSensorDataSmooth() {
  1036. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1037. //if !b_ {
  1038. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1039. // c.ServeJSON()
  1040. // return
  1041. //}
  1042. StartTime := c.GetString("StartTime")
  1043. _, ok := lib.TimeStrToTime(StartTime)
  1044. if !ok {
  1045. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1046. c.ServeJSON()
  1047. return
  1048. }
  1049. EndTime := c.GetString("EndTime")
  1050. _, ok = lib.TimeStrToTime(EndTime)
  1051. if !ok {
  1052. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1053. c.ServeJSON()
  1054. return
  1055. }
  1056. tRange, _ := c.GetFloat("tRange")
  1057. hRange, _ := c.GetFloat("hRange")
  1058. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1059. T_task_id := c.GetString("T_task_id")
  1060. Task_r, err := NatsServer.Read_Task(T_task_id)
  1061. if err != nil {
  1062. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1063. c.ServeJSON()
  1064. return
  1065. }
  1066. if Task_r.T_collection_state == 2 {
  1067. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1068. c.ServeJSON()
  1069. return
  1070. }
  1071. var count int
  1072. for _, v := range SN_List {
  1073. sn_id := strings.Split(v, ",")
  1074. if len(sn_id) != 2 {
  1075. continue
  1076. }
  1077. sn := sn_id[0]
  1078. id_str := sn_id[1]
  1079. list, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, StartTime, EndTime, 0, 9999)
  1080. for i := 1; i < len(list); i++ {
  1081. n := list[i-1]
  1082. old := list[i]
  1083. newO := list[i]
  1084. //变化差
  1085. var tInterval = old.T_t - n.T_t
  1086. var hInterval = old.T_rh - n.T_rh
  1087. fmt.Println("温度:", n.T_t, "温度next:", old.T_t, "差值:", n.T_t-old.T_t)
  1088. if tRange != 0 {
  1089. if tInterval > float32(tRange) {
  1090. newO.T_t = n.T_t + float32(tRange)
  1091. } else if tInterval < -float32(tRange) {
  1092. newO.T_t = n.T_t - float32(tRange)
  1093. }
  1094. }
  1095. if hRange != 0 {
  1096. if hInterval > float32(hRange) {
  1097. newO.T_rh = n.T_rh + float32(hRange)
  1098. } else if hInterval < -float32(hRange) {
  1099. newO.T_rh = n.T_rh - float32(hRange)
  1100. }
  1101. }
  1102. if old.T_rh != newO.T_rh || old.T_t != newO.T_t {
  1103. fmt.Println("原始数据:", old, "新数据:", newO)
  1104. list[i] = newO
  1105. Task.UpdateTaskData(Task_r.T_task_id, sn, id_str, old, newO)
  1106. count++
  1107. }
  1108. }
  1109. }
  1110. System.Add_UserLogs_T(T_uuid, "数据平滑", fmt.Sprintf("数据平滑(%s)[%s|%s],温度[%f],湿度[%f]", T_task_id, StartTime, EndTime, tRange, hRange), SN_List)
  1111. c.Data["json"] = lib.JSONS{200, "操作成功处理" + fmt.Sprint(count) + "条数据", nil}
  1112. c.ServeJSON()
  1113. }
  1114. // CopyFromPosition 数据拷贝平均值
  1115. func (c *TaskDataController) CopyFromPositionAverageSN() {
  1116. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1117. //if !b_ {
  1118. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1119. // c.ServeJSON()
  1120. // return
  1121. //}
  1122. StartTime := c.GetString("StartTime")
  1123. startTime, ok := lib.TimeStrToTime(StartTime)
  1124. if !ok {
  1125. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1126. c.ServeJSON()
  1127. return
  1128. }
  1129. EndTime := c.GetString("EndTime")
  1130. endTime, ok := lib.TimeStrToTime(EndTime)
  1131. if !ok {
  1132. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1133. c.ServeJSON()
  1134. return
  1135. }
  1136. CopyTime := c.GetString("CopyTime")
  1137. CopySN := c.GetString("CopySN")
  1138. CopyID := c.GetString("CopyID")
  1139. copyTime, ok := lib.TimeStrToTime(CopyTime)
  1140. // 时间间隔 s
  1141. T_saveT, _ := c.GetInt("T_saveT")
  1142. if !ok {
  1143. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1144. c.ServeJSON()
  1145. return
  1146. }
  1147. CopyEndTime := copyTime.Add(endTime.Sub(startTime)).Format("2006-01-02 15:04:05")
  1148. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1149. if len(SN_List) != 2 {
  1150. c.Data["json"] = lib.JSONS{Code: 202, Msg: "SN_List Err!"}
  1151. c.ServeJSON()
  1152. return
  1153. }
  1154. T_task_id := c.GetString("T_task_id")
  1155. Task_r, err := NatsServer.Read_Task(T_task_id)
  1156. if err != nil {
  1157. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1158. c.ServeJSON()
  1159. return
  1160. }
  1161. if Task_r.T_collection_state == 2 {
  1162. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1163. c.ServeJSON()
  1164. return
  1165. }
  1166. sn_id1 := strings.Split(SN_List[0], ",")
  1167. if len(sn_id1) != 2 {
  1168. c.Data["json"] = lib.JSONS{Code: 202, Msg: "SN_List Err!"}
  1169. c.ServeJSON()
  1170. return
  1171. }
  1172. sn1, id_str1 := sn_id1[0], sn_id1[1]
  1173. sn_id2 := strings.Split(SN_List[1], ",")
  1174. if len(sn_id2) != 2 {
  1175. c.Data["json"] = lib.JSONS{Code: 202, Msg: "SN_List Err!"}
  1176. c.ServeJSON()
  1177. return
  1178. }
  1179. sn2, id_str2 := sn_id2[0], sn_id2[1]
  1180. List1, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn1, id_str1, StartTime, EndTime, 0, 9999)
  1181. List2, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn2, id_str2, StartTime, EndTime, 0, 9999)
  1182. num := len(List1)
  1183. if len(List2) < len(List1) {
  1184. num = len(List2)
  1185. }
  1186. var list []Task.TaskData_
  1187. ct := copyTime
  1188. for i := 0; i < num; i++ {
  1189. if List1[i].T_time != List2[i].T_time {
  1190. 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}
  1191. c.ServeJSON()
  1192. return
  1193. //ct = ct.Add(time.Second * time.Duration(T_saveT))
  1194. //continue
  1195. }
  1196. T_t := (List1[i].T_t + List2[i].T_t) / 2
  1197. T_rh := (List1[i].T_rh + List2[i].T_rh) / 2
  1198. list = append(list, Task.TaskData_{
  1199. T_sn: CopySN,
  1200. T_id: CopyID,
  1201. T_t: T_t,
  1202. T_rh: T_rh,
  1203. T_time: ct.Format("2006-01-02 15:04:05"),
  1204. })
  1205. ct = ct.Add(time.Second * time.Duration(T_saveT))
  1206. }
  1207. Task.DeleteTaskDataByTimeRange(Task_r.T_task_id, CopySN, CopyID, CopyTime, CopyEndTime)
  1208. go func(TaskDataList []Task.TaskData_, task_id string) {
  1209. for _, taskData := range TaskDataList {
  1210. Task.InsertTaskData(task_id, taskData)
  1211. }
  1212. }(list, Task_r.T_task_id)
  1213. System.Add_UserLogs_T(T_uuid, "数据复制平均值", fmt.Sprintf("数据复制(%s)[%s|%s],复制时间:%s,,时间间隔:%d", T_task_id, StartTime, EndTime, CopyTime, T_saveT), SN_List)
  1214. c.Data["json"] = lib.JSONS{200, "数据复制已提交后台处理!", nil}
  1215. c.ServeJSON()
  1216. return
  1217. }
  1218. // CopyFromPosition 数据拷贝
  1219. func (c *TaskDataController) CopyFromPositionSN() {
  1220. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1221. //if !b_ {
  1222. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1223. // c.ServeJSON()
  1224. // return
  1225. //}
  1226. StartTime := c.GetString("StartTime")
  1227. startTime, ok := lib.TimeStrToTime(StartTime)
  1228. if !ok {
  1229. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1230. c.ServeJSON()
  1231. return
  1232. }
  1233. EndTime := c.GetString("EndTime")
  1234. endTime, ok := lib.TimeStrToTime(EndTime)
  1235. if !ok {
  1236. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1237. c.ServeJSON()
  1238. return
  1239. }
  1240. CopyTime := c.GetString("CopyTime")
  1241. copyTime, ok := lib.TimeStrToTime(CopyTime)
  1242. CopySN := c.GetString("CopySN")
  1243. CopyID := c.GetString("CopyID")
  1244. if !ok {
  1245. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1246. c.ServeJSON()
  1247. return
  1248. }
  1249. CopyEndTime := copyTime.Add(endTime.Sub(startTime)).Format("2006-01-02 15:04:05")
  1250. // 时间间隔 分钟
  1251. T_saveT, _ := c.GetInt("T_saveT")
  1252. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1253. if len(SN_List) != 1 {
  1254. c.Data["json"] = lib.JSONS{202, "SN_List Err!", nil}
  1255. c.ServeJSON()
  1256. return
  1257. }
  1258. T_task_id := c.GetString("T_task_id")
  1259. Task_r, err := NatsServer.Read_Task(T_task_id)
  1260. if err != nil {
  1261. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1262. c.ServeJSON()
  1263. return
  1264. }
  1265. if Task_r.T_collection_state == 2 {
  1266. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1267. c.ServeJSON()
  1268. return
  1269. }
  1270. sn_id := strings.Split(SN_List[0], ",")
  1271. if len(sn_id) != 2 {
  1272. c.Data["json"] = lib.JSONS{202, "SN_List Err!", nil}
  1273. c.ServeJSON()
  1274. return
  1275. }
  1276. sn, id_str := sn_id[0], sn_id[1]
  1277. Task.DeleteTaskDataByTimeRange(Task_r.T_task_id, CopySN, CopyID, CopyTime, CopyEndTime)
  1278. List, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, StartTime, EndTime, 0, 9999)
  1279. ct := copyTime
  1280. go func(TaskDataList []Task.TaskData_, task_id string, T_saveT int) {
  1281. for _, taskData := range TaskDataList {
  1282. taskData.T_time = ct.Format("2006-01-02 15:04:05")
  1283. taskData.T_sn = CopySN
  1284. taskData.T_id = CopyID
  1285. Task.InsertTaskData(task_id, taskData)
  1286. ct = ct.Add(time.Second * time.Duration(T_saveT))
  1287. }
  1288. }(List, Task_r.T_task_id, T_saveT)
  1289. System.Add_UserLogs_T(T_uuid, "数据复制", fmt.Sprintf("数据复制(%s)[%s|%s],复制时间:%s,,时间间隔:%d", T_task_id, StartTime, EndTime, CopyTime, T_saveT), SN_List)
  1290. c.Data["json"] = lib.JSONS{200, "数据复制已提交后台处理!", nil}
  1291. c.ServeJSON()
  1292. return
  1293. }