Nats.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802
  1. package Nats
  2. import (
  3. "Cold_Api/conf"
  4. "Cold_Api/controllers/lib"
  5. "Cold_Api/models/Account"
  6. "Cold_Api/models/Device"
  7. "Cold_Api/models/System"
  8. "encoding/xml"
  9. "fmt"
  10. "github.com/astaxie/beego/cache"
  11. "github.com/beego/beego/v2/core/logs"
  12. "github.com/nats-io/nats.go"
  13. "github.com/vmihailenco/msgpack/v5"
  14. "strconv"
  15. "strings"
  16. )
  17. var redisCache_NatsServer cache.Cache
  18. func init() {
  19. logs.Info("============Nats init============")
  20. var err error
  21. // 连接Nats服务器
  22. lib.Nats, err = nats.Connect("nats://" + conf.NatsServer_Url)
  23. if err != nil {
  24. logs.Error("nats 连接失败!")
  25. panic(err)
  26. }
  27. logs.Info("nats OK!")
  28. if conf.RunMode == "prod" {
  29. go NatsInit()
  30. }
  31. config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
  32. "redisCache_NatsServer", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
  33. logs.Info(config)
  34. redisCache_NatsServer, err = cache.NewCache("redis", config)
  35. if err != nil || redisCache_NatsServer == nil {
  36. errMsg := "failed to init redis"
  37. logs.Error(errMsg, err)
  38. panic(errMsg)
  39. }
  40. }
  41. func NatsInit() {
  42. // 获取微信二维码 返回结果
  43. _, _ = lib.Nats.QueueSubscribe("Wx_BasicMessage_Event_QRCode", "Wx_BasicMessage_Event_QRCode", func(m *nats.Msg) {
  44. //logs.Debug(fmt.Sprintf(" => Nats Wx_BasicMessage_Event_QRCode message: %s\n", string(m.Data)))
  45. type Person_QRCode struct {
  46. ToUserName string `xml:"ToUserName"` //注意这里有个反引号
  47. FromUserName string `xml:"FromUserName"` //注意这里有个反引号
  48. CreateTime string `xml:"CreateTime"` //注意这里有个反引号
  49. EventKey string `xml:"EventKey"`
  50. }
  51. var person_QRCode Person_QRCode
  52. err1 := xml.Unmarshal(m.Data, &person_QRCode)
  53. if err1 != nil {
  54. logs.Error("Unmarshal error")
  55. _ = lib.Nats.Publish(m.Reply, []byte(""))
  56. return
  57. }
  58. // 进入 二维码配对
  59. //logs.Info("FromUserName-", person_QRCode.FromUserName)
  60. //logs.Info("EventKey-", person_QRCode.EventKey)
  61. // 开始 处理消息
  62. if strings.Contains(person_QRCode.EventKey, "@宝智达冷链 微信公众号通知") {
  63. //"请将本内容发送到 深圳市宝智达科技有限公司 微信公众号-|"+lib.AesEncryptCBC(T_calss_id, "0123456789012345")+"|-",
  64. Content_r := lib.GetBetweenStr(person_QRCode.EventKey, "-|", "|-")
  65. decryptCode := lib.AesDecryptCBC(Content_r, "0123456789012345")
  66. T_uuid_name := strings.Split(decryptCode, "/")
  67. var uuid, name string
  68. if len(T_uuid_name) == 2 {
  69. uuid = strings.Split(decryptCode, "/")[0]
  70. name = strings.Split(decryptCode, "/")[1]
  71. }
  72. logs.Info("解密结果 UUID name:", decryptCode, " Content_r:", Content_r)
  73. Admin_r, err := Account.Read_Admin_ByUuid(uuid)
  74. if err != nil {
  75. _ = lib.Nats.Publish(m.Reply, []byte(""))
  76. return
  77. }
  78. T_wx := fmt.Sprintf("%s/%s", person_QRCode.FromUserName, name)
  79. // 已绑定 name相同 提示已绑定
  80. // 已绑定 name不同 在数据库修改name
  81. if strings.Contains(Admin_r.T_wx, person_QRCode.FromUserName) {
  82. list := strings.Split(Admin_r.T_wx, "|")
  83. for _, v := range list {
  84. if strings.Split(v, "/")[0] == person_QRCode.FromUserName {
  85. if v == T_wx {
  86. _ = lib.Nats.Publish(m.Reply, []byte(name+" 已绑定!"))
  87. return
  88. }
  89. Admin_r.T_wx = strings.Replace(Admin_r.T_wx, v, T_wx, 1)
  90. }
  91. }
  92. } else {
  93. Admin_r.T_wx += T_wx + "|"
  94. }
  95. Account.Update_Admin(Admin_r, "T_wx")
  96. _ = lib.Nats.Publish(m.Reply, []byte(name+" 绑定成功!"))
  97. return
  98. }
  99. _ = lib.Nats.Publish(m.Reply, []byte(""))
  100. })
  101. // 请求-响应 验证登录
  102. _, _ = lib.Nats.QueueSubscribe("Cold_User_verification", "Cold_User_verification", func(m *nats.Msg) {
  103. logs.Debug(fmt.Sprintf("Cold_User_verification message: %s\n", string(m.Data)))
  104. type T_R struct {
  105. Code int16 `xml:"Code"`
  106. Msg string `xml:"Msg"`
  107. Pid int `xml:"Pid"` // 公司id
  108. Data Account.Admin_R `xml:"Data"` // 泛型
  109. }
  110. var t_R T_R
  111. // 验证登录
  112. b_, admin_r := Account.Verification(string(m.Data), "")
  113. if !b_ {
  114. logs.Error("Unmarshal error")
  115. t_R.Code = 201
  116. t_R.Msg = "User_tokey Err!"
  117. b, _ := msgpack.Marshal(&t_R)
  118. _ = lib.Nats.Publish(m.Reply, b)
  119. return
  120. }
  121. t_R.Pid = admin_r.T_pid
  122. T_pid, _ := Account.Redis_Tokey_T_pid_Get(string(m.Data))
  123. if T_pid > 0 {
  124. t_R.Pid = T_pid
  125. }
  126. t_R.Code = 200
  127. t_R.Msg = "ok"
  128. t_R.Data = Account.AdminToAdmin_R(admin_r)
  129. b, _ := msgpack.Marshal(&t_R)
  130. _ = lib.Nats.Publish(m.Reply, b)
  131. })
  132. // 请求-响应 通过公司名获取所有公司信息
  133. _, _ = lib.Nats.QueueSubscribe("Cold_User_CompanyListAllByT_name", "Cold_User_CompanyListAllByT_name", func(m *nats.Msg) {
  134. logs.Debug(fmt.Sprintf("CompanyListAll message: %s\n", string(m.Data)))
  135. type T_R struct {
  136. Code int16 `xml:"Code"`
  137. Msg string `xml:"Msg"`
  138. Data []Account.Company `xml:"Data"` // 泛型
  139. }
  140. var t_R T_R
  141. t_R.Code = 200
  142. t_R.Msg = "ok"
  143. t_R.Data = Account.Read_Company_List_All_ByT_name(string(m.Data))
  144. b, _ := msgpack.Marshal(&t_R)
  145. _ = lib.Nats.Publish(m.Reply, b)
  146. })
  147. // 请求-响应 通过公司名获取公司树形结构信息
  148. _, _ = lib.Nats.QueueSubscribe("Cold_User_CompanyTreeByT_name", "Cold_User_CompanyTreeByT_name", func(m *nats.Msg) {
  149. logs.Debug(fmt.Sprintf("CompanyListAll message: %s\n", string(m.Data)))
  150. type T_R struct {
  151. Code int16 `xml:"Code"`
  152. Msg string `xml:"Msg"`
  153. Data []Account.Company_R `xml:"Data"` // 泛型
  154. }
  155. var t_R T_R
  156. t_R.Code = 200
  157. t_R.Msg = "ok"
  158. t_R.Data = Account.Read_Company_List(string(m.Data))
  159. b, _ := msgpack.Marshal(&t_R)
  160. _ = lib.Nats.Publish(m.Reply, b)
  161. })
  162. // 请求-响应 获取公司
  163. _, _ = lib.Nats.QueueSubscribe("Cold_ReadCompanyByT_id", "Cold_ReadCompanyByT_id", func(m *nats.Msg) {
  164. logs.Debug(fmt.Sprintf("Cold_ReadCompanyByT_id message: %s\n", string(m.Data)))
  165. type T_R struct {
  166. Code int16 `xml:"Code"`
  167. Msg string `xml:"Msg"`
  168. Data Account.Company `xml:"Data"` // 泛型
  169. }
  170. var t_R T_R
  171. id, _ := strconv.Atoi(string(m.Data))
  172. company, err := Account.Read_Company_ById(id)
  173. if err != nil {
  174. t_R.Code = 202
  175. t_R.Msg = err.Error()
  176. b, _ := msgpack.Marshal(&t_R)
  177. _ = lib.Nats.Publish(m.Reply, b)
  178. }
  179. t_R.Code = 200
  180. t_R.Msg = "ok"
  181. t_R.Data = company
  182. b, _ := msgpack.Marshal(&t_R)
  183. _ = lib.Nats.Publish(m.Reply, b)
  184. })
  185. // 请求-响应 获取公司 通过秘钥
  186. _, _ = lib.Nats.QueueSubscribe("Cold_ReadCompanyByT_key", "Cold_ReadCompanyByT_key", func(m *nats.Msg) {
  187. logs.Debug(fmt.Sprintf("Cold_ReadCompanyByT_key message: %s\n", string(m.Data)))
  188. type T_R struct {
  189. Code int16 `xml:"Code"`
  190. Msg string `xml:"Msg"`
  191. Data Account.Company `xml:"Data"` // 泛型
  192. }
  193. var t_R T_R
  194. company, err := Account.Read_Company_ByKey(string(m.Data))
  195. if err != nil {
  196. t_R.Code = 202
  197. t_R.Msg = err.Error()
  198. b, _ := msgpack.Marshal(&t_R)
  199. _ = lib.Nats.Publish(m.Reply, b)
  200. }
  201. t_R.Code = 200
  202. t_R.Msg = "ok"
  203. t_R.Data = company
  204. b, _ := msgpack.Marshal(&t_R)
  205. _ = lib.Nats.Publish(m.Reply, b)
  206. })
  207. // 请求-响应 获取所有用户列表
  208. _, _ = lib.Nats.QueueSubscribe("Cold_User_UserListAll", "Cold_User_UserListAll", func(m *nats.Msg) {
  209. type T_R struct {
  210. Code int16 `xml:"Code"`
  211. Msg string `xml:"Msg"`
  212. Data []Account.Admin_R `xml:"Data"` // 泛型
  213. }
  214. var t_R T_R
  215. t_R.Code = 200
  216. t_R.Msg = "ok"
  217. t_R.Data = Account.Read_User_List_All()
  218. b, _ := msgpack.Marshal(&t_R)
  219. _ = lib.Nats.Publish(m.Reply, b)
  220. })
  221. // 请求-响应 检查用户权限
  222. _, _ = lib.Nats.QueueSubscribe("Cold_User_CheckUserPermissions", "Cold_User_CheckUserPermissions", func(m *nats.Msg) {
  223. logs.Debug(fmt.Sprintf("Cold_User_CheckUserPermissions message: %s\n", string(m.Data)))
  224. type T_Req struct {
  225. Power_Id int `xml:"Power_Id"` // 权限id
  226. Req_Url string `xml:"Req_Url"` // 请求url
  227. }
  228. type T_R struct {
  229. Code int16 `xml:"Code"`
  230. Msg string `xml:"Msg"`
  231. Pass bool `xml:"Pass"` // 泛型
  232. }
  233. var t_Req T_Req
  234. var t_R T_R
  235. err := msgpack.Unmarshal(m.Data, &t_Req)
  236. if err != nil {
  237. t_R.Code = 202
  238. t_R.Msg = "Unmarshal error"
  239. b, _ := msgpack.Marshal(&t_R)
  240. _ = lib.Nats.Publish(m.Reply, b)
  241. return
  242. }
  243. power, err := Account.Read_Power_ById(t_Req.Power_Id)
  244. if err != nil {
  245. t_R.Code = 202
  246. t_R.Msg = err.Error()
  247. b, _ := msgpack.Marshal(&t_R)
  248. _ = lib.Nats.Publish(m.Reply, b)
  249. }
  250. flag := false
  251. if power.T_menu == "*" {
  252. flag = true
  253. }
  254. if !flag {
  255. api := Account.Read_API_List_ByPower_Id(power.Id, power.T_menu)
  256. for _, v := range api {
  257. if strings.Contains(conf.Version+v.T_uri, t_Req.Req_Url) {
  258. flag = true
  259. break
  260. }
  261. }
  262. }
  263. t_R.Code = 200
  264. t_R.Msg = "ok"
  265. t_R.Pass = flag
  266. b, _ := msgpack.Marshal(&t_R)
  267. _ = lib.Nats.Publish(m.Reply, b)
  268. })
  269. // 发布-订阅 模式,异步订阅 AddSysLogs
  270. _, _ = lib.Nats.QueueSubscribe("Cold_User_AddSysLogs", "Cold_User_AddSysLogs", func(m *nats.Msg) {
  271. logs.Debug(fmt.Sprintf("AddSysLogs message: %s\n", string(m.Data)))
  272. type T_S struct {
  273. T_class string
  274. T_title string
  275. T_txt interface{}
  276. }
  277. var t_S T_S
  278. err := msgpack.Unmarshal(m.Data, &t_S)
  279. if err != nil {
  280. System.Add_Logs("Nats", "Nats AddSysLogs 解析失败", string(m.Data))
  281. return
  282. }
  283. System.Add_Logs_T(t_S.T_class, t_S.T_title, t_S.T_txt)
  284. })
  285. // 发布-订阅 模式,异步订阅 AddUserLogs
  286. _, _ = lib.Nats.QueueSubscribe("Cold_User_AddUserLogs", "Cold_User_AddUserLogs", func(m *nats.Msg) {
  287. logs.Debug(fmt.Sprintf("AddUserLogs message: %s\n", string(m.Data)))
  288. type T_S struct {
  289. T_uuid string
  290. T_class string
  291. T_title string
  292. T_txt interface{}
  293. }
  294. var t_S T_S
  295. err := msgpack.Unmarshal(m.Data, &t_S)
  296. if err != nil {
  297. System.Add_Logs("Nats", "Nats AddUserLogs 解析失败", string(m.Data))
  298. return
  299. }
  300. System.Add_UserLogs_T(t_S.T_uuid, t_S.T_class, t_S.T_title, t_S.T_txt)
  301. })
  302. // 请求-响应 获取设备
  303. _, _ = lib.Nats.QueueSubscribe("Cold_ReadDeviceByT_sn", "Cold_ReadDeviceByT_sn", func(m *nats.Msg) {
  304. logs.Debug(fmt.Sprintf("CheckUserPermissions message: %s\n", string(m.Data)))
  305. type T_R struct {
  306. Code int16 `xml:"Code"`
  307. Msg string `xml:"Msg"`
  308. Data Device.Device `xml:"Data"` // 泛型
  309. }
  310. var t_R T_R
  311. device, err := Device.Read_Device_ByT_sn(string(m.Data))
  312. if err != nil {
  313. t_R.Code = 202
  314. t_R.Msg = "查询失败"
  315. b, _ := msgpack.Marshal(&t_R)
  316. _ = lib.Nats.Publish(m.Reply, b)
  317. }
  318. t_R.Code = 200
  319. t_R.Msg = "ok"
  320. t_R.Data = device
  321. b, _ := msgpack.Marshal(&t_R)
  322. _ = lib.Nats.Publish(m.Reply, b)
  323. })
  324. // 请求-响应 获取传感器列表
  325. _, _ = lib.Nats.QueueSubscribe("Cold_ReadDeviceSensorALLByT_sn", "Cold_ReadDeviceSensorALLByT_sn", func(m *nats.Msg) {
  326. logs.Debug(fmt.Sprintf("CheckUserPermissions message: %s\n", string(m.Data)))
  327. type T_R struct {
  328. Code int16 `xml:"Code"`
  329. Msg string `xml:"Msg"`
  330. Data []Device.DeviceSensor `xml:"Data"` // 泛型
  331. }
  332. var t_R T_R
  333. device := Device.Read_DeviceSensor_ALL_List_T_sn(string(m.Data))
  334. t_R.Code = 200
  335. t_R.Msg = "ok"
  336. t_R.Data = device
  337. b, _ := msgpack.Marshal(&t_R)
  338. _ = lib.Nats.Publish(m.Reply, b)
  339. })
  340. // 请求-响应 获取设备数据列表
  341. _, _ = lib.Nats.QueueSubscribe("Cold_ReadDeviceDataListBy_T_snid", "Cold_ReadDeviceDataListBy_T_snid", func(m *nats.Msg) {
  342. logs.Debug(fmt.Sprintf("Cold_ReadDeviceDataListBy_T_snid message: %s\n", string(m.Data)))
  343. type T_Req struct {
  344. T_snid string `xml:"T_snid"`
  345. Time_start string `xml:"Time_start"`
  346. Time_end string `xml:"Time_end"`
  347. Page int `xml:"Page"`
  348. Page_z int `xml:"Page_z"`
  349. }
  350. type T_R struct {
  351. Code int16 `xml:"Code"`
  352. Msg string `xml:"Msg"`
  353. Count int64 `xml:"Count"`
  354. Data []Device.DeviceData_R `xml:"Data"` // 泛型
  355. }
  356. var t_Req T_Req
  357. var t_R T_R
  358. err := msgpack.Unmarshal(m.Data, &t_Req)
  359. if err != nil {
  360. t_R.Code = 202
  361. t_R.Msg = "Unmarshal error"
  362. b, _ := msgpack.Marshal(&t_R)
  363. _ = lib.Nats.Publish(m.Reply, b)
  364. return
  365. }
  366. deviceData, cnt := Device.Read_DeviceData_By_T_snid_List(t_Req.T_snid, t_Req.Time_start, t_Req.Time_end, t_Req.Page, t_Req.Page_z)
  367. t_R.Code = 200
  368. t_R.Msg = "ok"
  369. t_R.Count = cnt
  370. t_R.Data = deviceData
  371. b, _ := msgpack.Marshal(&t_R)
  372. _ = lib.Nats.Publish(m.Reply, b)
  373. })
  374. // 请求-响应 通过key获取传感器列表
  375. _, _ = lib.Nats.QueueSubscribe("Cold_CompanyDeviceSensor_List_ByKey", "Cold_CompanyDeviceSensor_List_ByKey", func(m *nats.Msg) {
  376. logs.Debug(fmt.Sprintf("Cold_CompanyDeviceSensor_List_ByKey message: %s\n", string(m.Data)))
  377. type T_Req struct {
  378. T_sn string `xml:"T_sn"`
  379. T_key string `xml:"T_key"`
  380. }
  381. type T_R struct {
  382. Code int16 `xml:"Code"`
  383. Msg string `xml:"Msg"`
  384. Count int64 `xml:"Count"`
  385. Data []Device.DeviceSensor_R `xml:"Data"` // 泛型
  386. }
  387. var t_Req T_Req
  388. var t_R T_R
  389. err := msgpack.Unmarshal(m.Data, &t_Req)
  390. if err != nil {
  391. t_R.Code = 202
  392. t_R.Msg = "Unmarshal error"
  393. b, _ := msgpack.Marshal(&t_R)
  394. _ = lib.Nats.Publish(m.Reply, b)
  395. return
  396. }
  397. // 查询公司
  398. Company_r, err := Account.Read_Company_ByKey(t_Req.T_key)
  399. if err != nil {
  400. t_R.Code = 202
  401. t_R.Msg = "T_key error"
  402. b, _ := msgpack.Marshal(&t_R)
  403. _ = lib.Nats.Publish(m.Reply, b)
  404. return
  405. }
  406. // 查询公司下面所有子公司id
  407. T_pids := Account.ReadCompanyIds_T_path(Company_r.T_path)
  408. Account.Read_Company_All_Maps()
  409. deviceData, cnt := Device.Read_CompanyDeviceSensor_List_For_Data_ByKey(T_pids, t_Req.T_sn)
  410. t_R.Code = 200
  411. t_R.Msg = "ok"
  412. t_R.Count = cnt
  413. t_R.Data = deviceData
  414. b, _ := msgpack.Marshal(&t_R)
  415. _ = lib.Nats.Publish(m.Reply, b)
  416. })
  417. // 请求-响应 根据时间获取设备数据(单条)最新数据
  418. _, _ = lib.Nats.QueueSubscribe("Cold_ReadDeviceDataBy_T_snid_T_time", "Cold_ReadDeviceDataBy_T_snid_T_time", func(m *nats.Msg) {
  419. logs.Debug(fmt.Sprintf("Cold_ReadDeviceDataBy_T_snid_T_time message: %s\n", string(m.Data)))
  420. type T_Req struct {
  421. T_sn string `xml:"T_sn"`
  422. T_id int `xml:"T_id"`
  423. Time string `xml:"Time"`
  424. }
  425. type T_R struct {
  426. Code int16 `xml:"Code"`
  427. Msg string `xml:"Msg"`
  428. Data Device.DeviceData_ `xml:"Data"` // 泛型
  429. }
  430. var t_Req T_Req
  431. var t_R T_R
  432. err := msgpack.Unmarshal(m.Data, &t_Req)
  433. if err != nil {
  434. t_R.Code = 202
  435. t_R.Msg = "Unmarshal error"
  436. b, _ := msgpack.Marshal(&t_R)
  437. _ = lib.Nats.Publish(m.Reply, b)
  438. return
  439. }
  440. deviceData := Device.Read_DeviceData_By_Time(t_Req.T_sn, t_Req.T_id, t_Req.Time)
  441. t_R.Code = 200
  442. t_R.Msg = "ok"
  443. t_R.Data = deviceData
  444. b, _ := msgpack.Marshal(&t_R)
  445. _ = lib.Nats.Publish(m.Reply, b)
  446. })
  447. // 请求-响应 获取设备
  448. _, _ = lib.Nats.QueueSubscribe("Cold_ReadDevice_List", "Cold_ReadDevice_List", func(m *nats.Msg) {
  449. logs.Debug(fmt.Sprintf("Cold_ReadDevice_List message: %s\n", string(m.Data)))
  450. type T_Req struct {
  451. Key string `xml:"Key"`
  452. Name string `xml:"Name"`
  453. Page int `xml:"Page"`
  454. Page_z int `xml:"Page_z"`
  455. }
  456. var t_Req T_Req
  457. type T_R struct {
  458. Code int16 `xml:"Code"`
  459. Msg string `xml:"Msg"`
  460. Count int64 `xml:"Count"`
  461. Data []Device.Device_R `xml:"Data"` // 泛型
  462. }
  463. var t_R T_R
  464. err := msgpack.Unmarshal(m.Data, &t_Req)
  465. if err != nil {
  466. t_R.Code = 202
  467. t_R.Msg = "Unmarshal error"
  468. b, _ := msgpack.Marshal(&t_R)
  469. _ = lib.Nats.Publish(m.Reply, b)
  470. return
  471. }
  472. // 查询公司
  473. Company_r, err := Account.Read_Company_ByKey(t_Req.Key)
  474. if err != nil {
  475. t_R.Code = 202
  476. t_R.Msg = "T_key error"
  477. b, _ := msgpack.Marshal(&t_R)
  478. _ = lib.Nats.Publish(m.Reply, b)
  479. return
  480. }
  481. deviceList, count := Device.Read_Device_List(&Account.Admin{T_pid: Company_r.Id}, []string{}, Company_r.Id, t_Req.Name, "", "", 0, t_Req.Page, t_Req.Page_z)
  482. t_R.Code = 200
  483. t_R.Msg = "ok"
  484. t_R.Count = count
  485. t_R.Data = deviceList
  486. b, _ := msgpack.Marshal(&t_R)
  487. _ = lib.Nats.Publish(m.Reply, b)
  488. })
  489. // 发布-订阅 修改设备校准时间
  490. _, _ = lib.Nats.QueueSubscribe("Cold_UpdateDevice_CalibrationTime", "Cold_UpdateDevice_CalibrationTime", func(m *nats.Msg) {
  491. logs.Debug(fmt.Sprintf("Cold_UpdateDevice_CalibrationTime message: %s\n", string(m.Data)))
  492. type T_Req struct {
  493. T_sn string
  494. T_CalibrationTime string
  495. }
  496. type T_R struct {
  497. Code int16 `xml:"Code"`
  498. Msg string `xml:"Msg"`
  499. Data interface{} `xml:"Data"` // 泛型
  500. }
  501. var t_R T_R
  502. var t_req T_Req
  503. err := msgpack.Unmarshal(m.Data, &t_req)
  504. if err != nil {
  505. t_R.Code = 202
  506. t_R.Msg = "Unmarshal error"
  507. b, _ := msgpack.Marshal(&t_R)
  508. _ = lib.Nats.Publish(m.Reply, b)
  509. return
  510. }
  511. device, err := Device.Read_Device_ByT_sn(t_req.T_sn)
  512. if err != nil {
  513. if err.Error() == "record not found" {
  514. t_R.Code = 202
  515. t_R.Msg = "SN不存在"
  516. b, _ := msgpack.Marshal(&t_R)
  517. _ = lib.Nats.Publish(m.Reply, b)
  518. return
  519. }
  520. t_R.Code = 202
  521. t_R.Msg = "查询失败"
  522. b, _ := msgpack.Marshal(&t_R)
  523. _ = lib.Nats.Publish(m.Reply, b)
  524. return
  525. }
  526. // 校准时间
  527. CalibrationTime, CalibrationTime_is := lib.DateStrToDate(t_req.T_CalibrationTime)
  528. if CalibrationTime_is {
  529. device.T_CalibrationTime = CalibrationTime
  530. }
  531. if is := Device.Update_Device(device, "T_CalibrationTime"); !is {
  532. t_R.Code = 202
  533. t_R.Msg = "修改校准时间失败"
  534. b, _ := msgpack.Marshal(&t_R)
  535. _ = lib.Nats.Publish(m.Reply, b)
  536. return
  537. }
  538. t_R.Code = 200
  539. t_R.Msg = "ok"
  540. b, _ := msgpack.Marshal(&t_R)
  541. _ = lib.Nats.Publish(m.Reply, b)
  542. return
  543. })
  544. //通过sn获取设备最新开始监控时间以及结束时间
  545. _, _ = lib.Nats.QueueSubscribe("Read_DeviceTask_List_By_Condition", "Read_DeviceTask_List_By_Condition", func(m *nats.Msg) {
  546. logs.Debug(fmt.Sprintf("Read_DeviceTask_List_By_Condition message: %s\n", string(m.Data)))
  547. type T_R struct {
  548. Code int16 `xml:"Code"`
  549. Msg string `xml:"Msg"`
  550. Data Device.DeviceTask `xml:"Data"`
  551. }
  552. type T_Req struct {
  553. T_sn string `xml:"T_sn"`
  554. }
  555. var t_R T_R
  556. var t_Req T_Req
  557. err := msgpack.Unmarshal(m.Data, &t_Req)
  558. if err != nil {
  559. t_R.Code = 202
  560. t_R.Msg = "Unmarshal error"
  561. b, _ := msgpack.Marshal(&t_R)
  562. _ = lib.Nats.Publish(m.Reply, b)
  563. return
  564. }
  565. l, err := Device.Read_DeviceTask_List_By_Condition(t_Req.T_sn)
  566. if err == nil && l.Id != 0 {
  567. t_R.Code = 200
  568. t_R.Msg = "ok"
  569. t_R.Data = l
  570. b, _ := msgpack.Marshal(&t_R)
  571. _ = lib.Nats.Publish(m.Reply, b)
  572. return
  573. }
  574. t_R.Code = 202
  575. t_R.Msg = "查询失败当前数据为空"
  576. b, _ := msgpack.Marshal(&t_R)
  577. _ = lib.Nats.Publish(m.Reply, b)
  578. return
  579. })
  580. // 发布-订阅 通过sn_id 查询最新设备数据
  581. _, _ = lib.Nats.QueueSubscribe("Read_New_DeviceData", "Read_New_DeviceData", func(m *nats.Msg) {
  582. logs.Debug(fmt.Sprintf("Read_New_DeviceData message: %s\n", string(m.Data)))
  583. type T_R struct {
  584. Code int16 `xml:"Code"`
  585. Msg string `xml:"Msg"`
  586. Data Device.DeviceData_ `xml:"Data"`
  587. }
  588. type T_Req struct {
  589. T_sn string `xml:"T_sn"`
  590. T_id int `xml:"T_id"`
  591. }
  592. var t_R T_R
  593. var t_Req T_Req
  594. err := msgpack.Unmarshal(m.Data, &t_Req)
  595. if err != nil {
  596. t_R.Code = 202
  597. t_R.Msg = "Unmarshal error"
  598. b, _ := msgpack.Marshal(&t_R)
  599. _ = lib.Nats.Publish(m.Reply, b)
  600. return
  601. }
  602. r := Device.Read_DeviceData(t_Req.T_sn, t_Req.T_id)
  603. if r.T_id != 0 {
  604. t_R.Code = 200
  605. t_R.Msg = "ok"
  606. t_R.Data = r
  607. b, _ := msgpack.Marshal(&t_R)
  608. _ = lib.Nats.Publish(m.Reply, b)
  609. return
  610. }
  611. t_R.Data = r
  612. t_R.Code = 202
  613. t_R.Msg = "查询失败当前数据为空"
  614. b, _ := msgpack.Marshal(&t_R)
  615. _ = lib.Nats.Publish(m.Reply, b)
  616. return
  617. })
  618. // 查询大于开始时间的所有数据
  619. _, _ = lib.Nats.QueueSubscribe("Read_Start_Time_DeviceData", "Read_Start_Time_DeviceData", func(m *nats.Msg) {
  620. logs.Debug(fmt.Sprintf("Read_Start_Time_DeviceData message: %s\n", string(m.Data)))
  621. type T_R struct {
  622. Code int16 `xml:"Code"`
  623. Msg string `xml:"Msg"`
  624. Data []Device.DeviceData_ `xml:"Data"`
  625. }
  626. type T_Req struct {
  627. T_sn string `xml:"T_sn"`
  628. T_id int `xml:"T_id"`
  629. StartTime string `xml:"StartTime"`
  630. EndTime string `xml:"EndTime"`
  631. }
  632. var t_R T_R
  633. var t_Req T_Req
  634. err := msgpack.Unmarshal(m.Data, &t_Req)
  635. if err != nil {
  636. t_R.Code = 202
  637. t_R.Msg = "Unmarshal error"
  638. b, _ := msgpack.Marshal(&t_R)
  639. _ = lib.Nats.Publish(m.Reply, b)
  640. return
  641. }
  642. t, count := Device.Read_DeviceData_Start_Time(t_Req.T_sn, t_Req.T_id, t_Req.StartTime, t_Req.EndTime)
  643. if count > 0 {
  644. t_R.Code = 200
  645. t_R.Msg = "ok"
  646. t_R.Data = t
  647. b, _ := msgpack.Marshal(&t_R)
  648. _ = lib.Nats.Publish(m.Reply, b)
  649. return
  650. }
  651. t_R.Code = 202
  652. t_R.Msg = "查询失败当前数据为空"
  653. b, _ := msgpack.Marshal(&t_R)
  654. _ = lib.Nats.Publish(m.Reply, b)
  655. return
  656. })
  657. // 根据sn查询设备信息
  658. _, _ = lib.Nats.QueueSubscribe("Read_Device_ByT_sn", "Read_Device_ByT_sn", func(m *nats.Msg) {
  659. logs.Debug(fmt.Sprintf("Read_Device_ByT_sn message: %s\n", string(m.Data)))
  660. type T_R struct {
  661. Code int16 `xml:"Code"`
  662. Msg string `xml:"Msg"`
  663. Data Device.Device `xml:"Data"`
  664. }
  665. type T_Req struct {
  666. T_sn string `xml:"T_sn"`
  667. }
  668. var t_R T_R
  669. var t_Req T_Req
  670. err := msgpack.Unmarshal(m.Data, &t_Req)
  671. if err != nil {
  672. t_R.Code = 202
  673. t_R.Msg = "Unmarshal error"
  674. b, _ := msgpack.Marshal(&t_R)
  675. _ = lib.Nats.Publish(m.Reply, b)
  676. return
  677. }
  678. t, err := Device.Read_Device_ByT_sn(t_Req.T_sn)
  679. if err == nil {
  680. t_R.Code = 200
  681. t_R.Msg = "ok"
  682. t_R.Data = t
  683. b, _ := msgpack.Marshal(&t_R)
  684. _ = lib.Nats.Publish(m.Reply, b)
  685. return
  686. }
  687. t_R.Code = 202
  688. t_R.Msg = "查询失败当前数据为空"
  689. b, _ := msgpack.Marshal(&t_R)
  690. _ = lib.Nats.Publish(m.Reply, b)
  691. return
  692. })
  693. }