TaskData.go 64 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197
  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/Certificate"
  9. "ColdVerify_local/models/System"
  10. "ColdVerify_local/models/Task"
  11. "errors"
  12. "fmt"
  13. "github.com/beego/beego/v2/client/orm"
  14. beego "github.com/beego/beego/v2/server/web"
  15. "github.com/vmihailenco/msgpack/v5"
  16. "github.com/xuri/excelize/v2"
  17. "gonum.org/v1/plot"
  18. "gonum.org/v1/plot/plotter"
  19. "gonum.org/v1/plot/vg"
  20. "gonum.org/v1/plot/vg/draw"
  21. "math"
  22. "os"
  23. "strconv"
  24. "strings"
  25. "sync"
  26. "time"
  27. )
  28. type TaskDataController struct {
  29. beego.Controller
  30. }
  31. // 列表 -
  32. func (c *TaskDataController) TaskData_List() {
  33. var r_jsons lib.R_JSONS
  34. page, _ := c.GetInt("page")
  35. if page < 1 {
  36. page = 1
  37. }
  38. page_z, _ := c.GetInt("page_z")
  39. if page_z < 1 {
  40. page_z = conf.Page_size
  41. }
  42. Time_start := c.GetString("Time_start")
  43. Time_end := c.GetString("Time_end")
  44. T_sn := c.GetString("T_sn")
  45. T_id := c.GetString("T_id")
  46. T_task_id := c.GetString("T_task_id")
  47. Task_r, err := NatsServer.Read_Task(T_task_id)
  48. if err != nil {
  49. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  50. c.ServeJSON()
  51. return
  52. }
  53. if Task_r.T_collection_state == 2 {
  54. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  55. c.ServeJSON()
  56. return
  57. }
  58. var cnt int64
  59. List, cnt := Task.Read_TaskData_ById_List(Task_r.T_task_id, T_sn, T_id, Time_start, Time_end, page, page_z)
  60. page_size := math.Ceil(float64(cnt) / float64(page_z))
  61. r_jsons.List = List
  62. r_jsons.Page = page
  63. r_jsons.Page_size = int(page_size)
  64. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  65. r_jsons.Num = int(cnt)
  66. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  67. c.ServeJSON()
  68. return
  69. }
  70. // 列表 -
  71. func (c *TaskDataController) TaskDataClass_List() {
  72. page, _ := c.GetInt("page")
  73. if page < 1 {
  74. page = 1
  75. }
  76. page_z, _ := c.GetInt("page_z")
  77. if page_z < 1 {
  78. page_z = conf.Page_size
  79. }
  80. T_task_id := c.GetString("T_task_id")
  81. Task_r, err := NatsServer.Read_Task(T_task_id)
  82. if err != nil {
  83. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  84. c.ServeJSON()
  85. return
  86. }
  87. if Task_r.T_collection_state == 2 {
  88. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  89. c.ServeJSON()
  90. return
  91. }
  92. List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
  93. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: List}
  94. c.ServeJSON()
  95. return
  96. }
  97. func (c *TaskDataController) TaskDataClass_Edit() {
  98. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  99. T_task_id := c.GetString("T_task_id")
  100. T_sn := c.GetString("T_sn")
  101. T_id := c.GetString("T_id")
  102. Task_r, err := NatsServer.Read_Task(T_task_id)
  103. if err != nil {
  104. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  105. c.ServeJSON()
  106. return
  107. }
  108. sn, err := Task.Read_TaskData_ByT_id(Task_r.T_task_id, T_id)
  109. if err != nil && !errors.Is(err, orm.ErrNoRows) {
  110. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  111. c.ServeJSON()
  112. return
  113. }
  114. if len(sn) > 0 && sn != T_sn {
  115. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("编号[%s]已被sn[%s]关联,请修改后重试!", T_id, sn)}
  116. c.ServeJSON()
  117. return
  118. }
  119. //id, err := Task.Read_TaskData_ByT_sn(Task_r.T_task_id, T_sn)
  120. //if err != nil && !errors.Is(err, orm.ErrNoRows) {
  121. // c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  122. // c.ServeJSON()
  123. // return
  124. //}
  125. //if len(id) > 0 && id != T_id {
  126. // c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("sn[%s]已被编号[%s]关联,请修改后重试!", T_sn, id)}
  127. // c.ServeJSON()
  128. // return
  129. //}
  130. err = Task.Update_TaskData_ByT_sn(Task_r.T_task_id, T_sn, T_id)
  131. if err != nil {
  132. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  133. c.ServeJSON()
  134. return
  135. }
  136. System.Add_UserLogs_T(T_uuid, "本地版-任务分裂", "修改分类数据"+Task_r.T_name, Task_r.T_task_id+"|"+T_sn+"|"+T_id)
  137. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  138. c.ServeJSON()
  139. return
  140. }
  141. func (c *TaskDataController) TaskDataClass_Del() {
  142. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  143. T_task_id := c.GetString("T_task_id")
  144. T_sn := c.GetString("T_sn")
  145. Task_r, err := NatsServer.Read_Task(T_task_id)
  146. if err != nil {
  147. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  148. c.ServeJSON()
  149. return
  150. }
  151. err = Task.Delete_TaskData_ByT_sn(Task_r.T_task_id, T_sn)
  152. if err != nil {
  153. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  154. c.ServeJSON()
  155. return
  156. }
  157. System.Add_UserLogs_T(T_uuid, "本地版-任务分类", "删除分类数据"+Task_r.T_name, Task_r.T_task_id+"|"+T_sn)
  158. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  159. c.ServeJSON()
  160. return
  161. }
  162. // 添加-
  163. func (c *TaskDataController) TaskData_AddS() {
  164. // 获取登录用户的uuid
  165. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  166. T_task_id := c.GetString("T_task_id")
  167. Task_r, err := NatsServer.Read_Task(T_task_id)
  168. if err != nil {
  169. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  170. c.ServeJSON()
  171. return
  172. }
  173. //T_sn|T_id|T_t|T_rh|T_time?
  174. T_Data := c.GetString("T_Data")
  175. if len(T_Data) < 5 {
  176. c.Data["json"] = lib.JSONS{Code: 201, Msg: "err T_Data!"}
  177. c.ServeJSON()
  178. return
  179. }
  180. T_Data_list := strings.Split(T_Data, "?")
  181. println(len(T_Data_list), "len(T_Data_list)")
  182. var T_Data_list_x = 0
  183. snMaps := make(map[string]string)
  184. for _, v := range T_Data_list {
  185. // 132|132|23.9|72.1|2023-04-30 07:03:00
  186. if len(v) < 5 {
  187. println(v, "len(v) < 5")
  188. continue
  189. }
  190. v_list := strings.Split(v, "|")
  191. id, sn := v_list[1], v_list[0]
  192. sn1, ok := snMaps[id]
  193. if !ok {
  194. snMaps[id] = sn
  195. } else if sn1 != sn {
  196. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("编号[%s]已被sn[%s]关联,请修改后重试!", id, sn1)}
  197. c.ServeJSON()
  198. return
  199. }
  200. }
  201. for T_id, T_sn := range snMaps {
  202. sn, err := Task.Read_TaskData_ByT_id(Task_r.T_task_id, T_id)
  203. if err != nil && !errors.Is(err, orm.ErrNoRows) {
  204. continue
  205. }
  206. if len(sn) > 0 && sn != T_sn {
  207. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("编号[%s]已被sn[%s]关联,请修改后重试!", T_id, sn)}
  208. c.ServeJSON()
  209. return
  210. }
  211. id, err := Task.Read_TaskData_ByT_sn(Task_r.T_task_id, T_sn)
  212. if err != nil && !errors.Is(err, orm.ErrNoRows) {
  213. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  214. c.ServeJSON()
  215. return
  216. }
  217. if len(id) > 0 && id != T_id {
  218. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("sn[%s]已被编号[%s]关联,请修改后重试!", T_sn, id)}
  219. c.ServeJSON()
  220. return
  221. }
  222. }
  223. for _, v := range T_Data_list {
  224. // 132|132|23.9|72.1|2023-04-30 07:03:00
  225. if len(v) < 5 {
  226. println(v, "len(v) < 5")
  227. continue
  228. }
  229. v_list := strings.Split(v, "|")
  230. t, _ := lib.ReplaceSeconds(v_list[4])
  231. is := Task.Add_TaskData(Task_r.T_task_id, v_list[0], v_list[1], v_list[2], v_list[3], t)
  232. if is {
  233. T_Data_list_x += 1
  234. }
  235. }
  236. 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)
  237. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: strconv.Itoa(T_Data_list_x)}
  238. c.ServeJSON()
  239. return
  240. }
  241. func (c *TaskDataController) TaskData_AddS_Excel() {
  242. // 获取登录用户的uuid
  243. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  244. T_task_id := c.GetString("T_task_id")
  245. Task_r, err := NatsServer.Read_Task(T_task_id)
  246. if err != nil {
  247. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  248. c.ServeJSON()
  249. return
  250. }
  251. // 获取上传的文件
  252. file, _, err := c.GetFile("file")
  253. if err != nil {
  254. c.Data["json"] = lib.JSONS{Code: 202, Msg: "文件上传失败!"}
  255. c.ServeJSON()
  256. return
  257. }
  258. // 解析 Excel 文件
  259. xlFile, err := excelize.OpenReader(file)
  260. if err != nil {
  261. c.Data["json"] = lib.JSONS{Code: 202, Msg: "文件解析失败!"}
  262. c.ServeJSON()
  263. return
  264. }
  265. rows, err := xlFile.GetRows(xlFile.GetSheetName(0))
  266. if err != nil {
  267. c.Data["json"] = lib.JSONS{Code: 202, Msg: "获取工作表失败!"}
  268. c.ServeJSON()
  269. return
  270. }
  271. var T_Data_list_x int
  272. snMaps := make(map[string]string)
  273. var valueStrings []string
  274. for k, val := range rows {
  275. // 跳过第一行
  276. if k == 0 {
  277. continue
  278. }
  279. if len(val) < 5 {
  280. println(val, "len(v) < 5")
  281. continue
  282. }
  283. fmt.Println(val)
  284. id, sn := val[1], val[0]
  285. sn1, ok := snMaps[id]
  286. if !ok {
  287. snMaps[id] = sn
  288. } else if sn1 != sn {
  289. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("编号[%s]已被sn[%s]关联,请修改后重试!", id, sn1)}
  290. c.ServeJSON()
  291. return
  292. }
  293. t, _ := lib.ReplaceSeconds(val[4])
  294. valueStrings = append(valueStrings, fmt.Sprintf("('%s','%s',%v,%v,'%s')", val[0], val[1], val[2], val[3], t))
  295. //T_Data_list_x += 1
  296. }
  297. for T_id, T_sn := range snMaps {
  298. sn, err := Task.Read_TaskData_ByT_id(Task_r.T_task_id, T_id)
  299. if err != nil && !errors.Is(err, orm.ErrNoRows) {
  300. continue
  301. }
  302. if len(sn) > 0 && sn != T_sn {
  303. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("编号[%s]已被sn[%s]关联,请修改后重试!", T_id, sn)}
  304. c.ServeJSON()
  305. return
  306. }
  307. id, err := Task.Read_TaskData_ByT_sn(Task_r.T_task_id, T_sn)
  308. if err != nil && !errors.Is(err, orm.ErrNoRows) {
  309. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  310. c.ServeJSON()
  311. return
  312. }
  313. if len(id) > 0 && id != T_id {
  314. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("sn[%s]已被编号[%s]关联,请修改后重试!", T_sn, id)}
  315. c.ServeJSON()
  316. return
  317. }
  318. }
  319. // 删除重复数据
  320. err = Task.DeleteDeduplicate(T_task_id)
  321. if err != nil {
  322. c.Data["json"] = lib.JSONS{Code: 202, Msg: "导入失败"}
  323. c.ServeJSON()
  324. return
  325. }
  326. // 创建唯一缩影
  327. err = Task.Create_Unique_Index(T_task_id)
  328. if err != nil {
  329. c.Data["json"] = lib.JSONS{Code: 202, Msg: "导入失败"}
  330. c.ServeJSON()
  331. return
  332. }
  333. pageSize := 10000 // 每页的条数
  334. totalPages := len(valueStrings) / pageSize // 总页数
  335. // 遍历每一页
  336. for page := 1; page <= totalPages+1; page++ {
  337. // 计算当前页的起始索引和结束索引
  338. startIndex := (page - 1) * pageSize
  339. if startIndex > len(valueStrings) {
  340. startIndex = len(valueStrings)
  341. }
  342. endIndex := page * pageSize
  343. // 边界判断,如果结束索引超过列表长度,则将结束索引设置为列表最后一个元素的索引加一
  344. if endIndex > len(valueStrings) {
  345. endIndex = len(valueStrings)
  346. }
  347. fmt.Printf("startIndex %d endIndex %d\n", startIndex, endIndex)
  348. // 获取当前页的数据
  349. currentList := valueStrings[startIndex:endIndex]
  350. err = Task.Adds_TaskData(T_task_id, currentList)
  351. if err == nil {
  352. T_Data_list_x += len(currentList)
  353. }
  354. }
  355. //err = Task.Adds_TaskData(T_task_id, valueStrings)
  356. // 删除唯一索引
  357. Task.Delete_Unique_Index(T_task_id)
  358. System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "添加数据"+Task_r.T_name, Task_r.T_task_id+"结果:"+strconv.Itoa(T_Data_list_x))
  359. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: strconv.Itoa(T_Data_list_x)}
  360. c.ServeJSON()
  361. return
  362. }
  363. // 添加-
  364. func (c *TaskDataController) TaskData_Add() {
  365. // 获取登录用户的uuid
  366. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  367. T_sn := c.GetString("T_sn")
  368. T_id := c.GetString("T_id")
  369. T_t, _ := c.GetFloat("T_t")
  370. T_rh, _ := c.GetFloat("T_rh")
  371. T_time := c.GetString("T_time")
  372. T_task_id := c.GetString("T_task_id")
  373. Task_r, err := NatsServer.Read_Task(T_task_id)
  374. if err != nil {
  375. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  376. c.ServeJSON()
  377. return
  378. }
  379. sn, err := Task.Read_TaskData_ByT_id(Task_r.T_task_id, T_id)
  380. if err != nil && !errors.Is(err, orm.ErrNoRows) {
  381. c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
  382. c.ServeJSON()
  383. return
  384. }
  385. if len(sn) > 0 && sn != T_sn {
  386. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("编号[%s]已被sn[%s]关联,请修改后重试!", T_id, sn)}
  387. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("编号[%s]已被sn[%s]关联,请修改后重试!", T_id, sn)}
  388. c.ServeJSON()
  389. return
  390. }
  391. id, err := Task.Read_TaskData_ByT_sn(Task_r.T_task_id, T_sn)
  392. if err != nil && !errors.Is(err, orm.ErrNoRows) {
  393. c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
  394. c.ServeJSON()
  395. return
  396. }
  397. if len(id) > 0 && id != T_id {
  398. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("sn[%s]已被编号[%s]关联,请修改后重试!", T_sn, id)}
  399. c.ServeJSON()
  400. return
  401. }
  402. is := Task.Add_TaskData(Task_r.T_task_id, T_sn, T_id, fmt.Sprintf("%.2f", T_t), fmt.Sprintf("%.2f", T_rh), T_time)
  403. if !is {
  404. c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
  405. c.ServeJSON()
  406. return
  407. }
  408. System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "添加数据"+Task_r.T_name, Task_r.T_task_id+"|"+T_sn+"|"+T_id+"|"+fmt.Sprintf("%.2f", T_t)+"|"+fmt.Sprintf("%.2f", T_rh)+T_time)
  409. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  410. c.ServeJSON()
  411. return
  412. }
  413. // 修改-
  414. func (c *TaskDataController) TaskData_Up() {
  415. // 获取登录用户的uuid
  416. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  417. Id, err := c.GetInt("Id")
  418. if err != nil {
  419. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  420. c.ServeJSON()
  421. return
  422. }
  423. T_t, err := c.GetFloat("T_t")
  424. if err != nil {
  425. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_t 错误!"}
  426. c.ServeJSON()
  427. return
  428. }
  429. T_rh, err := c.GetFloat("T_rh")
  430. if err != nil {
  431. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_rh 错误!"}
  432. c.ServeJSON()
  433. return
  434. }
  435. T_time := c.GetString("T_time")
  436. T_task_id := c.GetString("T_task_id")
  437. Task_r, err := NatsServer.Read_Task(T_task_id)
  438. if err != nil {
  439. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  440. c.ServeJSON()
  441. return
  442. }
  443. is := Task.Up_TaskData(Task_r.T_task_id, strconv.Itoa(Id), fmt.Sprintf("%.2f", T_t), fmt.Sprintf("%.2f", T_rh), T_time)
  444. if !is {
  445. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  446. c.ServeJSON()
  447. return
  448. }
  449. 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)
  450. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  451. c.ServeJSON()
  452. return
  453. }
  454. // 删除-
  455. func (c *TaskDataController) TaskData_Del() {
  456. // 获取登录用户的uuid
  457. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  458. Id, err := c.GetInt("Id")
  459. if err != nil {
  460. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  461. c.ServeJSON()
  462. return
  463. }
  464. T_task_id := c.GetString("T_task_id")
  465. Task_r, err := NatsServer.Read_Task(T_task_id)
  466. if err != nil {
  467. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  468. c.ServeJSON()
  469. return
  470. }
  471. is := Task.Del_TaskData(Task_r.T_task_id, strconv.Itoa(Id))
  472. if !is {
  473. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  474. c.ServeJSON()
  475. return
  476. }
  477. System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
  478. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  479. c.ServeJSON()
  480. return
  481. }
  482. // 删除-
  483. func (c *TaskDataController) TaskData_Del_t_id() {
  484. // 获取登录用户的uuid
  485. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  486. Id := c.GetString("Id")
  487. T_task_id := c.GetString("T_task_id")
  488. Task_r, err := NatsServer.Read_Task(T_task_id)
  489. if err != nil {
  490. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  491. c.ServeJSON()
  492. return
  493. }
  494. is := Task.Del_TaskData_t_id(Task_r.T_task_id, Id)
  495. if !is {
  496. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  497. c.ServeJSON()
  498. return
  499. }
  500. System.Add_UserLogs_T(T_uuid, "本地版-任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+Id)
  501. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  502. c.ServeJSON()
  503. return
  504. }
  505. // 列表 - 接口
  506. func (c *TaskDataController) Export_Data_Excel() {
  507. Time_start := c.GetString("Time_start")
  508. Time_end := c.GetString("Time_end")
  509. T_sn_str := c.GetString("T_sn_list") //865901058809339,865901058815849,865901058818991,865901058810568
  510. //T_id, err := c.GetInt("T_id")
  511. //if err != nil {
  512. // T_id = -1
  513. //
  514. //}
  515. T_task_id := c.GetString("T_task_id")
  516. Task_r, err := NatsServer.Read_Task(T_task_id)
  517. if err != nil {
  518. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  519. c.ServeJSON()
  520. return
  521. }
  522. if Task_r.T_collection_state == 2 {
  523. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  524. c.ServeJSON()
  525. return
  526. }
  527. T_sn_list := strings.Split(T_sn_str, ",")
  528. DeviceSensor_data_list := []Task.TaskData_{}
  529. for _, v := range T_sn_list {
  530. DeviceSensor_data, _ := Task.Read_TaskData_ById_List(Task_r.T_task_id, v, "", Time_start, Time_end, 1, 9999)
  531. DeviceSensor_data_list = append(DeviceSensor_data_list, DeviceSensor_data...)
  532. }
  533. f := excelize.NewFile() // 设置单元格的值
  534. // 这里设置表头
  535. f.SetCellValue("Sheet1", "A1", "编号")
  536. f.SetCellValue("Sheet1", "B1", "SN")
  537. f.SetCellValue("Sheet1", "C1", "温度℃")
  538. f.SetCellValue("Sheet1", "D1", "湿度%")
  539. f.SetCellValue("Sheet1", "E1", "记录时间")
  540. // 设置列宽
  541. f.SetColWidth("Sheet1", "A", "A", 7)
  542. f.SetColWidth("Sheet1", "B", "B", 20)
  543. f.SetColWidth("Sheet1", "C", "C", 10)
  544. f.SetColWidth("Sheet1", "D", "D", 10)
  545. f.SetColWidth("Sheet1", "E", "E", 22)
  546. line := 1
  547. // 循环写入数据
  548. for _, v := range DeviceSensor_data_list {
  549. line++
  550. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), v.T_id)
  551. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_sn)
  552. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), strconv.FormatFloat(float64(v.T_t), 'f', 1, 64))
  553. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), strconv.FormatFloat(float64(v.T_rh), 'f', 1, 64))
  554. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.T_time)
  555. }
  556. fmt.Println("DeviceSensor_data:", len(DeviceSensor_data_list))
  557. lib.Create_Dir("./ofile")
  558. timeStr := time.Now().Format("20060102150405")
  559. // 保存文件
  560. if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
  561. fmt.Println(err)
  562. }
  563. if !lib.Pload_qiniu("ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx") {
  564. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  565. c.ServeJSON()
  566. return
  567. }
  568. //删除目录
  569. err = os.Remove("ofile/" + timeStr + ".xlsx")
  570. if err != nil {
  571. fmt.Println(err)
  572. }
  573. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: "https://bzdcoldverifyoss.baozhida.cn/" + "ofile/" + timeStr + ".xlsx"}
  574. c.ServeJSON()
  575. return
  576. }
  577. func (c *TaskDataController) Check() {
  578. T_task_id := c.GetString("T_task_id")
  579. Task_r, err := NatsServer.Read_Task(T_task_id)
  580. if Task_r.T_collection_state == 2 {
  581. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  582. c.ServeJSON()
  583. return
  584. }
  585. if err != nil {
  586. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  587. c.ServeJSON()
  588. return
  589. }
  590. type R_JSONS struct {
  591. T_sn string // SN
  592. T_id string // 编号
  593. T_unm int // 数据量
  594. T_time_interval int64 // 时间间隔
  595. Time_start string // 开始
  596. Time_end string // 结束
  597. Result int // 200 OK, 201 可以补 , 202 不能补
  598. Result_str string // 提示内容
  599. Result_Time_start string // 2022-8-05 21:01
  600. Result_Time_defect int64 // 缺失时间间隔
  601. }
  602. var r_jsons []R_JSONS
  603. List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
  604. for _, v := range List {
  605. var r_json R_JSONS
  606. r_json.T_sn = v.T_sn
  607. r_json.T_id = v.T_id
  608. r_json.Result = 200
  609. DeviceSensor_data := Task.Read_TaskData_ById_List_(Task_r.T_task_id, v.T_sn)
  610. r_json.T_unm = len(DeviceSensor_data)
  611. if r_json.T_unm > 2 {
  612. r_json.T_id = DeviceSensor_data[0].T_id
  613. r_json.Time_end = DeviceSensor_data[len(DeviceSensor_data)-1].T_time
  614. r_json.Time_start = DeviceSensor_data[0].T_time
  615. formatTime_a, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[0].T_time)
  616. formatTime_b, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[1].T_time)
  617. formatTime_x := formatTime_b.Unix() - formatTime_a.Unix()
  618. r_json.T_time_interval = formatTime_x
  619. println("formatTime_x:", v.T_id, v.T_sn, formatTime_x)
  620. if formatTime_x > 60*30 || formatTime_x < 60 {
  621. r_json.Result = 202
  622. r_json.Result_str = "数据异常(数据的第一个时间与第二个时间相差 " + strconv.FormatInt(formatTime_x, 10) + "秒),必须大于60秒,小于30分钟"
  623. r_jsons = append(r_jsons, r_json)
  624. continue
  625. }
  626. for data_i := 2; data_i < len(DeviceSensor_data); data_i++ {
  627. formatTime_a = formatTime_b
  628. formatTime_b, _ = time.Parse("2006-1-2 15:04", DeviceSensor_data[data_i].T_time)
  629. formatTime_ := formatTime_b.Unix() - formatTime_a.Unix()
  630. println("formatTime_x-:", formatTime_)
  631. if formatTime_ < formatTime_x {
  632. r_json.Result = 202
  633. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,间隔小于时间间隔,不能自动补充"
  634. break
  635. }
  636. if formatTime_x != formatTime_ {
  637. if formatTime_ > 60*30 {
  638. r_json.Result = 202
  639. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,相差时间大于30分钟,不能自动补充"
  640. break
  641. }
  642. r_json.Result = 201
  643. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒"
  644. r_json.Result_Time_start = DeviceSensor_data[data_i-1].T_time
  645. r_json.Result_Time_defect = formatTime_
  646. println(r_json.Result_str)
  647. break
  648. }
  649. }
  650. } else {
  651. r_json.Result = 202
  652. r_json.Result_str = "数据量太少 必须大于 2条以上!"
  653. }
  654. r_jsons = append(r_jsons, r_json)
  655. }
  656. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  657. c.ServeJSON()
  658. return
  659. }
  660. func (c *TaskDataController) Check_Asyn() {
  661. T_task_id := c.GetString("T_task_id")
  662. Task_r, err := NatsServer.Read_Task(T_task_id)
  663. if Task_r.T_collection_state == 2 {
  664. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  665. c.ServeJSON()
  666. return
  667. }
  668. if err != nil {
  669. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  670. c.ServeJSON()
  671. return
  672. }
  673. type R_JSONS struct {
  674. T_sn string // SN
  675. T_id string // 编号
  676. T_unm int // 数据量
  677. T_time_interval int64 // 时间间隔
  678. Time_start string // 开始
  679. Time_end string // 结束
  680. Result int // 200 OK, 201 可以补 , 202 不能补
  681. Result_str string // 提示内容
  682. Result_Time_start string // 2022-8-05 21:01
  683. Result_Time_defect int64 // 缺失时间间隔
  684. }
  685. List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
  686. r_jsons := make([]R_JSONS, len(List))
  687. var limitMaxNum = 10
  688. var chData = make(chan int, limitMaxNum)
  689. var jobGroup sync.WaitGroup
  690. var tasknum = len(List)
  691. for i := 0; i < tasknum; i++ {
  692. chData <- 1
  693. jobGroup.Add(1)
  694. go func(index int, wg *sync.WaitGroup, res *[]R_JSONS) {
  695. defer wg.Done()
  696. var r_json R_JSONS
  697. r_json.T_sn = List[index].T_sn
  698. r_json.T_id = List[index].T_id
  699. r_json.Result = 200
  700. DeviceSensor_data := Task.Read_TaskData_ById_List_(Task_r.T_task_id, List[index].T_sn)
  701. r_json.T_unm = len(DeviceSensor_data)
  702. if r_json.T_unm > 2 {
  703. r_json.T_id = DeviceSensor_data[0].T_id
  704. r_json.Time_end = DeviceSensor_data[len(DeviceSensor_data)-1].T_time
  705. r_json.Time_start = DeviceSensor_data[0].T_time
  706. formatTime_a, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[0].T_time)
  707. formatTime_b, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[1].T_time)
  708. formatTime_x := formatTime_b.Unix() - formatTime_a.Unix()
  709. r_json.T_time_interval = formatTime_x
  710. println("formatTime_x:", List[index].T_id, List[index].T_sn, formatTime_x)
  711. if formatTime_x > 60*30 || formatTime_x < 60 {
  712. r_json.Result = 202
  713. r_json.Result_str = "数据异常(数据的第一个时间与第二个时间相差 " + strconv.FormatInt(formatTime_x, 10) + "秒),必须大于60秒,小于30分钟"
  714. *res = append(*res, r_json)
  715. <-chData
  716. return
  717. }
  718. for data_i := 2; data_i < len(DeviceSensor_data); data_i++ {
  719. formatTime_a = formatTime_b
  720. formatTime_b, _ = time.Parse("2006-1-2 15:04", DeviceSensor_data[data_i].T_time)
  721. formatTime_ := formatTime_b.Unix() - formatTime_a.Unix()
  722. if formatTime_ < formatTime_x {
  723. println("formatTime_x-:", formatTime_)
  724. r_json.Result = 202
  725. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,间隔小于时间间隔,不能自动补充"
  726. break
  727. }
  728. if formatTime_x != formatTime_ {
  729. if formatTime_ > 60*30 {
  730. println("formatTime_x-:", formatTime_)
  731. r_json.Result = 202
  732. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,相差时间大于30分钟,不能自动补充"
  733. break
  734. }
  735. r_json.Result = 202
  736. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒"
  737. r_json.Result_Time_start = DeviceSensor_data[data_i-1].T_time
  738. r_json.Result_Time_defect = formatTime_
  739. println(r_json.Result_str)
  740. break
  741. }
  742. }
  743. } else {
  744. r_json.Result = 202
  745. r_json.Result_str = "数据量太少 必须大于 2条以上!"
  746. }
  747. *res = append(*res, r_json)
  748. <-chData
  749. }(i, &jobGroup, &r_jsons)
  750. }
  751. //使用Wait等待所有任务执行完毕
  752. jobGroup.Wait()
  753. jsonsMap := map[string]R_JSONS{}
  754. resp := make([]R_JSONS, 0)
  755. for _, json := range r_jsons {
  756. jsonsMap[json.T_id] = json
  757. }
  758. for _, v := range List {
  759. resp = append(resp, jsonsMap[v.T_id])
  760. }
  761. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: resp}
  762. c.ServeJSON()
  763. return
  764. }
  765. // 打包数据本地数据
  766. func (c *TaskDataController) TaskData_Import_TaskData() {
  767. // 获取登录用户的uuid
  768. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  769. T_task_id := c.GetString("T_task_id")
  770. _, err := NatsServer.Read_Task(T_task_id)
  771. if err != nil {
  772. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  773. c.ServeJSON()
  774. return
  775. }
  776. if err = lib.Create_Dir(conf.Sql_Temp_Dir); err != nil {
  777. logs.Println("创建sql临时文件失败")
  778. }
  779. sql_file := fmt.Sprintf("%sZ_TaskData_%s.sql", conf.Sql_Temp_Dir, T_task_id)
  780. org, err := Task.Dump_TaskData(T_task_id, conf.MysqlServer2_Username, conf.MysqlServer2_Password, conf.MysqlServer2_UrlPort, conf.MysqlServer2_Database, sql_file)
  781. if err != nil {
  782. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线上数据导出失败!"}
  783. c.ServeJSON()
  784. return
  785. }
  786. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-打包本地数据", "导出线上数据Z_TaskData_"+T_task_id, org)
  787. i := 0
  788. flag := false
  789. Task.CREATE_TaskData(conf.Local_AliasName, T_task_id)
  790. for i < 10 {
  791. Task.Truncate_TaskData(conf.Local_AliasName, T_task_id)
  792. org, err = Task.Insert_TaskData(conf.MysqlServer_Username, conf.MysqlServer_Password, conf.MysqlServer_UrlPort, conf.MysqlServer_Database, sql_file)
  793. if err != nil {
  794. logs.Println("任务数据-打包本地数据", "线下导入数据Z_TaskData_"+T_task_id, err.Error())
  795. } else {
  796. if Task.Check_TaskData_Num(T_task_id) {
  797. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-打包本地数据", "线下导入数据Z_TaskData_"+T_task_id, org)
  798. flag = true
  799. break
  800. }
  801. }
  802. i++
  803. }
  804. // 重试10次后仍然没有成功导入数据
  805. if !flag {
  806. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线下导入数据失败!"}
  807. c.ServeJSON()
  808. return
  809. }
  810. //删除导出的sql文件
  811. _ = os.Remove(sql_file)
  812. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  813. c.ServeJSON()
  814. }
  815. // 更新线上数据
  816. func (c *TaskDataController) TaskData_Up_TaskData() {
  817. // 获取登录用户的uuid
  818. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  819. T_task_id := c.GetString("T_task_id")
  820. Task_r, err := NatsServer.Read_Task(T_task_id)
  821. if err != nil {
  822. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  823. c.ServeJSON()
  824. return
  825. }
  826. if err = lib.Create_Dir(conf.Sql_Temp_Dir); err != nil {
  827. logs.Println("创建sql临时文件失败")
  828. }
  829. sql_file := fmt.Sprintf("%sZ_TaskData_%s.sql", conf.Sql_Temp_Dir, T_task_id)
  830. org, err := Task.Dump_TaskData(T_task_id, conf.MysqlServer_Username, conf.MysqlServer_Password, conf.MysqlServer_UrlPort, conf.MysqlServer_Database, sql_file)
  831. if err != nil {
  832. logs.Println(T_uuid, "任务数据-更新线上数据", "导出线下数据Z_TaskData_"+T_task_id, err.Error())
  833. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线下数据导出失败!"}
  834. c.ServeJSON()
  835. return
  836. }
  837. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, org)
  838. i := 0
  839. flag := false
  840. for i < 10 {
  841. Task.Truncate_TaskData(conf.Server_AliasName, T_task_id)
  842. org, err = Task.Insert_TaskData(conf.MysqlServer2_Username, conf.MysqlServer2_Password, conf.MysqlServer2_UrlPort, conf.MysqlServer2_Database, sql_file)
  843. if err != nil {
  844. logs.Println(T_uuid, "任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, err.Error())
  845. } else {
  846. if Task.Check_TaskData_Num(T_task_id) {
  847. System.Add_UserLogs_T(T_uuid, "本地版-任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, org)
  848. flag = true
  849. break
  850. }
  851. }
  852. i++
  853. }
  854. // 重试10次后仍然没有成功导入数据
  855. if !flag {
  856. c.Data["json"] = lib.JSONS{Code: 202, Msg: "z_task_data_" + T_task_id + "线上导入数据失败!"}
  857. c.ServeJSON()
  858. return
  859. }
  860. //删除导出的sql文件
  861. _ = os.Remove(sql_file)
  862. // 线上数据更新后 将当前任务 交付审核 标志 为 1
  863. Task_r.T_delivery_state = 1
  864. err = NatsServer.Update_Task(Task_r)
  865. if err != nil {
  866. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  867. c.ServeJSON()
  868. return
  869. }
  870. // 向线上用户日志表写入数据
  871. System.Add_UserLogs_T(T_uuid, "本地版-任务", "修改", Task_r)
  872. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  873. c.ServeJSON()
  874. }
  875. // 更新线上数据后台执行
  876. func (c *TaskDataController) TaskData_Up_TaskData_Back() {
  877. // 获取登录用户的uuid
  878. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  879. T_task_id := c.GetString("T_task_id")
  880. Task_r, err := NatsServer.Read_Task(T_task_id)
  881. if err != nil {
  882. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  883. c.ServeJSON()
  884. return
  885. }
  886. if Task_r.T_delivery_state == 2 {
  887. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  888. c.ServeJSON()
  889. return
  890. }
  891. // 采集中
  892. Task_r.T_delivery_state = 2
  893. err = NatsServer.Update_Task(Task_r)
  894. if err != nil {
  895. c.Data["json"] = lib.JSONS{Code: 202, Msg: "提交失败!"}
  896. c.ServeJSON()
  897. return
  898. }
  899. data := Nats.Up_TaskData_Back{
  900. T_uuid: T_uuid,
  901. Task: Task_r,
  902. }
  903. b, _ := msgpack.Marshal(&data)
  904. _ = lib.Nats.Publish("ColdVerify_Local_Up_TaskData", b)
  905. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  906. c.ServeJSON()
  907. return
  908. }
  909. // CopyFromPosition 数据拷贝
  910. func (c *TaskDataController) CopyFromPosition() {
  911. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  912. //if !b_ {
  913. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  914. // c.ServeJSON()
  915. // return
  916. //}
  917. StartTime := c.GetString("StartTime")
  918. startTime, ok := lib.TimeStrToTime(StartTime)
  919. if !ok {
  920. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  921. c.ServeJSON()
  922. return
  923. }
  924. EndTime := c.GetString("EndTime")
  925. endTime, ok := lib.TimeStrToTime(EndTime)
  926. if !ok {
  927. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  928. c.ServeJSON()
  929. return
  930. }
  931. CopyTime := c.GetString("CopyTime")
  932. copyTime, ok := lib.TimeStrToTime(CopyTime)
  933. if !ok {
  934. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  935. c.ServeJSON()
  936. return
  937. }
  938. CopyEndTime := copyTime.Add(endTime.Sub(startTime)).Format("2006-01-02 15:04:05")
  939. // 时间间隔 分钟
  940. T_saveT, _ := c.GetInt("T_saveT")
  941. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  942. T_task_id := c.GetString("T_task_id")
  943. Task_r, err := NatsServer.Read_Task(T_task_id)
  944. if err != nil {
  945. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  946. c.ServeJSON()
  947. return
  948. }
  949. if Task_r.T_collection_state == 2 {
  950. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  951. c.ServeJSON()
  952. return
  953. }
  954. for _, v := range SN_List {
  955. sn_id := strings.Split(v, ",")
  956. if len(sn_id) != 2 {
  957. continue
  958. }
  959. sn, id_str := sn_id[0], sn_id[1]
  960. List, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, StartTime, EndTime, 0, 9999)
  961. Task.DeleteTaskDataByTimeRange(Task_r.T_task_id, sn, id_str, CopyTime, CopyEndTime)
  962. ct := copyTime
  963. go func(TaskDataList []Task.TaskData_, task_id string, T_saveT int) {
  964. for _, taskData := range TaskDataList {
  965. taskData.T_time = ct.Format("2006-01-02 15:04:05")
  966. Task.InsertTaskData(task_id, taskData)
  967. ct = ct.Add(time.Second * time.Duration(T_saveT))
  968. }
  969. }(List, Task_r.T_task_id, T_saveT)
  970. }
  971. System.Add_UserLogs_T(T_uuid, "数据复制", fmt.Sprintf("数据复制(%s)[%s|%s],复制时间:%s,,时间间隔:%d", T_task_id, StartTime, EndTime, CopyTime, T_saveT), SN_List)
  972. c.Data["json"] = lib.JSONS{200, "数据复制已提交后台处理!", nil}
  973. c.ServeJSON()
  974. return
  975. }
  976. // RepairSensorData 数据补漏
  977. func (c *TaskDataController) RepairSensorData() {
  978. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  979. //if !b_ {
  980. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  981. // c.ServeJSON()
  982. // return
  983. //}
  984. StartTime := c.GetString("StartTime")
  985. _, ok := lib.TimeStrToTime(StartTime)
  986. if !ok {
  987. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  988. c.ServeJSON()
  989. return
  990. }
  991. EndTime := c.GetString("EndTime")
  992. _, ok = lib.TimeStrToTime(EndTime)
  993. if !ok {
  994. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  995. c.ServeJSON()
  996. return
  997. }
  998. // 时间间隔 秒
  999. saveTime, _ := c.GetInt("T_saveT")
  1000. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1001. T_task_id := c.GetString("T_task_id")
  1002. Task_r, err := NatsServer.Read_Task(T_task_id)
  1003. if err != nil {
  1004. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1005. c.ServeJSON()
  1006. return
  1007. }
  1008. if Task_r.T_collection_state == 2 {
  1009. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1010. c.ServeJSON()
  1011. return
  1012. }
  1013. num := 0
  1014. for _, v := range SN_List {
  1015. sn_id := strings.Split(v, ",")
  1016. if len(sn_id) != 2 {
  1017. continue
  1018. }
  1019. sn, id_str := sn_id[0], sn_id[1]
  1020. list, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, StartTime, EndTime, 0, 9999)
  1021. for i := 0; i < len(list)-1; i++ {
  1022. current := list[i].T_time
  1023. next := list[i+1].T_time
  1024. c, _ := time.Parse("2006-01-02 15:04:05", current)
  1025. n, _ := time.Parse("2006-01-02 15:04:05", next)
  1026. interval := n.Unix() - c.Unix()
  1027. logs.Debug("时间间隔:", interval, "保存时间:", saveTime)
  1028. fmt.Println("当前:", current, "下一个:", next)
  1029. if int(interval) > saveTime {
  1030. ttInterval := list[i+1].T_t - list[i].T_t
  1031. ttt := list[i].T_t // 温度临时变量
  1032. trhInterval := list[i+1].T_rh - list[i].T_rh
  1033. trht := list[i].T_rh //湿度临时变量
  1034. count := (int(interval) - saveTime) / saveTime
  1035. if int(interval)%saveTime != 0 {
  1036. count++
  1037. }
  1038. num += count
  1039. for k := 0; k < count; k++ {
  1040. t := c.Add(time.Second * time.Duration(saveTime)).Format("2006-01-02 15:04:05") //时间临时变量
  1041. ttt += ttInterval / float32(count)
  1042. trht += trhInterval / float32(count)
  1043. Task.InsertTaskData(Task_r.T_task_id, Task.TaskData_{
  1044. T_sn: list[i].T_sn,
  1045. T_id: list[i].T_id,
  1046. T_t: ttt,
  1047. T_rh: trht,
  1048. T_time: t,
  1049. })
  1050. c = c.Add(time.Second * time.Duration(saveTime))
  1051. }
  1052. }
  1053. }
  1054. }
  1055. System.Add_UserLogs_T(T_uuid, "数据补漏", fmt.Sprintf("数据补漏(%s)[%s|%s],时间间隔:%d", T_task_id, StartTime, EndTime, saveTime), SN_List)
  1056. c.Data["json"] = lib.JSONS{200, fmt.Sprintf("补漏完成!共补漏%d条数据", num), nil}
  1057. c.ServeJSON()
  1058. return
  1059. }
  1060. // DataSensorDataTrend 数据趋势
  1061. func (c *TaskDataController) DataSensorDataTrend() {
  1062. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1063. //if !b_ {
  1064. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1065. // c.ServeJSON()
  1066. // return
  1067. //}
  1068. StartTime := c.GetString("StartTime")
  1069. _, ok := lib.TimeStrToTime(StartTime)
  1070. if !ok {
  1071. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1072. c.ServeJSON()
  1073. return
  1074. }
  1075. EndTime := c.GetString("EndTime")
  1076. _, ok = lib.TimeStrToTime(EndTime)
  1077. if !ok {
  1078. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1079. c.ServeJSON()
  1080. return
  1081. }
  1082. // 时间间隔 秒
  1083. saveTime, _ := c.GetInt("T_saveT")
  1084. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1085. T_task_id := c.GetString("T_task_id")
  1086. Task_r, err := NatsServer.Read_Task(T_task_id)
  1087. if err != nil {
  1088. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1089. c.ServeJSON()
  1090. return
  1091. }
  1092. if Task_r.T_collection_state == 2 {
  1093. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1094. c.ServeJSON()
  1095. return
  1096. }
  1097. for _, v := range SN_List {
  1098. sn_id := strings.Split(v, ",")
  1099. if len(sn_id) != 2 {
  1100. continue
  1101. }
  1102. sn, id_str := sn_id[0], sn_id[1]
  1103. list, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, StartTime, EndTime, 0, 9999)
  1104. if len(list) == 0 {
  1105. continue
  1106. }
  1107. Task.DeleteTaskDataByTimeRange(Task_r.T_task_id, sn, id_str, StartTime, EndTime)
  1108. first := list[0]
  1109. last := list[len(list)-1]
  1110. current, _ := time.Parse("2006-01-02 15:04:05", first.T_time)
  1111. next, _ := time.Parse("2006-01-02 15:04:05", last.T_time)
  1112. interval := next.Sub(current).Seconds() / float64(saveTime)
  1113. ttInterval := (last.T_t - first.T_t) / float32(interval)
  1114. trhInterval := (last.T_rh - first.T_rh) / float32(interval)
  1115. tt := first.T_t
  1116. ttrh := first.T_rh
  1117. for current.Unix() < next.Unix() {
  1118. tt += ttInterval
  1119. ttrh += trhInterval
  1120. ttime := current.Format("2006-01-02 15:04:05")
  1121. Task.InsertTaskData(Task_r.T_task_id, Task.TaskData_{
  1122. //加保存时间
  1123. T_sn: first.T_sn,
  1124. T_id: id_str,
  1125. T_t: tt,
  1126. T_rh: ttrh,
  1127. T_time: ttime,
  1128. })
  1129. current = current.Add(time.Second * time.Duration(saveTime))
  1130. }
  1131. }
  1132. System.Add_UserLogs_T(T_uuid, "数据趋势", fmt.Sprintf("数据趋势(%s)[%s|%s],时间间隔:%d", T_task_id, StartTime, EndTime, saveTime), SN_List)
  1133. c.Data["json"] = lib.JSONS{200, "设置趋势操作成功", nil}
  1134. c.ServeJSON()
  1135. return
  1136. }
  1137. // UpdateRand 数据随机
  1138. func (c *TaskDataController) UpdateRand() {
  1139. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1140. //if !b_ {
  1141. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1142. // c.ServeJSON()
  1143. // return
  1144. //}
  1145. StartTime := c.GetString("StartTime")
  1146. _, ok := lib.TimeStrToTime(StartTime)
  1147. if !ok {
  1148. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1149. c.ServeJSON()
  1150. return
  1151. }
  1152. EndTime := c.GetString("EndTime")
  1153. _, ok = lib.TimeStrToTime(EndTime)
  1154. if !ok {
  1155. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1156. c.ServeJSON()
  1157. return
  1158. }
  1159. TemperatureMin, _ := c.GetInt("TemperatureMin") // 温度
  1160. TemperatureMax, _ := c.GetInt("TemperatureMax")
  1161. HumidityMax, _ := c.GetInt("HumidityMax") // 湿度
  1162. HumidityMin, _ := c.GetInt("HumidityMin")
  1163. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1164. T_task_id := c.GetString("T_task_id")
  1165. Task_r, err := NatsServer.Read_Task(T_task_id)
  1166. if err != nil {
  1167. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1168. c.ServeJSON()
  1169. return
  1170. }
  1171. if Task_r.T_collection_state == 2 {
  1172. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1173. c.ServeJSON()
  1174. return
  1175. }
  1176. for _, v := range SN_List {
  1177. sn_id := strings.Split(v, ",")
  1178. if len(sn_id) != 2 {
  1179. continue
  1180. }
  1181. sn, id := sn_id[0], sn_id[1]
  1182. Task.UpdateTaskDataTemperatureAndHumidityRandom(Task_r.T_task_id, sn, id, StartTime, EndTime, TemperatureMax, TemperatureMin, HumidityMax, HumidityMin)
  1183. }
  1184. 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)
  1185. //反馈成功
  1186. c.Data["json"] = lib.JSONS{200, "调整随机偏移值成功!", nil}
  1187. c.ServeJSON()
  1188. return
  1189. }
  1190. // UpdateFix 更新固定值
  1191. func (c *TaskDataController) UpdateFix() {
  1192. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1193. //if !b_ {
  1194. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1195. // c.ServeJSON()
  1196. // return
  1197. //}
  1198. StartTime := c.GetString("StartTime")
  1199. _, ok := lib.TimeStrToTime(StartTime)
  1200. if !ok {
  1201. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1202. c.ServeJSON()
  1203. return
  1204. }
  1205. EndTime := c.GetString("EndTime")
  1206. _, ok = lib.TimeStrToTime(EndTime)
  1207. if !ok {
  1208. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1209. c.ServeJSON()
  1210. return
  1211. }
  1212. FixTemperature := c.GetString("FixTemperature")
  1213. FixHumidity := c.GetString("FixHumidity")
  1214. //2.得到数据进行统一设置访问修改
  1215. humidity, _ := strconv.ParseFloat(FixHumidity, 64)
  1216. temperature, _ := strconv.ParseFloat(FixTemperature, 64)
  1217. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1218. T_task_id := c.GetString("T_task_id")
  1219. Task_r, err := NatsServer.Read_Task(T_task_id)
  1220. if err != nil {
  1221. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1222. c.ServeJSON()
  1223. return
  1224. }
  1225. if Task_r.T_collection_state == 2 {
  1226. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1227. c.ServeJSON()
  1228. return
  1229. }
  1230. //3.循环更新数据
  1231. for _, v := range SN_List {
  1232. sn_id := strings.Split(v, ",")
  1233. if len(sn_id) != 2 {
  1234. continue
  1235. }
  1236. sn, id := sn_id[0], sn_id[1]
  1237. Task.UpdateTaskDataTemperatureAndHumidity(Task_r.T_task_id, sn, id, StartTime, EndTime, temperature, humidity)
  1238. }
  1239. System.Add_UserLogs_T(T_uuid, "更新固定值", fmt.Sprintf("更新固定值(%s)[%s|%s],温度[%f],湿度[%f]", T_task_id, StartTime, EndTime, temperature, humidity), SN_List)
  1240. //4.反馈成功
  1241. c.Data["json"] = lib.JSONS{200, "调整固定偏移值成功!", nil}
  1242. c.ServeJSON()
  1243. }
  1244. // DataSensorDataSmooth 数据平滑
  1245. func (c *TaskDataController) DataSensorDataSmooth() {
  1246. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1247. //if !b_ {
  1248. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1249. // c.ServeJSON()
  1250. // return
  1251. //}
  1252. StartTime := c.GetString("StartTime")
  1253. _, ok := lib.TimeStrToTime(StartTime)
  1254. if !ok {
  1255. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1256. c.ServeJSON()
  1257. return
  1258. }
  1259. EndTime := c.GetString("EndTime")
  1260. _, ok = lib.TimeStrToTime(EndTime)
  1261. if !ok {
  1262. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1263. c.ServeJSON()
  1264. return
  1265. }
  1266. tRange, _ := c.GetFloat("tRange")
  1267. hRange, _ := c.GetFloat("hRange")
  1268. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1269. T_task_id := c.GetString("T_task_id")
  1270. Task_r, err := NatsServer.Read_Task(T_task_id)
  1271. if err != nil {
  1272. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1273. c.ServeJSON()
  1274. return
  1275. }
  1276. if Task_r.T_collection_state == 2 {
  1277. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1278. c.ServeJSON()
  1279. return
  1280. }
  1281. var count int
  1282. for _, v := range SN_List {
  1283. sn_id := strings.Split(v, ",")
  1284. if len(sn_id) != 2 {
  1285. continue
  1286. }
  1287. sn := sn_id[0]
  1288. id_str := sn_id[1]
  1289. list, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, StartTime, EndTime, 0, 9999)
  1290. for i := 1; i < len(list); i++ {
  1291. n := list[i-1]
  1292. old := list[i]
  1293. newO := list[i]
  1294. //变化差
  1295. var tInterval = old.T_t - n.T_t
  1296. var hInterval = old.T_rh - n.T_rh
  1297. fmt.Println("温度:", n.T_t, "温度next:", old.T_t, "差值:", n.T_t-old.T_t)
  1298. if tRange != 0 {
  1299. if tInterval > float32(tRange) {
  1300. newO.T_t = n.T_t + float32(tRange)
  1301. } else if tInterval < -float32(tRange) {
  1302. newO.T_t = n.T_t - float32(tRange)
  1303. }
  1304. }
  1305. if hRange != 0 {
  1306. if hInterval > float32(hRange) {
  1307. newO.T_rh = n.T_rh + float32(hRange)
  1308. } else if hInterval < -float32(hRange) {
  1309. newO.T_rh = n.T_rh - float32(hRange)
  1310. }
  1311. }
  1312. if old.T_rh != newO.T_rh || old.T_t != newO.T_t {
  1313. fmt.Println("原始数据:", old, "新数据:", newO)
  1314. list[i] = newO
  1315. Task.UpdateTaskData(Task_r.T_task_id, sn, id_str, old, newO)
  1316. count++
  1317. }
  1318. }
  1319. }
  1320. System.Add_UserLogs_T(T_uuid, "数据平滑", fmt.Sprintf("数据平滑(%s)[%s|%s],温度[%f],湿度[%f]", T_task_id, StartTime, EndTime, tRange, hRange), SN_List)
  1321. c.Data["json"] = lib.JSONS{200, "操作成功处理" + fmt.Sprint(count) + "条数据", nil}
  1322. c.ServeJSON()
  1323. }
  1324. // CopyFromPosition 数据拷贝平均值
  1325. func (c *TaskDataController) CopyFromPositionAverageSN() {
  1326. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1327. //if !b_ {
  1328. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1329. // c.ServeJSON()
  1330. // return
  1331. //}
  1332. StartTime := c.GetString("StartTime")
  1333. startTime, ok := lib.TimeStrToTime(StartTime)
  1334. if !ok {
  1335. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1336. c.ServeJSON()
  1337. return
  1338. }
  1339. EndTime := c.GetString("EndTime")
  1340. endTime, ok := lib.TimeStrToTime(EndTime)
  1341. if !ok {
  1342. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1343. c.ServeJSON()
  1344. return
  1345. }
  1346. CopyTime := c.GetString("CopyTime")
  1347. CopySN := c.GetString("CopySN")
  1348. CopyID := c.GetString("CopyID")
  1349. copyTime, ok := lib.TimeStrToTime(CopyTime)
  1350. // 时间间隔 s
  1351. T_saveT, _ := c.GetInt("T_saveT")
  1352. if !ok {
  1353. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1354. c.ServeJSON()
  1355. return
  1356. }
  1357. CopyEndTime := copyTime.Add(endTime.Sub(startTime)).Format("2006-01-02 15:04:05")
  1358. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1359. if len(SN_List) != 2 {
  1360. c.Data["json"] = lib.JSONS{Code: 202, Msg: "SN_List Err!"}
  1361. c.ServeJSON()
  1362. return
  1363. }
  1364. T_task_id := c.GetString("T_task_id")
  1365. Task_r, err := NatsServer.Read_Task(T_task_id)
  1366. if err != nil {
  1367. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1368. c.ServeJSON()
  1369. return
  1370. }
  1371. if Task_r.T_collection_state == 2 {
  1372. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1373. c.ServeJSON()
  1374. return
  1375. }
  1376. sn_id1 := strings.Split(SN_List[0], ",")
  1377. if len(sn_id1) != 2 {
  1378. c.Data["json"] = lib.JSONS{Code: 202, Msg: "SN_List Err!"}
  1379. c.ServeJSON()
  1380. return
  1381. }
  1382. sn1, id_str1 := sn_id1[0], sn_id1[1]
  1383. sn_id2 := strings.Split(SN_List[1], ",")
  1384. if len(sn_id2) != 2 {
  1385. c.Data["json"] = lib.JSONS{Code: 202, Msg: "SN_List Err!"}
  1386. c.ServeJSON()
  1387. return
  1388. }
  1389. sn2, id_str2 := sn_id2[0], sn_id2[1]
  1390. List1, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn1, id_str1, StartTime, EndTime, 0, 9999)
  1391. List2, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn2, id_str2, StartTime, EndTime, 0, 9999)
  1392. num := len(List1)
  1393. if len(List2) < len(List1) {
  1394. num = len(List2)
  1395. }
  1396. var list []Task.TaskData_
  1397. ct := copyTime
  1398. for i := 0; i < num; i++ {
  1399. if List1[i].T_time != List2[i].T_time {
  1400. 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}
  1401. c.ServeJSON()
  1402. return
  1403. //ct = ct.Add(time.Second * time.Duration(T_saveT))
  1404. //continue
  1405. }
  1406. T_t := (List1[i].T_t + List2[i].T_t) / 2
  1407. T_rh := (List1[i].T_rh + List2[i].T_rh) / 2
  1408. list = append(list, Task.TaskData_{
  1409. T_sn: CopySN,
  1410. T_id: CopyID,
  1411. T_t: T_t,
  1412. T_rh: T_rh,
  1413. T_time: ct.Format("2006-01-02 15:04:05"),
  1414. })
  1415. ct = ct.Add(time.Second * time.Duration(T_saveT))
  1416. }
  1417. Task.DeleteTaskDataByTimeRange(Task_r.T_task_id, CopySN, CopyID, CopyTime, CopyEndTime)
  1418. go func(TaskDataList []Task.TaskData_, task_id string) {
  1419. for _, taskData := range TaskDataList {
  1420. Task.InsertTaskData(task_id, taskData)
  1421. }
  1422. }(list, Task_r.T_task_id)
  1423. System.Add_UserLogs_T(T_uuid, "数据复制平均值", fmt.Sprintf("数据复制(%s)[%s|%s],复制时间:%s,,时间间隔:%d", T_task_id, StartTime, EndTime, CopyTime, T_saveT), SN_List)
  1424. c.Data["json"] = lib.JSONS{200, "数据复制已提交后台处理!", nil}
  1425. c.ServeJSON()
  1426. return
  1427. }
  1428. // CopyFromPosition 数据拷贝
  1429. func (c *TaskDataController) CopyFromPositionSN() {
  1430. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1431. //if !b_ {
  1432. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1433. // c.ServeJSON()
  1434. // return
  1435. //}
  1436. StartTime := c.GetString("StartTime")
  1437. startTime, ok := lib.TimeStrToTime(StartTime)
  1438. if !ok {
  1439. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1440. c.ServeJSON()
  1441. return
  1442. }
  1443. EndTime := c.GetString("EndTime")
  1444. endTime, ok := lib.TimeStrToTime(EndTime)
  1445. if !ok {
  1446. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1447. c.ServeJSON()
  1448. return
  1449. }
  1450. CopyTime := c.GetString("CopyTime")
  1451. copyTime, ok := lib.TimeStrToTime(CopyTime)
  1452. CopySN := c.GetString("CopySN")
  1453. CopyID := c.GetString("CopyID")
  1454. if !ok {
  1455. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1456. c.ServeJSON()
  1457. return
  1458. }
  1459. CopyEndTime := copyTime.Add(endTime.Sub(startTime)).Format("2006-01-02 15:04:05")
  1460. // 时间间隔 分钟
  1461. T_saveT, _ := c.GetInt("T_saveT")
  1462. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1463. if len(SN_List) != 1 {
  1464. c.Data["json"] = lib.JSONS{202, "SN_List Err!", nil}
  1465. c.ServeJSON()
  1466. return
  1467. }
  1468. T_task_id := c.GetString("T_task_id")
  1469. Task_r, err := NatsServer.Read_Task(T_task_id)
  1470. if err != nil {
  1471. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1472. c.ServeJSON()
  1473. return
  1474. }
  1475. if Task_r.T_collection_state == 2 {
  1476. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1477. c.ServeJSON()
  1478. return
  1479. }
  1480. sn_id := strings.Split(SN_List[0], ",")
  1481. if len(sn_id) != 2 {
  1482. c.Data["json"] = lib.JSONS{202, "SN_List Err!", nil}
  1483. c.ServeJSON()
  1484. return
  1485. }
  1486. sn, id_str := sn_id[0], sn_id[1]
  1487. List, _ := Task.Read_TaskData_ById_List_AES(Task_r.T_task_id, sn, id_str, StartTime, EndTime, 0, 9999)
  1488. Task.DeleteTaskDataByTimeRange(Task_r.T_task_id, CopySN, CopyID, CopyTime, CopyEndTime)
  1489. ct := copyTime
  1490. go func(TaskDataList []Task.TaskData_, task_id string, T_saveT int) {
  1491. for _, taskData := range TaskDataList {
  1492. taskData.T_time = ct.Format("2006-01-02 15:04:05")
  1493. taskData.T_sn = CopySN
  1494. taskData.T_id = CopyID
  1495. Task.InsertTaskData(task_id, taskData)
  1496. ct = ct.Add(time.Second * time.Duration(T_saveT))
  1497. }
  1498. }(List, Task_r.T_task_id, T_saveT)
  1499. System.Add_UserLogs_T(T_uuid, "数据复制", fmt.Sprintf("数据复制(%s)[%s|%s],复制时间:%s,,时间间隔:%d", T_task_id, StartTime, EndTime, CopyTime, T_saveT), SN_List)
  1500. c.Data["json"] = lib.JSONS{200, "数据复制已提交后台处理!", nil}
  1501. c.ServeJSON()
  1502. return
  1503. }
  1504. // 数据偏移到区间内
  1505. func (c *TaskDataController) DataSkewingInterval() {
  1506. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1507. //if !b_ {
  1508. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1509. // c.ServeJSON()
  1510. // return
  1511. //}
  1512. StartTime := c.GetString("StartTime")
  1513. _, ok := lib.TimeStrToTime(StartTime)
  1514. if !ok {
  1515. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1516. c.ServeJSON()
  1517. return
  1518. }
  1519. EndTime := c.GetString("EndTime")
  1520. _, ok = lib.TimeStrToTime(EndTime)
  1521. if !ok {
  1522. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1523. c.ServeJSON()
  1524. return
  1525. }
  1526. TemperatureMin, _ := c.GetFloat("TemperatureMin") // 温度
  1527. TemperatureMax, _ := c.GetFloat("TemperatureMax")
  1528. Tmin, Tmax := TemperatureMin, TemperatureMax
  1529. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1530. T_task_id := c.GetString("T_task_id")
  1531. Task_r, err := NatsServer.Read_Task(T_task_id)
  1532. if err != nil {
  1533. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1534. c.ServeJSON()
  1535. return
  1536. }
  1537. if Task_r.T_collection_state == 2 {
  1538. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1539. c.ServeJSON()
  1540. return
  1541. }
  1542. errMsg := []string{}
  1543. for _, v := range SN_List {
  1544. sn_id := strings.Split(v, ",")
  1545. if len(sn_id) != 2 {
  1546. continue
  1547. }
  1548. sn, id := sn_id[0], sn_id[1]
  1549. min, max := Task.Read_TaskData_T_Min_Max(Task_r.T_task_id, sn, id, StartTime, EndTime)
  1550. if min < Tmin && max > Tmax {
  1551. errMsg = append(errMsg, fmt.Sprintf("【%s】最低温度[%.2f]低于给定的最低温度[%.2f],并且最高温度[%.2f]高于给定的最高温度[%.2f],无法偏移!", id, min, Tmin, max, Tmax))
  1552. continue
  1553. }
  1554. if min > Tmin && max < Tmax {
  1555. continue
  1556. //errMsg = append(errMsg, fmt.Sprintf("【%s】最低温度[%.2f]高于给定最低温度[%.2f],并且最高温度[%.2f]低于给定最高温度[%.2f],无须偏移!", id, min, Tmin, max, Tmax))
  1557. }
  1558. // 判断是否能向上偏移
  1559. if min < Tmin && max < Tmax && (Tmin-min+max) > Tmax {
  1560. errMsg = append(errMsg, fmt.Sprintf("【%s】偏移后最高温度[%.2f]将高于给定的最高温度[%.2f],无法偏移!", id, Tmin-min+max, Tmax))
  1561. continue
  1562. }
  1563. if max > Tmax && min > Tmin && (min-(max-Tmax)) < Tmin {
  1564. errMsg = append(errMsg, fmt.Sprintf("【%s】偏移后最低温度[%.2f]将低于给定的最低温度[%.2f],无法偏移!", id, min-(max-Tmax), Tmin))
  1565. continue
  1566. }
  1567. // 向上偏移
  1568. if min < Tmin && max < Tmax && (Tmin-min+max) <= Tmax {
  1569. Task.UpdateTaskDataTemperatureAndHumidity(Task_r.T_task_id, sn, id, StartTime, EndTime, Tmin-min, 0)
  1570. continue
  1571. }
  1572. // 向下偏移
  1573. if max > Tmax && min > Tmin && (min-(max-Tmax)) >= Tmin {
  1574. Task.UpdateTaskDataTemperatureAndHumidity(Task_r.T_task_id, sn, id, StartTime, EndTime, -(max - Tmax), 0)
  1575. continue
  1576. }
  1577. }
  1578. System.Add_UserLogs_T(T_uuid, "数据偏移到给定范围", fmt.Sprintf("数据偏移到给定范围(%s)[%s|%s],温度[%f-%f]", T_task_id, StartTime, EndTime, TemperatureMin, TemperatureMax), SN_List)
  1579. if len(errMsg) > 0 {
  1580. c.Data["json"] = lib.JSONS{202, "", errMsg}
  1581. c.ServeJSON()
  1582. return
  1583. }
  1584. //反馈成功
  1585. c.Data["json"] = lib.JSONS{200, "调整区间偏移值成功!", nil}
  1586. c.ServeJSON()
  1587. return
  1588. }
  1589. // 等比缩放
  1590. func (c *TaskDataController) DataGeometricScale() {
  1591. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1592. //if !b_ {
  1593. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1594. // c.ServeJSON()
  1595. // return
  1596. //}
  1597. StartTime := c.GetString("StartTime")
  1598. _, ok := lib.TimeStrToTime(StartTime)
  1599. if !ok {
  1600. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1601. c.ServeJSON()
  1602. return
  1603. }
  1604. EndTime := c.GetString("EndTime")
  1605. _, ok = lib.TimeStrToTime(EndTime)
  1606. if !ok {
  1607. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1608. c.ServeJSON()
  1609. return
  1610. }
  1611. Temperature, _ := c.GetFloat("Temperature") // 温度比列
  1612. Humidity, _ := c.GetFloat("Humidity") // 适度比列
  1613. SN_List := strings.Split(strings.Trim(c.GetString("SN_List"), "|"), "|")
  1614. T_task_id := c.GetString("T_task_id")
  1615. Task_r, err := NatsServer.Read_Task(T_task_id)
  1616. if err != nil {
  1617. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1618. c.ServeJSON()
  1619. return
  1620. }
  1621. if Task_r.T_collection_state == 2 {
  1622. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1623. c.ServeJSON()
  1624. return
  1625. }
  1626. errMsg := []string{}
  1627. for _, v := range SN_List {
  1628. sn_id := strings.Split(v, ",")
  1629. if len(sn_id) != 2 {
  1630. continue
  1631. }
  1632. sn, id := sn_id[0], sn_id[1]
  1633. Task.UpdateTaskDataTemperatureAndHumidityByGeometric(Task_r.T_task_id, sn, id, StartTime, EndTime, Temperature, Humidity)
  1634. }
  1635. System.Add_UserLogs_T(T_uuid, "数据等比缩放", fmt.Sprintf("数据等比缩放(%s)[%s|%s],温度[%f-%f]", T_task_id, StartTime, EndTime, Temperature, Humidity), SN_List)
  1636. if len(errMsg) > 0 {
  1637. c.Data["json"] = lib.JSONS{202, "", errMsg}
  1638. c.ServeJSON()
  1639. return
  1640. }
  1641. //反馈成功
  1642. c.Data["json"] = lib.JSONS{200, "数据等比缩放成功!", nil}
  1643. c.ServeJSON()
  1644. return
  1645. }
  1646. // 存档列表
  1647. func (c *TaskDataController) TaskDataCopy_List() {
  1648. var r_jsons lib.R_JSONS
  1649. page, _ := c.GetInt("page")
  1650. if page < 1 {
  1651. page = 1
  1652. }
  1653. page_z, _ := c.GetInt("page_z")
  1654. if page_z < 1 {
  1655. page_z = conf.Page_size
  1656. }
  1657. T_task_id := c.GetString("T_task_id")
  1658. Task_r, err := NatsServer.Read_Task(T_task_id)
  1659. if err != nil {
  1660. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1661. c.ServeJSON()
  1662. return
  1663. }
  1664. if Task_r.T_collection_state == 2 {
  1665. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1666. c.ServeJSON()
  1667. return
  1668. }
  1669. var cnt int64
  1670. List, cnt := Task.Read_TaskCopy_List(Task_r.T_task_id, page, page_z)
  1671. page_size := math.Ceil(float64(cnt) / float64(page_z))
  1672. r_jsons.List = List
  1673. r_jsons.Page = page
  1674. r_jsons.Page_size = int(page_size)
  1675. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  1676. r_jsons.Num = int(cnt)
  1677. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  1678. c.ServeJSON()
  1679. return
  1680. }
  1681. // 添加存档
  1682. func (c *TaskDataController) TaskDataCopy_Add() {
  1683. T_task_id := c.GetString("T_task_id")
  1684. Task_r, err := NatsServer.Read_Task(T_task_id)
  1685. if err != nil {
  1686. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1687. c.ServeJSON()
  1688. return
  1689. }
  1690. if Task_r.T_collection_state == 2 {
  1691. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1692. c.ServeJSON()
  1693. return
  1694. }
  1695. var_ := Task.TaskCopy{
  1696. T_task_id: T_task_id,
  1697. T_time: time.Now().Format("2006-01-02 15:04:05"),
  1698. T_State: 1,
  1699. }
  1700. T_copy_id, is := Task.Add_TaskCopy(var_)
  1701. if !is {
  1702. c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
  1703. c.ServeJSON()
  1704. return
  1705. }
  1706. // 创建数据表
  1707. Task.CREATE_TaskDataCopy(conf.Local_AliasName, T_copy_id)
  1708. // 将数据表存档
  1709. Task.TaskData_Arhiving(T_task_id, T_copy_id)
  1710. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: T_copy_id}
  1711. c.ServeJSON()
  1712. return
  1713. }
  1714. // 删除存档
  1715. func (c *TaskDataController) TaskDataCopy_Del() {
  1716. T_copy_id := c.GetString("T_copy_id")
  1717. r, err := Task.Read_TaskCopy(T_copy_id)
  1718. if err != nil {
  1719. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_copy_id 错误!"}
  1720. c.ServeJSON()
  1721. return
  1722. }
  1723. is := Task.Delete_TaskCopy(r)
  1724. if !is {
  1725. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  1726. c.ServeJSON()
  1727. return
  1728. }
  1729. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: T_copy_id}
  1730. c.ServeJSON()
  1731. return
  1732. }
  1733. // 存档恢复
  1734. func (c *TaskDataController) TaskDataCopy_Recover() {
  1735. T_task_id := c.GetString("T_task_id")
  1736. T_copy_id := c.GetString("T_copy_id")
  1737. Task_r, err := NatsServer.Read_Task(T_task_id)
  1738. if err != nil {
  1739. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1740. c.ServeJSON()
  1741. return
  1742. }
  1743. if Task_r.T_collection_state == 2 {
  1744. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1745. c.ServeJSON()
  1746. return
  1747. }
  1748. _, err = Task.Read_TaskCopy(T_copy_id)
  1749. if err != nil {
  1750. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_copy_id 错误!"}
  1751. c.ServeJSON()
  1752. return
  1753. }
  1754. is := Task.TaskData_Recover(T_task_id, T_copy_id)
  1755. if !is {
  1756. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  1757. c.ServeJSON()
  1758. return
  1759. }
  1760. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: T_copy_id}
  1761. c.ServeJSON()
  1762. return
  1763. }
  1764. // 查询图片生成状态
  1765. func (c *TaskDataController) TaskData_JPGState() {
  1766. T_task_id := c.GetString("T_task_id")
  1767. jpg, is := Task.Redis_TaskDataJPG_Get(T_task_id)
  1768. if !is {
  1769. c.Data["json"] = lib.JSONS{Code: 202, Msg: "暂无图片正在生成"}
  1770. c.ServeJSON()
  1771. return
  1772. }
  1773. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: jpg}
  1774. c.ServeJSON()
  1775. return
  1776. }
  1777. func (c *TaskDataController) TaskData_JPG() {
  1778. StartTime := c.GetString("StartTime")
  1779. if len(StartTime) > 0 {
  1780. _, ok := lib.TimeStrToTime(StartTime)
  1781. if !ok {
  1782. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1783. c.ServeJSON()
  1784. return
  1785. }
  1786. }
  1787. EndTime := c.GetString("EndTime")
  1788. if len(EndTime) > 0 {
  1789. _, ok := lib.TimeStrToTime(EndTime)
  1790. if !ok {
  1791. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误!"}
  1792. c.ServeJSON()
  1793. return
  1794. }
  1795. }
  1796. TemperatureMin, _ := c.GetFloat("TemperatureMin") // 最低温度
  1797. TemperatureMax, _ := c.GetFloat("TemperatureMax") // 最高温度
  1798. T_task_id := c.GetString("T_task_id")
  1799. SN_List := c.GetString("SN_List")
  1800. Task_r, err := NatsServer.Read_Task(T_task_id)
  1801. if err != nil {
  1802. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1803. c.ServeJSON()
  1804. return
  1805. }
  1806. if Task_r.T_collection_state == 2 {
  1807. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1808. c.ServeJSON()
  1809. return
  1810. }
  1811. Task.Redis_TaskDataJPG_Del(T_task_id)
  1812. // 生成图片
  1813. go TaskDataJPG(StartTime, EndTime, T_task_id, SN_List, TemperatureMin, TemperatureMax)
  1814. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  1815. c.ServeJSON()
  1816. return
  1817. }
  1818. // 存档生成图片
  1819. func TaskDataJPG(StartTime, EndTime, T_task_id, snList string, TemperatureMin, TemperatureMax float64) {
  1820. Task.Redis_TaskDataJPG_Set(T_task_id, Task.TaskDataJPG{
  1821. State: 1,
  1822. Msg: "图片生成中",
  1823. Url: "",
  1824. })
  1825. msg := ""
  1826. state := 2
  1827. url := ""
  1828. SN_List := strings.Split(strings.Trim(snList, "|"), "|")
  1829. if len(snList) == 0 {
  1830. List := Task.Read_TaskData_ById_ClassList(T_task_id)
  1831. for _, v := range List {
  1832. SN_List = append(SN_List, fmt.Sprintf("%s,%s", v.T_sn, v.T_id))
  1833. }
  1834. }
  1835. id_List := []string{}
  1836. sn_List := []string{}
  1837. if len(snList) > 0 {
  1838. for _, v := range SN_List {
  1839. sn_id := strings.Split(v, ",")
  1840. if len(sn_id) != 2 {
  1841. return
  1842. }
  1843. id_List = append(id_List, fmt.Sprintf("'%s'", sn_id[1]))
  1844. sn_List = append(sn_List, fmt.Sprintf("'%s'", sn_id[0]))
  1845. }
  1846. }
  1847. ymin, ymax, minTime, maxTime := Task.Read_TaskData_T_Min_Max_Time_Min_Max(T_task_id, sn_List, id_List, StartTime, EndTime)
  1848. xmin, xmax := float64(minTime.Unix()), float64(maxTime.Unix())
  1849. // 创建一个新的绘图
  1850. p := plot.New()
  1851. // 设置绘图标题和标签
  1852. p.Title.Text = "温度折线图"
  1853. //p.Legend.ThumbnailWidth = 5 * vg.Inch
  1854. p.X.Label.Text = "时间"
  1855. p.Y.Label.Text = "温度"
  1856. // 添加最高,最低标准线 用红色虚线标识
  1857. p.Add(lib.HorizontalLine(xmin, xmax, TemperatureMin))
  1858. p.Add(lib.HorizontalLine(xmin, xmax, TemperatureMax))
  1859. var chData = make(chan int, 10)
  1860. var jobGroup sync.WaitGroup
  1861. // 创建温度线
  1862. for i := 0; i < len(SN_List); i++ {
  1863. chData <- 1
  1864. jobGroup.Add(1)
  1865. go func(index int) {
  1866. //go func(index int, wg *sync.WaitGroup, p *plot.Plot) {
  1867. defer func() {
  1868. <-chData // 完成时chan取出1个
  1869. jobGroup.Done() // 完成时将等待组值减1
  1870. }()
  1871. sn_id := strings.Split(SN_List[index], ",")
  1872. if len(sn_id) != 2 {
  1873. return
  1874. }
  1875. sn, id := sn_id[0], sn_id[1]
  1876. list, _ := Task.Read_TaskData_ById_List_AES(T_task_id, sn, id, StartTime, EndTime, 0, 9999)
  1877. if len(list) == 0 {
  1878. return
  1879. }
  1880. pts := make(plotter.XYs, len(list))
  1881. for j, d := range list {
  1882. t, _ := lib.TimeStrToTime(d.T_time)
  1883. pts[j].X = float64(t.Unix())
  1884. pts[j].Y = float64(d.T_t)
  1885. }
  1886. line, err := plotter.NewLine(pts)
  1887. if err != nil {
  1888. return
  1889. }
  1890. line.Color = lib.RandomColor(index)
  1891. p.Add(line)
  1892. }(i)
  1893. }
  1894. jobGroup.Wait()
  1895. if ymax < 8 {
  1896. ymax = 8
  1897. }
  1898. if ymin > 0 {
  1899. ymin = 0
  1900. }
  1901. p.Y.Min, p.Y.Max = ymin, ymax
  1902. p.X.Min, p.X.Max = xmin, xmax
  1903. p.Y.Tick.Marker = lib.CommaTicks{}
  1904. //p.X.Tick.Marker = plot.TimeTicks{Format: "2006-01-02 15:04:05"}
  1905. p.X.Tick.Marker = lib.TimeTicks{}
  1906. p.X.Tick.Label.Rotation = math.Pi / 5
  1907. p.X.Tick.Label.YAlign = draw.YCenter
  1908. p.X.Tick.Label.XAlign = draw.XRight
  1909. filename := "jpg" + time.Now().Format("20060102150405")
  1910. // 保存文件
  1911. if err := p.Save(10*vg.Inch, 4*vg.Inch, "ofile/"+filename+".jpg"); err != nil {
  1912. state = 3
  1913. msg = "图片生成失败"
  1914. logs.Error(lib.FuncName(), "生成图片失败", err)
  1915. }
  1916. if !lib.Pload_qiniu("ofile/"+filename+".jpg", "ofile/"+filename+".jpg") {
  1917. state = 3
  1918. msg = "图片上传七牛云失败"
  1919. logs.Error(lib.FuncName(), "上传七牛云失败")
  1920. }
  1921. //删除目录
  1922. os.Remove("ofile/" + filename + ".jpg")
  1923. if len(msg) == 0 {
  1924. msg = "图片生成成功"
  1925. url = "https://bzdcoldverifyoss.baozhida.cn/" + "ofile/" + filename + ".jpg"
  1926. }
  1927. Task.Redis_TaskDataJPG_Set(T_task_id, Task.TaskDataJPG{
  1928. State: state,
  1929. Msg: msg,
  1930. Url: url,
  1931. })
  1932. }
  1933. func (c *TaskDataController) Certificate_List() {
  1934. var r_jsons lib.R_JSONS
  1935. T_task_id := c.GetString("T_task_id")
  1936. Task_r, err := NatsServer.Read_Task(T_task_id)
  1937. if err != nil {
  1938. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  1939. c.ServeJSON()
  1940. return
  1941. }
  1942. if Task_r.T_collection_state == 2 {
  1943. c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
  1944. c.ServeJSON()
  1945. return
  1946. }
  1947. List, err := Certificate.Read_Certificate_List(T_task_id)
  1948. if err != nil {
  1949. c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询失败!"}
  1950. c.ServeJSON()
  1951. return
  1952. }
  1953. r_jsons.List = List
  1954. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  1955. c.ServeJSON()
  1956. return
  1957. }