DeviceController_copy.txt 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278
  1. package controllers
  2. //
  3. //import (
  4. // "ColdP_server/conf"
  5. // "ColdP_server/controllers/MqttServer"
  6. // "ColdP_server/controllers/lib"
  7. // "ColdP_server/logs"
  8. // "ColdP_server/models/Company"
  9. // "ColdP_server/models/Device"
  10. // "ColdP_server/models/Warning"
  11. // "context"
  12. // "encoding/json"
  13. // "fmt"
  14. // beego "github.com/beego/beego/v2/server/web"
  15. // "io"
  16. // "log"
  17. // "math"
  18. // "strconv"
  19. // "strings"
  20. // "sync"
  21. // "time"
  22. //)
  23. //
  24. //// DeviceController 设备管理页面
  25. //type DeviceController struct {
  26. // beego.Controller
  27. //}
  28. //
  29. //// DeviceManagerHtml 返回页面
  30. //func (c *DeviceController) DeviceManagerHtml() {
  31. // //验证是否登录
  32. // is, admin := lib.VerificationController(&c.Controller)
  33. // if !is {
  34. // return
  35. // }
  36. //
  37. // //类名列表
  38. // classList := Company.Read_CompanyClass_All(admin.T_pid, "")
  39. // c.Data["Class_List"] = classList
  40. // c.TplName = "Device/Device.html"
  41. //}
  42. //
  43. //func (c *DeviceController) DeviceList() {
  44. // tName := c.GetString("deviceName") // 设备名称
  45. // page, _ := c.GetInt64("currentPage") // 当前页码
  46. // tClassify, _ := c.GetInt("deviceClass") // 设备分类
  47. //
  48. // is, admin := lib.VerificationController(&c.Controller)
  49. // fmt.Println("当前用户的PID为:", admin.T_pid)
  50. // if !is {
  51. // // 用户未登录
  52. // c.Data["json"] = lib.JSONS{202, "身份认证失效", nil}
  53. // c.ServeJSON()
  54. // return
  55. // }
  56. //
  57. // device_list, count := Device.Read_DeviceSensor_List_T_ClassOr(admin.T_pid, tClassify, tName, tName, -1, int(page), conf.Page_size)
  58. // var pageCount int
  59. // if (int(count) % conf.Page_size) != 0 {
  60. // pageCount = int(count) / conf.Page_size
  61. // pageCount++
  62. // }
  63. //
  64. // var wg sync.WaitGroup
  65. // for i := range device_list {
  66. // wg.Add(1)
  67. // go func(deviceList *Device.DeviceSensor_) {
  68. // defer func() {
  69. // if r := recover(); r != nil {
  70. // logs.Debug("协程出现异常: %v", r)
  71. // }
  72. // }()
  73. // defer wg.Done()
  74. //
  75. // t := Device.Read_DeviceData(deviceList.T_sn, deviceList.T_id)
  76. // err2, m := Device.ReadDeviceSensorParameter(deviceList.T_Sp)
  77. // if err2 != nil {
  78. // logs.Error("Error getting device sensor parameter for SN: %s, %v", deviceList.T_sn, err2)
  79. // }
  80. // topicSub := fmt.Sprintf("/sub/%s", deviceList.T_sn)
  81. // topicPub := fmt.Sprintf("/pub/%s", deviceList.T_sn)
  82. // mqttId := Device.ReadDeviceMqttId(deviceList.T_sn)
  83. // cli, err := MqttServer.GetMqttClient(mqttId)
  84. // if err != nil {
  85. // logs.Error("Error getting MQTT client for SN: %s, %v", deviceList.T_sn, err)
  86. // return
  87. // }
  88. // defer cli.Disconnect()
  89. // defer cli.Terminate()
  90. //
  91. // deviceList.T_tDeviation = 1201
  92. // deviceList.T_RhDeviation = 1201
  93. //
  94. // err = cli.Subscribe(&client.SubscribeOptions{
  95. // SubReqs: []*client.SubReq{
  96. // &client.SubReq{
  97. // TopicFilter: []byte(topicSub),
  98. // QoS: mqtt.QoS0,
  99. // Handler: func(topicName, message []byte) {
  100. // log.Println("接收到数据", string(message))
  101. // var devi Device.Deviation
  102. // err = json.Unmarshal(message, &devi)
  103. // if err != nil {
  104. // logs.Error("json序列化失败 SN: %s, %v", deviceList.T_sn, err)
  105. // } else {
  106. // if len(devi.Data) > 0 {
  107. // deviceList.T_tDeviation = float32(devi.Data[0].T)
  108. // deviceList.T_RhDeviation = float32(devi.Data[0].H)
  109. // }
  110. // }
  111. // },
  112. // },
  113. // },
  114. // })
  115. // if err != nil {
  116. // logs.Error("Error subscribing to topic for SN: %s, %v", deviceList.T_sn, err)
  117. // return
  118. // }
  119. //
  120. // ints := []int{deviceList.T_id}
  121. // pubData, err := json.Marshal(MqttServer.Deviation_Pub{
  122. // Sn: deviceList.T_sn,
  123. // Type: 7,
  124. // Mid: time.Now().Unix(),
  125. // Data: ints,
  126. // })
  127. // if err != nil {
  128. // logs.Error("Error marshalling JSON for SN: %s, %v", deviceList.T_sn, err)
  129. // return
  130. // }
  131. // fmt.Println("发送数据:", string(pubData))
  132. // if err := MqttServer.PubMqttMessage(cli, topicPub, pubData); err != nil {
  133. // logs.Error("Error publishing MQTT message for SN: %s, %v", deviceList.T_sn, err)
  134. // return
  135. // }
  136. //
  137. // time.Sleep(2 * time.Second)
  138. // deviceList.T_Tlower = m.T_Tlower
  139. // deviceList.T_Tupper = m.T_Tupper
  140. // deviceList.T_RHlower = m.T_RHlower
  141. // deviceList.T_RHupper = m.T_RHupper
  142. // deviceList.T_t = t.T_t
  143. // deviceList.T_rh = t.T_rh
  144. // }(&device_list[i])
  145. // }
  146. //
  147. // wg.Wait()
  148. // c.Data["json"] = lib.PageHelper{int(count), pageCount, int(page), int(page) >= pageCount, page <= 1, device_list}
  149. // c.ServeJSON()
  150. // return
  151. //}
  152. //
  153. ////func (c *DeviceController) SetDeviceDataZero() {
  154. //// is, admin := lib.VerificationController(&c.Controller)
  155. //// if !is {
  156. //// c.Data["json"] = lib.JSONS{Code: 202, Msg: "用户未登录", Data: nil}
  157. //// c.ServeJSON()
  158. //// return
  159. //// }
  160. ////
  161. //// id, err := Device.Read_DeviceSensor_ALL_T_sn_T_id(admin.T_pid)
  162. //// if err != nil {
  163. //// c.Data["json"] = lib.JSONS{Code: 201, Msg: "获取设备列表失败", Data: nil}
  164. //// c.ServeJSON()
  165. //// return
  166. //// }
  167. ////
  168. //// data := make([]MqttServer.Deviation_Sub, 0)
  169. //// for _, v := range id {
  170. //// data = append(data, MqttServer.Deviation_Sub{
  171. //// Sn: v.T_sn,
  172. //// Data: []MqttServer.Deviation_Sub_Data{
  173. //// {Id: v.T_id, H: 0, T: 0},
  174. //// },
  175. //// })
  176. //// }
  177. ////
  178. //// var wg sync.WaitGroup
  179. //// successfulSns := make(map[string]bool) // 记录成功的SN
  180. //// mutex := &sync.Mutex{} // 保护对successfulSns的访问
  181. //// responseChan := make(chan string, len(data))
  182. //// failSn := make([]string, 0)
  183. //// defer close(responseChan)
  184. ////
  185. //// handleResult := func(sn string, success bool) {
  186. //// mutex.Lock()
  187. //// defer mutex.Unlock()
  188. //// if success {
  189. //// successfulSns[sn] = true
  190. //// } else {
  191. //// failSn = append(failSn, sn)
  192. //// }
  193. //// }
  194. ////
  195. //// for _, v := range data {
  196. //// wg.Add(1)
  197. //// go func(v MqttServer.Deviation_Sub) {
  198. //// defer wg.Done()
  199. //// v.Type = 8
  200. //// v.Mid = int(time.Now().Unix())
  201. //// mqttId := Device.ReadDeviceMqttId(v.Sn)
  202. //// client, err := MqttServer.GetMqttClient(mqttId)
  203. //// if err != nil {
  204. //// log.Printf("Error getting MQTT client for SN: %s, %v", v.Sn, err)
  205. //// handleResult(v.Sn, false)
  206. //// return
  207. //// }
  208. //// defer client.Disconnect()
  209. //// defer client.Terminate()
  210. //// msgBytes, err := json.Marshal(v)
  211. //// if err != nil {
  212. //// log.Printf("Error marshalling JSON for SN: %s, %v", v.Sn, err)
  213. //// handleResult(v.Sn, false)
  214. //// return
  215. //// }
  216. ////
  217. //// subTopic := fmt.Sprintf("/sub/%s", v.Sn)
  218. //// err = MqttServer.Subscript(client, subTopic, responseChan, nil)
  219. //// if err != nil {
  220. //// log.Printf("Error subscribing to topic for SN: %s, %v", v.Sn, err)
  221. //// handleResult(v.Sn, false)
  222. //// return
  223. //// }
  224. ////
  225. //// pubTopic := fmt.Sprintf("/pub/%s", v.Sn)
  226. //// for i := 0; i < 2; i++ {
  227. //// time.Sleep(time.Second * time.Duration(i+1))
  228. //// if err := MqttServer.PubMqttMessage(client, pubTopic, msgBytes); err != nil {
  229. //// log.Printf("设备参数设置失败: %s, %v", v.Sn, err)
  230. //// continue
  231. //// }
  232. //// break // 成功后跳出循环
  233. //// }
  234. ////
  235. //// select {
  236. //// case vs := <-responseChan:
  237. //// fmt.Println("channel收到数据:", vs)
  238. //// handleResult(v.Sn, true)
  239. //// case <-time.After(3 * time.Second):
  240. //// log.Printf("连接设备超时: %s", v.Sn)
  241. //// handleResult(v.Sn, false)
  242. //// }
  243. //// }(v)
  244. //// }
  245. ////
  246. //// wg.Wait()
  247. ////
  248. //// if len(failSn) > 0 {
  249. //// c.Data["json"] = lib.JSONS{Code: 1201, Msg: "部分设置失败", Data: failSn}
  250. //// } else {
  251. //// c.Data["json"] = lib.JSONS{Code: 200, Msg: "设置偏差值成功!", Data: nil}
  252. //// }
  253. //// c.ServeJSON()
  254. ////}
  255. //
  256. //// 辅助函数用于处理成功的情况
  257. //func handleSuccess(sn string, mutex *sync.Mutex, successfulSns map[string]bool) {
  258. // mutex.Lock()
  259. // defer mutex.Unlock()
  260. // successfulSns[sn] = true // 标记为成功
  261. //}
  262. //
  263. //// 辅助函数用于处理失败的情况
  264. //func handleFailure(sn string, failSn *[]string, mutex *sync.Mutex, successfulSns map[string]bool) {
  265. // mutex.Lock()
  266. // defer mutex.Unlock()
  267. // if !successfulSns[sn] {
  268. // *failSn = append(*failSn, sn)
  269. // }
  270. //}
  271. //
  272. //// CompanyClass 获取公司设备类目
  273. //func (c *DeviceController) CompanyClass() {
  274. // is, admin := lib.VerificationController(&c.Controller)
  275. // if !is {
  276. // c.Data["json"] = lib.JSONS{202, "用户未登录", nil}
  277. // c.ServeJSON()
  278. // return
  279. // }
  280. //
  281. // //类名列表
  282. // classList := Company.Read_CompanyClass_All(admin.T_pid, "")
  283. // c.Data["json"] = classList
  284. // c.ServeJSON()
  285. //}
  286. //
  287. //// DataRepeat 数据重传
  288. //func (c *DeviceController) DataRepeat() {
  289. // b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  290. // if !b_ {
  291. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  292. // c.ServeJSON()
  293. // return
  294. // }
  295. //
  296. // t := MqttServer.DataRepeat_C{}
  297. // bytes, _ := io.ReadAll(c.Ctx.Request.Body)
  298. // json.Unmarshal(bytes, &t)
  299. // fmt.Println("浏览器接收数据:", t)
  300. // s, _ := time.Parse("2006-01-02 15:04:05", t.StartTime)
  301. // e, _ := time.Parse("2006-01-02 15:04:05", t.EndTime)
  302. // var wg sync.WaitGroup
  303. // successfulSns := make(map[string]bool) // 记录成功的SN
  304. // mutex := &sync.Mutex{} // 保护对successfulSns的访问
  305. // responseChan := make(chan string, len(t.Sns))
  306. // failSn := make([]string, 0)
  307. // done := make(chan struct{})
  308. // defer close(responseChan)
  309. // defer close(done)
  310. // handleResult := func(sn string, success bool) {
  311. // mutex.Lock()
  312. // defer mutex.Unlock()
  313. // if success {
  314. // successfulSns[sn] = true
  315. // } else {
  316. // failSn = append(failSn, sn)
  317. // }
  318. // }
  319. // // 发送MQTT
  320. // for k, v := range t.Sns {
  321. // wg.Add(1)
  322. // go func(k string, v []int) {
  323. // defer wg.Done()
  324. // topic := fmt.Sprintf("/pub/%s", k)
  325. // repeatPub := MqttServer.DataRepeat_Pub{Sn: k, Type: 9, Mid: time.Now().Unix(), Data: MqttServer.DataRepeat_Pub_Data{Start: s.Unix(), End: e.Unix(), Id: v}}
  326. // msg, _ := json.Marshal(repeatPub)
  327. // mqttId := strings.Split(Device.ReadDeviceMqttId(k), "\"")[0]
  328. //
  329. // cli, err := MqttServer.GetMqttClient(mqttId)
  330. // if err != nil {
  331. // log.Printf("Error getting MQTT client for SN: %s, %v", k, err)
  332. // handleResult(k, false)
  333. // return
  334. // }
  335. // defer cli.Disconnect()
  336. // defer cli.Terminate()
  337. // topicSub := fmt.Sprintf("/sub/%s", k)
  338. // //err = MqttServer.Subscript(cli, subTopic, responseChan, done)
  339. // //if err != nil {
  340. // // log.Printf("Error subscribing to topic for SN: %s, %v", k, err)
  341. // // handleResult(k, false)
  342. // // return
  343. // //}
  344. // err = cli.Subscribe(&client.SubscribeOptions{
  345. // SubReqs: []*client.SubReq{
  346. // &client.SubReq{
  347. // TopicFilter: []byte(topicSub),
  348. // QoS: mqtt.QoS1,
  349. // Handler: func(topicName, message []byte) {
  350. // log.Println("接收到数据", string(message))
  351. // var devi Device.Deviation
  352. // err = json.Unmarshal(message, &devi)
  353. // if err != nil {
  354. // logs.Error("json序列化失败")
  355. // } else {
  356. // handleResult(k, true)
  357. // }
  358. // },
  359. // },
  360. // },
  361. // })
  362. //
  363. // if err := MqttServer.PubMqttMessage(cli, topic, msg); err != nil {
  364. // log.Printf("Error publishing MQTT message for SN: %s, %v", k, err)
  365. // //c.Data["json"] = lib.JSONS{Code: 0, Msg: "设置失败", Data: k}
  366. // return
  367. // }
  368. // time.Sleep(2 * time.Second)
  369. // }(k, v)
  370. // }
  371. // wg.Wait()
  372. // if len(failSn) > 0 {
  373. // c.Data["json"] = lib.JSONS{Code: 1201, Msg: "部分重传失败", Data: failSn}
  374. // } else {
  375. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "重传数据成功!", Data: nil}
  376. // }
  377. // c.ServeJSON()
  378. //}
  379. //
  380. //// ReadDeviation 读取偏差值
  381. ////
  382. //// func (c *DeviceController) ReadDeviation() {
  383. //// b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  384. //// if !b_ {
  385. //// c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  386. //// c.ServeJSON()
  387. //// return
  388. //// }
  389. ////
  390. //// t := make(map[string][]int)
  391. //// bytes, err := io.ReadAll(c.Ctx.Request.Body)
  392. //// if err != nil {
  393. //// log.Printf("Error reading request body: %v", err)
  394. //// c.Data["json"] = lib.JSONS{Code: 400, Msg: "Bad Request"}
  395. //// c.ServeJSON()
  396. //// return
  397. //// }
  398. //// if err := json.Unmarshal(bytes, &t); err != nil {
  399. //// log.Printf("Error unmarshalling JSON: %v", err)
  400. //// c.Data["json"] = lib.JSONS{Code: 400, Msg: "Bad Request"}
  401. //// c.ServeJSON()
  402. //// return
  403. //// }
  404. //// fmt.Println("浏览器接收数据:", t)
  405. ////
  406. //// // MQTT发送
  407. //// fmt.Println("发送MQTT t:", t)
  408. ////
  409. //// var deviceRepeatData []string
  410. //// var errors []string
  411. //// for k, v := range t {
  412. //// topicSub := fmt.Sprintf("/sub/%s", k)
  413. //// topicPub := fmt.Sprintf("/pub/%s", k)
  414. //// mqttId := Device.ReadDeviceMqttId(k)
  415. ////
  416. //// cli, err := MqttServer.GetMqttClient(mqttId)
  417. //// if err != nil {
  418. //// log.Printf("Error getting MQTT client for SN: %s, %v", k, err)
  419. //// errors = append(errors, fmt.Sprintf("设备: %s 获取MQTT客户端失败 %v", k, err))
  420. //// continue
  421. //// }
  422. //// defer cli.Disconnect()
  423. //// defer cli.Terminate()
  424. //// err = cli.Subscribe(&client.SubscribeOptions{
  425. //// SubReqs: []*client.SubReq{
  426. //// &client.SubReq{
  427. //// TopicFilter: []byte(topicSub),
  428. //// QoS: mqtt.QoS1,
  429. //// Handler: func(topicName, message []byte) {
  430. //// log.Println("接收到数据", string(message))
  431. //// var devi Device.Deviation
  432. //// err = json.Unmarshal(message, &devi)
  433. //// if err != nil {
  434. //// logs.Error("json序列化失败")
  435. //// } else {
  436. //// deviceRepeatData = append(deviceRepeatData, string(message))
  437. //// }
  438. //// },
  439. //// },
  440. //// },
  441. //// })
  442. //// pubData, err := json.Marshal(MqttServer.Deviation_Pub{
  443. //// Sn: k,
  444. //// Type: 7,
  445. //// Mid: time.Now().Unix(),
  446. //// Data: v,
  447. //// })
  448. //// if err != nil {
  449. //// log.Printf("Error marshalling JSON for SN: %s, %v", k, err)
  450. //// errors = append(errors, fmt.Sprintf("设备: %s 序列化消息失败 %v", k, err))
  451. //// continue
  452. //// }
  453. ////
  454. //// if err := MqttServer.PubMqttMessage(cli, topicPub, pubData); err != nil {
  455. //// log.Printf("Error publishing MQTT message for SN: %s, %v", k, err)
  456. //// errors = append(errors, fmt.Sprintf("设备: %s 发布消息失败 %v", k, err))
  457. //// continue
  458. //// }
  459. //// }
  460. //// time.Sleep(2 * time.Second)
  461. //// if len(errors) > 0 {
  462. //// c.Data["json"] = lib.JSONS{Code: 500, Msg: "部分设备操作失败", Data: errors}
  463. //// } else {
  464. //// c.Data["json"] = lib.JSONS{Code: 200, Msg: "偏差值上传成功", Data: deviceRepeatData}
  465. //// }
  466. //// c.ServeJSON()
  467. //// }
  468. //func (c *DeviceController) ReadDeviation() {
  469. // // 用户令牌验证
  470. // b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  471. // if !b_ {
  472. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  473. // c.ServeJSON()
  474. // return
  475. // }
  476. //
  477. // t := make(map[string][]int)
  478. // bytes, err := io.ReadAll(c.Ctx.Request.Body)
  479. // if err != nil {
  480. // log.Printf("Error reading request body: %v", err)
  481. // c.Data["json"] = lib.JSONS{Code: 400, Msg: "Bad Request"}
  482. // c.ServeJSON()
  483. // return
  484. // }
  485. // if err := json.Unmarshal(bytes, &t); err != nil {
  486. // log.Printf("Error unmarshalling JSON: %v", err)
  487. // c.Data["json"] = lib.JSONS{Code: 400, Msg: "Bad Request"}
  488. // c.ServeJSON()
  489. // return
  490. // }
  491. // fmt.Println("浏览器接收数据:", t)
  492. //
  493. // // 设置整体操作的超时时间,例如设置为5秒,可根据实际情况调整
  494. // ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  495. // defer cancel()
  496. //
  497. // var deviceRepeatData []string
  498. // var errors []string
  499. // for k, v := range t {
  500. // topicSub := fmt.Sprintf("/sub/%s", k)
  501. // topicPub := fmt.Sprintf("/pub/%s", k)
  502. // mqttId := Device.ReadDeviceMqttId(k)
  503. //
  504. // // 获取MQTT客户端实例,设置超时控制
  505. // _, cancelGetClient := context.WithTimeout(ctx, 2*time.Second)
  506. // cli, err := MqttServer.GetMqttClient(mqttId)
  507. // if err != nil {
  508. // log.Printf("Error getting MQTT client for SN: %s, %v", k, err)
  509. // errors = append(errors, fmt.Sprintf("设备: %s 获取MQTT客户端失败 %v", k, err))
  510. // continue
  511. // }
  512. // defer cli.Disconnect()
  513. // defer cli.Terminate()
  514. // cancelGetClient()
  515. //
  516. // // 订阅主题操作,设置超时控制
  517. // _, cancelSubscribe := context.WithTimeout(ctx, 3*time.Second)
  518. // err = cli.Subscribe(&client.SubscribeOptions{
  519. // SubReqs: []*client.SubReq{
  520. // &client.SubReq{
  521. // TopicFilter: []byte(topicSub),
  522. // QoS: mqtt.QoS1,
  523. // Handler: func(topicName, message []byte) {
  524. // log.Println("接收到数据", string(message))
  525. // var devi Device.Deviation
  526. // err = json.Unmarshal(message, &devi)
  527. // if err != nil {
  528. // logs.Error("json序列化失败")
  529. // } else {
  530. // if devi.Type != 7 {
  531. // fmt.Println("devi", devi)
  532. // errors = append(errors, fmt.Sprintf("设备: %s 订阅主题失败 %v", k, err))
  533. // } else {
  534. // deviceRepeatData = append(deviceRepeatData, string(message))
  535. // }
  536. // }
  537. // },
  538. // },
  539. // },
  540. // })
  541. // if err != nil {
  542. // log.Printf("Error subscribing MQTT topic for SN: %s, %v", k, err)
  543. // errors = append(errors, fmt.Sprintf("设备: %s 订阅主题失败 %v", k, err))
  544. // continue
  545. // }
  546. // cancelSubscribe()
  547. //
  548. // // 发布消息操作,设置超时控制
  549. // _, cancelPublish := context.WithTimeout(ctx, 3*time.Second)
  550. // pubData, err := json.Marshal(MqttServer.Deviation_Pub{
  551. // Sn: k,
  552. // Type: 7,
  553. // Mid: time.Now().Unix(),
  554. // Data: v,
  555. // })
  556. // if err != nil {
  557. // log.Printf("Error marshalling JSON for SN: %s, %v", k, err)
  558. // errors = append(errors, fmt.Sprintf("设备: %s 序列化消息失败 %v", k, err))
  559. // continue
  560. // }
  561. //
  562. // if err := MqttServer.PubMqttMessage(cli, topicPub, pubData); err != nil {
  563. // log.Printf("Error publishing MQTT message for SN: %s, %v", k, err)
  564. // errors = append(errors, fmt.Sprintf("设备: %s 发布消息失败 %v", k, err))
  565. // continue
  566. // }
  567. // cancelPublish()
  568. // }
  569. // time.Sleep(2 * time.Second)
  570. // fmt.Println("deviceRepeatData", deviceRepeatData)
  571. // // 根据是否有错误情况返回相应结果
  572. // if len(errors) > 0 || len(deviceRepeatData) == 0 {
  573. // c.Data["json"] = lib.JSONS{Code: 500, Msg: "读取参数失败-无法通信", Data: errors}
  574. // c.ServeJSON()
  575. // return
  576. // } else {
  577. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "读取参数成功", Data: deviceRepeatData}
  578. // c.ServeJSON()
  579. // }
  580. //}
  581. //
  582. //// WriteDeviation 设置偏差值
  583. //func (c *DeviceController) WriteDeviation() {
  584. // b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  585. // if !b_ {
  586. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  587. // c.ServeJSON()
  588. // return
  589. // }
  590. //
  591. // bytes, _ := io.ReadAll(c.Ctx.Request.Body)
  592. // fmt.Println("请求json:", string(bytes))
  593. //
  594. // data := make([]MqttServer.Deviation_Sub, 0)
  595. // if err := json.Unmarshal(bytes, &data); err != nil {
  596. // log.Printf("Error unmarshalling JSON: %v", err)
  597. // c.Data["json"] = lib.JSONS{Code: 400, Msg: "mqtt请求失败"}
  598. // c.ServeJSON()
  599. // return
  600. // }
  601. // var wg sync.WaitGroup
  602. // successfulSns := make(map[string]bool) // 记录成功的SN
  603. // mutex := &sync.Mutex{} // 保护对successfulSns的访问
  604. // failSn := make([]string, 0)
  605. // handleResult := func(sn string, success bool) {
  606. // mutex.Lock()
  607. // defer mutex.Unlock()
  608. // if success {
  609. // successfulSns[sn] = true
  610. // } else {
  611. // failSn = append(failSn, sn)
  612. // }
  613. // }
  614. // // 处理每个设备的数据
  615. // for _, v := range data {
  616. // wg.Add(1)
  617. // go func(v MqttServer.Deviation_Sub) {
  618. // defer wg.Done()
  619. // v.Type = 8
  620. // v.Mid = int(time.Now().Unix())
  621. // var devi Device.Deviation
  622. // mqttId := Device.ReadDeviceMqttId(v.Sn)
  623. // cli, err := MqttServer.GetMqttClient(mqttId)
  624. // if err != nil {
  625. // log.Printf("Error getting MQTT client for SN: %s, %v", v.Sn, err)
  626. // handleResult(v.Sn, false)
  627. // return
  628. // }
  629. // defer cli.Disconnect()
  630. // defer cli.Terminate()
  631. // msgBytes, err := json.Marshal(v)
  632. // if err != nil {
  633. // log.Printf("Error marshalling JSON for SN: %s, %v", v.Sn, err)
  634. // handleResult(v.Sn, false)
  635. // return
  636. // }
  637. // topicSub := fmt.Sprintf("/sub/%s", v.Sn)
  638. // err = cli.Subscribe(&client.SubscribeOptions{
  639. // SubReqs: []*client.SubReq{
  640. // &client.SubReq{
  641. // TopicFilter: []byte(topicSub),
  642. // QoS: mqtt.QoS1,
  643. // Handler: func(topicName, message []byte) {
  644. // log.Println("接收到数据", string(message))
  645. //
  646. // err = json.Unmarshal(message, &devi)
  647. // if err != nil {
  648. // logs.Error("json序列化失败")
  649. // } else {
  650. // handleResult(v.Sn, true)
  651. // }
  652. // },
  653. // },
  654. // },
  655. // })
  656. // if err := MqttServer.PubMqttMessage(cli, fmt.Sprintf("/pub/%s", v.Sn), msgBytes); err != nil {
  657. // log.Printf("设备参数设置失败: %s, %v", v.Sn, err)
  658. // failSn = append(failSn, v.Sn)
  659. // }
  660. // time.Sleep(3 * time.Second)
  661. // if len(devi.Data) == 0 {
  662. // failSn = append(failSn, v.Sn)
  663. // }
  664. // }(v)
  665. // }
  666. // wg.Wait()
  667. // if len(failSn) > 0 {
  668. // c.Data["json"] = lib.JSONS{Code: 1201, Msg: "部分设置失败", Data: failSn}
  669. // } else {
  670. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "设置偏差值成功!", Data: nil}
  671. // }
  672. // c.ServeJSON()
  673. //}
  674. //
  675. //// WriteDeviationAll 批量设置偏差值
  676. //func (c *DeviceController) WriteDeviationAll() {
  677. // b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  678. // if !b_ {
  679. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  680. // c.ServeJSON()
  681. // return
  682. // }
  683. //
  684. // bytes, _ := io.ReadAll(c.Ctx.Request.Body)
  685. // fmt.Println("请求json:", string(bytes))
  686. //
  687. // var data MqttServer.Deviation_SubAll
  688. // if err := json.Unmarshal(bytes, &data); err != nil {
  689. // log.Printf("Error unmarshalling JSON: %v", err)
  690. // c.Data["json"] = lib.JSONS{Code: 400, Msg: "mqtt请求失败"}
  691. // c.ServeJSON()
  692. // return
  693. // }
  694. // var wg sync.WaitGroup
  695. // successfulSns := make(map[string]bool) // 记录成功的SN
  696. // mutex := &sync.Mutex{} // 保护对successfulSns的访问
  697. // failSn := make([]string, 0)
  698. // handleResult := func(sn string, success bool) {
  699. // mutex.Lock()
  700. // defer mutex.Unlock()
  701. // if success {
  702. // successfulSns[sn] = true
  703. // } else {
  704. // failSn = append(failSn, sn)
  705. // }
  706. // }
  707. // // 处理每个设备的数据
  708. // for i, sn := range data.Sn {
  709. // subData := data.Data[i]
  710. // wg.Add(1)
  711. // go func(sn string, subData MqttServer.Deviation_Sub_Data) {
  712. // defer wg.Done()
  713. // sub_data := make([]MqttServer.Deviation_Sub_Data, 0)
  714. // sub_data = append(sub_data, subData)
  715. // var devi Device.Deviation
  716. // v := MqttServer.Deviation_Sub{
  717. // Type: 8,
  718. // Sn: sn,
  719. // Mid: int(time.Now().Unix()),
  720. // Data: sub_data,
  721. // }
  722. // mqttId := Device.ReadDeviceMqttId(v.Sn)
  723. // cli, err := MqttServer.GetMqttClient(mqttId)
  724. // if err != nil {
  725. // log.Printf("Error getting MQTT client for SN: %s, %v", v.Sn, err)
  726. // handleResult(v.Sn, false)
  727. // return
  728. // }
  729. // defer cli.Disconnect()
  730. // defer cli.Terminate()
  731. //
  732. // msgBytes, err := json.Marshal(v)
  733. // if err != nil {
  734. // log.Printf("Error marshalling JSON for SN: %s, %v", v.Sn, err)
  735. // handleResult(v.Sn, false)
  736. // return
  737. // }
  738. // topicSub := fmt.Sprintf("/sub/%s", v.Sn)
  739. // err = cli.Subscribe(&client.SubscribeOptions{
  740. // SubReqs: []*client.SubReq{
  741. // &client.SubReq{
  742. // TopicFilter: []byte(topicSub),
  743. // QoS: mqtt.QoS1,
  744. // Handler: func(topicName, message []byte) {
  745. // log.Println("批量接收到值", string(message))
  746. // err = json.Unmarshal(message, &devi)
  747. // if err != nil {
  748. // logs.Error("json序列化失败")
  749. // } else {
  750. //
  751. // handleResult(v.Sn, true)
  752. // }
  753. // },
  754. // },
  755. // },
  756. // })
  757. // if err := MqttServer.PubMqttMessage(cli, fmt.Sprintf("/pub/%s", v.Sn), msgBytes); err != nil {
  758. // log.Printf("设备参数设置失败: %s, %v", v.Sn, err)
  759. // failSn = append(failSn, v.Sn)
  760. // }
  761. // time.Sleep(3 * time.Second)
  762. // if len(devi.Data) == 0 {
  763. // failSn = append(failSn, v.Sn)
  764. // }
  765. // }(sn, subData)
  766. // }
  767. // wg.Wait()
  768. // if len(failSn) > 0 {
  769. // c.Data["json"] = lib.JSONS{Code: 1201, Msg: "部分设置失败", Data: failSn}
  770. // } else {
  771. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "设置偏差值成功!", Data: nil}
  772. // }
  773. // c.ServeJSON()
  774. //}
  775. //
  776. //// ReadSensor 读取偏差值
  777. //func (c *DeviceController) ReadSensor() {
  778. // b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  779. // if !b_ {
  780. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  781. // c.ServeJSON()
  782. // return
  783. // }
  784. //
  785. // t := make(map[string][]int)
  786. // bytes, _ := io.ReadAll(c.Ctx.Request.Body)
  787. // if err := json.Unmarshal(bytes, &t); err != nil {
  788. // log.Printf("Error unmarshalling JSON: %v", err)
  789. // c.Data["json"] = lib.JSONS{Code: 400, Msg: "Bad Request"}
  790. // c.ServeJSON()
  791. // return
  792. // }
  793. // fmt.Println("浏览器接收数据:", t)
  794. //
  795. // // MQTT发送
  796. // fmt.Println("发送MQTT t:", t)
  797. // deviation := make(chan string, 10)
  798. // done := make(chan struct{})
  799. // var count = 0
  800. //
  801. // for k, v := range t {
  802. // topicSub := fmt.Sprintf("/sub/%s", k)
  803. // topicPub := fmt.Sprintf("/pub/%s", k)
  804. // mqttId := Device.ReadDeviceMqttId(k)
  805. //
  806. // client, err := MqttServer.GetMqttClient(mqttId)
  807. // if err != nil {
  808. // log.Printf("Error getting MQTT client for SN: %s, %v", k, err)
  809. // continue
  810. // }
  811. //
  812. // // 订阅主题
  813. // if err := MqttServer.Subscript(client, topicSub, deviation, done); err != nil {
  814. // log.Printf("Error subscribing to MQTT topic for SN: %s, %v", k, err)
  815. // continue
  816. // }
  817. //
  818. // pubData, _ := json.Marshal(MqttServer.Deviation_Pub{
  819. // Sn: k,
  820. // Type: 5,
  821. // Mid: time.Now().Unix(),
  822. // Data: v,
  823. // })
  824. //
  825. // if err := MqttServer.PubMqttMessage(client, topicPub, pubData); err != nil {
  826. // log.Printf("Error publishing MQTT message for SN: %s, %v", k, err)
  827. // c.Data["json"] = lib.JSONS{Code: 1, Msg: "mqtt发送失败", Data: k}
  828. // continue
  829. // }
  830. //
  831. // count++
  832. // }
  833. //
  834. // deviceRepeatData := make([]string, 0)
  835. // timeout := time.After(10 * time.Second) // 设置超时时间
  836. // for count > 0 {
  837. // select {
  838. // case v := <-deviation:
  839. // fmt.Println("channel收到数据:", v)
  840. // fmt.Println("count:", count)
  841. // deviceRepeatData = append(deviceRepeatData, v)
  842. // count--
  843. // case <-timeout:
  844. // log.Println("Timeout waiting for MQTT responses")
  845. // c.Data["json"] = lib.JSONS{Code: 500, Msg: "Timeout waiting for MQTT responses"}
  846. // c.ServeJSON()
  847. // return
  848. // }
  849. // }
  850. //
  851. // close(deviation)
  852. // close(done)
  853. // fmt.Println("响应数据:", deviceRepeatData)
  854. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "偏差值上传成功", Data: deviceRepeatData}
  855. // c.ServeJSON()
  856. // return
  857. //}
  858. //
  859. //// WriteSensor 设置偏差值
  860. //func (c *DeviceController) WriteSensor() {
  861. // b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  862. // if !b_ {
  863. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  864. // c.ServeJSON()
  865. // return
  866. // }
  867. //
  868. // bytes, err := io.ReadAll(c.Ctx.Request.Body)
  869. // if err != nil {
  870. // log.Printf("Error reading request body: %v", err)
  871. // c.Data["json"] = lib.JSONS{Code: 500, Msg: "Internal Server Error"}
  872. // c.ServeJSON()
  873. // return
  874. // }
  875. // fmt.Println("请求json:", string(bytes))
  876. //
  877. // data := make([]MqttServer.Sensor_Sub, 0)
  878. // if err := json.Unmarshal(bytes, &data); err != nil {
  879. // log.Printf("Error unmarshalling JSON: %v", err)
  880. // c.Data["json"] = lib.JSONS{Code: 400, Msg: "Bad Request"}
  881. // c.ServeJSON()
  882. // return
  883. // }
  884. //
  885. // // 设置上下文超时
  886. // ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
  887. // defer cancel()
  888. //
  889. // // 处理每个设备的数据
  890. // for _, v := range data {
  891. // go func(v MqttServer.Sensor_Sub) {
  892. // select {
  893. // case <-ctx.Done():
  894. // log.Printf("Context canceled or timeout for SN: %s", v.Sn)
  895. // return
  896. // default:
  897. // }
  898. //
  899. // v.Type = 6
  900. // v.Mid = int(time.Now().Unix())
  901. // mqttId := Device.ReadDeviceMqttId(v.Sn)
  902. //
  903. // client, err := MqttServer.GetMqttClient(mqttId)
  904. // if err != nil {
  905. // log.Printf("Error getting MQTT client for SN: %s, %v", v.Sn, err)
  906. // return
  907. // }
  908. //
  909. // msgBytes, err := json.Marshal(v)
  910. // if err != nil {
  911. // log.Printf("Error marshalling JSON for SN: %s, %v", v.Sn, err)
  912. // client.Disconnect()
  913. // client.Terminate()
  914. // return
  915. // }
  916. //
  917. // for i := 0; i < 3; i++ {
  918. // time.Sleep(time.Second * time.Duration(i+1))
  919. // select {
  920. // case <-ctx.Done():
  921. // log.Printf("Context canceled or timeout for SN: %s", v.Sn)
  922. // client.Disconnect()
  923. // client.Terminate()
  924. // return
  925. // default:
  926. // }
  927. //
  928. // if err := MqttServer.PubMqttMessage(client, fmt.Sprintf("/pub/%s", v.Sn), msgBytes); err != nil {
  929. // log.Printf("Error publishing MQTT message for SN: %s, %v", v.Sn, err)
  930. // sprintf := fmt.Sprintf("设备参数设置失败: %s, %v", v.Sn, err)
  931. // c.Data["json"] = lib.JSONS{Code: 0, Msg: sprintf, Data: v.Sn}
  932. // return
  933. // }
  934. // }
  935. //
  936. // client.Disconnect()
  937. // client.Terminate()
  938. // }(v)
  939. // }
  940. //
  941. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "设置偏差值成功!", Data: nil}
  942. // c.ServeJSON()
  943. // return
  944. //}
  945. //
  946. //// 列表 -
  947. //func (c *DeviceController) DeviceWarning_List_html() {
  948. // // 验证登录
  949. // b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  950. // if !b_ {
  951. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  952. // c.ServeJSON()
  953. // return
  954. // }
  955. // c.Data["Admin_r"] = admin_r
  956. // page, _ := c.GetInt("page")
  957. // println(page)
  958. // if page < 1 {
  959. // page = 1
  960. // }
  961. // c.Data["Admin_r"] = admin_r
  962. //
  963. // bindSN := c.GetStrings("bindSN")
  964. // tpList := c.GetStrings("tpList")
  965. //
  966. // T_sn := c.GetString("T_sn")
  967. // if len(T_sn) != 0 {
  968. // bindSN = append(bindSN, T_sn)
  969. // c.Data["T_sn"] = T_sn
  970. // }
  971. // Time_start := c.GetString("Time_start")
  972. // Time_end := c.GetString("Time_end")
  973. //
  974. // if len(Time_start) == 0 && len(Time_end) == 0 {
  975. // Time_start = time.Now().Format("2006-01-02") + " 00:00:00"
  976. // Time_end = time.Now().Format("2006-01-02") + " 23:59:59"
  977. // }
  978. // c.Data["Time_start"] = Time_start
  979. // c.Data["Time_end"] = Time_end
  980. //
  981. // //c.Data["Class_List"] = Device.Read_DeviceWarningList_All_1()
  982. // //T_Title := ""
  983. // //if Class_1 > 0 {
  984. // // T_Title = Device.Read_DeviceWarningList_ById(Class_1).T_name
  985. // //}
  986. // pageSize := c.GetString("pageSize", "100")
  987. // pageSizeInt, _ := strconv.Atoi(pageSize)
  988. // //atoi, _ := strconv.Atoi(pageSizes.PageSize)
  989. // getString := c.GetString("t_tp")
  990. // t_tp, _ := strconv.Atoi(getString)
  991. // var cnt int64
  992. // DeviceWarning_List, cnt := Warning.Read_Warning_List(admin_r.T_pid, bindSN, tpList, Time_start, Time_end, t_tp, page, pageSizeInt)
  993. // c.Data["List"] = DeviceWarning_List
  994. // page_size := math.Ceil(float64(cnt) / float64(pageSizeInt))
  995. // c.Data["Page"] = page
  996. // c.Data["Page_size"] = page_size
  997. // c.Data["Pages"] = lib.Func_page(int64(page), int64(page_size))
  998. // c.Data["cnt"] = cnt
  999. // // 将sync.Map中的数据转存到切片中
  1000. //
  1001. // c.TplName = "Device/DeviceWarning.html"
  1002. //}
  1003. //
  1004. //// GetWarningtype 获取报警类型
  1005. //func (c *DeviceController) GetWarningtype() {
  1006. // var results []struct {
  1007. // Key int
  1008. // Value string
  1009. // }
  1010. // Warning.WarningType_list.Range(func(key, value any) bool {
  1011. // // 确保类型断言成功
  1012. // if k, ok := key.(int); ok {
  1013. // if v, ok := value.(string); ok {
  1014. // // 创建匿名结构体实例并添加到切片
  1015. // results = append(results, struct {
  1016. // Key int
  1017. // Value string
  1018. // }{Key: k, Value: v})
  1019. // } else {
  1020. // fmt.Println("Value is not of type string")
  1021. // }
  1022. // } else {
  1023. // fmt.Println("Key is not of type int")
  1024. // }
  1025. // return true // 继续遍历
  1026. // })
  1027. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: results}
  1028. // c.ServeJSON()
  1029. // log.Println(results)
  1030. //}
  1031. //func (c *DeviceController) DeviceWarning_() {
  1032. // // 验证登录
  1033. // //b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1034. // //if !b_ {
  1035. // // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  1036. // // c.ServeJSON()
  1037. // // return
  1038. // //}
  1039. //
  1040. // c.Data["WarningType"] = Warning.Read_WarningType_All()
  1041. // c.TplName = "Device/DeviceWarning-.html"
  1042. //}
  1043. //
  1044. //// DeviceWarning_Post 添加报警
  1045. //func (c *DeviceController) DeviceWarning_Post() {
  1046. // // 验证登录
  1047. // b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1048. // if !b_ {
  1049. // c.Ctx.Redirect(302, "Login")
  1050. // return
  1051. // }
  1052. //
  1053. // T_tp, _ := c.GetInt("T_tp")
  1054. // T_sn := c.GetString("T_sn")
  1055. // T_id, _ := c.GetInt("T_id")
  1056. // T_Ut := c.GetString("T_Ut")
  1057. // T_Remark := c.GetString("T_Remark")
  1058. // r_Device, err := Device.Read_Device_ByT_sn(T_sn)
  1059. // if err != nil {
  1060. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "E!", Data: "SN 错误!!!"}
  1061. // c.ServeJSON()
  1062. // return
  1063. // }
  1064. // // 获取 传感器 参数
  1065. // DeviceSensor_r, is := Device.Read_DeviceSensor_ByT_sn(r_Device.T_sn, T_id)
  1066. // if !is {
  1067. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "E!", Data: "编号 错误!!!"}
  1068. // c.ServeJSON()
  1069. // return
  1070. // }
  1071. //
  1072. // t1, _ := time.ParseInLocation("2006-01-02 15:04:05", T_Ut, time.Local) // +8 时差
  1073. // t_c := Warning.Warning{
  1074. // T_pid: admin_r.T_pid,
  1075. // T_tp: T_tp,
  1076. // T_sn: T_sn,
  1077. // T_D_name: r_Device.T_devName,
  1078. // T_id: T_id,
  1079. // T_DS_name: DeviceSensor_r.T_name,
  1080. // T_Ut: t1,
  1081. // T_State: 1,
  1082. // T_Remark: T_Remark,
  1083. // }
  1084. // Warning.Add_Warning(t_c)
  1085. //
  1086. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  1087. // c.ServeJSON()
  1088. // return
  1089. //}
  1090. //
  1091. //// DeviceWarning_Del 删除报警
  1092. //func (c *DeviceController) DeviceWarning_Del() {
  1093. // // 验证登录
  1094. // b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1095. // if !b_ {
  1096. // c.Ctx.Redirect(302, "Login")
  1097. // return
  1098. // }
  1099. //
  1100. // Id, _ := c.GetInt("Id")
  1101. //
  1102. // if Id > 1000 {
  1103. // Warning.Delete_Warning(admin_r.T_pid, Id)
  1104. // }
  1105. //
  1106. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  1107. // c.ServeJSON()
  1108. // return
  1109. //}
  1110. //
  1111. //// DeviceWarning_DelS 批量删除
  1112. //func (c *DeviceController) DeviceWarning_DelS() {
  1113. // // 验证登录
  1114. // b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1115. // if !b_ {
  1116. // c.Ctx.Redirect(302, "Login")
  1117. // return
  1118. // }
  1119. // type SelectedItem struct {
  1120. // Id string `json:"id"`
  1121. // Ut string `json:"ut"` // 假设"ut"字段是时间戳字符串
  1122. // }
  1123. //
  1124. // type SelectedItems struct {
  1125. // SelectedIds []SelectedItem `json:"selectedIds"`
  1126. // }
  1127. // var SelectedIds SelectedItems
  1128. // //var selectedIds map[string]any
  1129. //
  1130. // err := json.Unmarshal(c.Ctx.Input.RequestBody, &SelectedIds)
  1131. // log.Println(SelectedIds.SelectedIds)
  1132. // for _, v := range SelectedIds.SelectedIds {
  1133. // Warning.Delete_Warning_List(v.Id, v.Ut, admin_r.T_pid)
  1134. // }
  1135. // if err != nil {
  1136. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "E!", Data: "数据格式错误!!!"}
  1137. // c.ServeJSON()
  1138. // } else {
  1139. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  1140. // c.ServeJSON()
  1141. // }
  1142. //}
  1143. //
  1144. //// Device_Copy 复制并添加
  1145. //func (c *DeviceController) Device_Copy() {
  1146. // // 验证登录
  1147. // b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1148. // if !b_ {
  1149. // c.Ctx.Redirect(302, "Login")
  1150. // return
  1151. // }
  1152. // type T_data struct {
  1153. // T_sn string `json:"t_sn"`
  1154. // T_id int `json:"t_id"`
  1155. // T_Rh any `json:"t_rh"`
  1156. // T_Site string `json:"t_site"`
  1157. // T_T any `json:"t_t"`
  1158. // CreateTime string `json:"createTime"`
  1159. // }
  1160. // var data T_data
  1161. // json.Unmarshal(c.Ctx.Input.RequestBody, &data)
  1162. // r := Device.Read_DeviceParameter_SNNo(data.T_sn)
  1163. // parse, _ := time.Parse("2006-01-02 15:04:05", data.CreateTime)
  1164. // data.CreateTime = parse.Add(time.Duration(r[0].T_saveT) * time.Second).Format("2006-01-02 15:04:05")
  1165. // itoa := strconv.Itoa(data.T_id)
  1166. // Device.Copy_DeviceData(data.T_sn, itoa, data.T_Rh, data.T_T, data.T_Site, data.CreateTime)
  1167. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "设置成功", Data: data}
  1168. // c.ServeJSON()
  1169. //}
  1170. //
  1171. //// DeviceWarningUpdate 修改报警
  1172. //func (c *DeviceController) DeviceWarningUpdate() {
  1173. // // 验证登录
  1174. // b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1175. // if !b_ {
  1176. // c.Ctx.Redirect(302, "Login")
  1177. // return
  1178. // }
  1179. // var data struct {
  1180. // ColumnName string `json:"columnName"`
  1181. // NewValue string `json:"newValue"`
  1182. // RowId string `json:"rowId"`
  1183. // T_Ut string `json:"T_Ut"`
  1184. // SN string `json:"sn"`
  1185. // }
  1186. // json.Unmarshal(c.Ctx.Input.RequestBody, &data)
  1187. // log.Println(admin_r.T_pid)
  1188. // Warning.Update_DeviceParameter_Warning(data.ColumnName, data.NewValue, data.RowId, data.T_Ut)
  1189. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "设置成功", Data: data}
  1190. // c.ServeJSON()
  1191. //}
  1192. //
  1193. //// GetDeviceALLSN 根据pid获取所有sn
  1194. //func (c *DeviceController) GetDeviceALLSN() {
  1195. // // 验证登录
  1196. // b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1197. // if !b_ {
  1198. // c.Ctx.Redirect(302, "Login")
  1199. // return
  1200. // }
  1201. // r := Device.Read_Device_All_SN(admin_r.T_pid)
  1202. // log.Println(r)
  1203. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r}
  1204. // c.ServeJSON()
  1205. //}
  1206. //
  1207. //// GetDeviceALLTID 根据SN获取所有探头
  1208. //func (c *DeviceController) GetDeviceALLTID() {
  1209. // // 验证登录
  1210. // b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1211. // if !b_ {
  1212. // c.Ctx.Redirect(302, "Login")
  1213. // return
  1214. // }
  1215. // getString := c.GetString("sn")
  1216. // r := Device.Get_DeviceSensor_Tid_ByT_sn(getString)
  1217. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "设置成功", Data: r}
  1218. // c.ServeJSON()
  1219. //}
  1220. //
  1221. //// DeviceWarningAdd 复制添加报警
  1222. //func (c *DeviceController) DeviceWarningAdd() {
  1223. // // 验证登录
  1224. // b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1225. // if !b_ {
  1226. // c.Ctx.Redirect(302, "Login")
  1227. // return
  1228. // }
  1229. // var data struct {
  1230. // T_tp_name string `json:"column1"`
  1231. // T__d_name string `json:"column2"`
  1232. // T_DS_name string `json:"column3"`
  1233. // T_Remark string `json:"column4"`
  1234. // T_State string `json:"column5"`
  1235. // T_Ut string `json:"column6"`
  1236. // RowId string `json:"rowId"`
  1237. // SN string `json:"sn"`
  1238. // T_id string `json:"t_id"`
  1239. // }
  1240. //
  1241. // json.Unmarshal(c.Ctx.Input.RequestBody, &data)
  1242. // atoi, _ := strconv.Atoi(data.T_id)
  1243. // r_Device, err := Device.Read_Device_ByT_sn(data.SN)
  1244. // if err != nil {
  1245. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "E!", Data: "SN 错误!!!"}
  1246. // c.ServeJSON()
  1247. // return
  1248. // }
  1249. // T_tp := Warning.Read_WarningType(data.T_tp_name)
  1250. // t1, _ := time.ParseInLocation("2006-01-02 15:04:05", data.T_Ut, time.Local) // +8 时差
  1251. // t_c := Warning.Warning{
  1252. // T_pid: admin_r.T_pid,
  1253. // T_tp: T_tp,
  1254. // T_sn: data.SN,
  1255. // T_D_name: r_Device.T_devName,
  1256. // T_id: atoi,
  1257. // T_DS_name: data.T_DS_name,
  1258. // T_Ut: t1,
  1259. // T_State: 1,
  1260. // T_Remark: data.T_Remark,
  1261. // }
  1262. // Warning.Add_Warning(t_c)
  1263. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  1264. // c.ServeJSON()
  1265. // return
  1266. //}
  1267. //
  1268. //// SiftWarningType 根据报警类型筛选
  1269. //func (c *DeviceController) SiftWarningType() {
  1270. // // 验证登录
  1271. // b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  1272. // if !b_ {
  1273. // c.Ctx.Redirect(302, "Login")
  1274. // return
  1275. // }
  1276. //
  1277. //}