TaskData.go 69 KB

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