xph_api.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. package xphapi
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "io/ioutil"
  8. "net/http"
  9. "strconv"
  10. "strings"
  11. "time"
  12. )
  13. type Xph struct {
  14. baseUrl string
  15. back map[int][]Entity
  16. }
  17. func NewXphObject(baseUrl string) *Xph {
  18. return &Xph{
  19. baseUrl: baseUrl,
  20. back: make(map[int][]Entity),
  21. }
  22. }
  23. // NewGetToken 获取token
  24. func (x *Xph) GetToken(username, password string) string {
  25. // 超时时间:5秒
  26. client := &http.Client{Timeout: 5 * time.Second}
  27. loginParam := map[string]string{"username": username, "password": password}
  28. jsonStr, _ := json.Marshal(loginParam)
  29. resp, err := client.Post(x.baseUrl+"/login", "application/json", bytes.NewBuffer(jsonStr))
  30. if err != nil {
  31. fmt.Print(err)
  32. return ""
  33. }
  34. defer resp.Body.Close()
  35. result, _ := ioutil.ReadAll(resp.Body)
  36. var token Token
  37. _ = json.Unmarshal(result, &token)
  38. return token.Token
  39. }
  40. // NewGetDevices 获取设备ID
  41. func (x *Xph) GetDevices(username, token string) []Device {
  42. client := &http.Client{Timeout: 5 * time.Second}
  43. req, err := http.NewRequest("GET", x.baseUrl+"/user/"+username, nil)
  44. if err != nil {
  45. return nil
  46. }
  47. req.Header.Set("token", token)
  48. resp, err := client.Do(req)
  49. if err != nil {
  50. return nil
  51. }
  52. defer resp.Body.Close()
  53. body, _ := ioutil.ReadAll(resp.Body)
  54. var user User
  55. _ = json.Unmarshal(body, &user)
  56. return user.Devices
  57. }
  58. // NewGetDevices 获取设备ID, 包括虫情
  59. func (x *Xph) GetAllDevices(username, token string) []CommonDevice {
  60. client := &http.Client{Timeout: 5 * time.Second}
  61. req, err := http.NewRequest("GET", x.baseUrl+"/user/"+username, nil)
  62. if err != nil {
  63. return nil
  64. }
  65. req.Header.Set("token", token)
  66. resp, err := client.Do(req)
  67. if err != nil {
  68. return nil
  69. }
  70. defer resp.Body.Close()
  71. body, _ := ioutil.ReadAll(resp.Body)
  72. var user User
  73. _ = json.Unmarshal(body, &user)
  74. var devs []CommonDevice
  75. devs = append(devs, user.Pests...)
  76. for _, device := range user.Devices {
  77. dev := CommonDevice{
  78. DeviceID: strconv.Itoa(device.DeviceID),
  79. DeviceName: device.DeviceName,
  80. DeviceRemark: device.DeviceRemark,
  81. SIM: device.SIM,
  82. }
  83. devs = append(devs, dev)
  84. }
  85. return devs
  86. }
  87. func ProcessAbnormalData(entities []Entity, back []Entity) {
  88. for index, entity := range entities {
  89. value := strings.Split(entity.EValue, ".")
  90. v := strings.Join(value, "")
  91. if v == "32767" {
  92. entities[index] = back[index]
  93. }
  94. }
  95. copy(back, entities)
  96. }
  97. func (x *Xph) GetDeviceRealData(facId int) (DataEntity, error) {
  98. var dataEntity DataEntity
  99. resp, err := http.Get(x.baseUrl + "/intfa/queryData/" + strconv.Itoa(facId))
  100. if err != nil {
  101. return dataEntity, errors.New("获取实时数据异常:" + err.Error())
  102. }
  103. result, err := ioutil.ReadAll(resp.Body)
  104. if err != nil {
  105. return dataEntity, errors.New("读取响应 body异常:" + err.Error())
  106. }
  107. err = json.Unmarshal(result, &dataEntity)
  108. if err != nil {
  109. return dataEntity, errors.New("解析响应 body异常:" + err.Error())
  110. }
  111. if len(x.back[facId]) == 0 {
  112. x.back[facId] = make([]Entity, 32)
  113. copy(x.back[facId], dataEntity.Entity)
  114. }
  115. ProcessAbnormalData(dataEntity.Entity, x.back[facId])
  116. return dataEntity, err
  117. }
  118. func (x *Xph) GetDeviceRealState(facId int) (CurrentData, error) {
  119. var data CurrentData
  120. resp, err := http.Get(x.baseUrl + "/data/" + strconv.Itoa(facId))
  121. if err != nil {
  122. return data, errors.New("获取实时数据异常:" + err.Error())
  123. }
  124. result, err := ioutil.ReadAll(resp.Body)
  125. if err != nil {
  126. return data, errors.New("读取响应 body异常:" + err.Error())
  127. }
  128. err = json.Unmarshal(result, &data)
  129. if err != nil {
  130. return data, errors.New("解析响应 body异常:" + err.Error())
  131. }
  132. return data, err
  133. }
  134. func (x *Xph) PostControlRelay(id, index, state int, token string) (bool, error) {
  135. client := &http.Client{Timeout: 30 * time.Second}
  136. relayParam := map[string]int{"deviceId": id, "relayNum": index, "relayState": state}
  137. jsonStr, _ := json.Marshal(relayParam)
  138. req, err := http.NewRequest("POST", x.baseUrl+"/relay", bytes.NewBuffer(jsonStr))
  139. if err != nil {
  140. return false, err
  141. }
  142. req.Header.Set("token", token)
  143. req.Header.Set("Content-Type", "application/json")
  144. resp, err := client.Do(req)
  145. if err != nil {
  146. return false, err
  147. }
  148. defer resp.Body.Close()
  149. body, _ := ioutil.ReadAll(resp.Body)
  150. return string(body) == "true", nil
  151. }
  152. func (x *Xph) GetDeviceData(id, token string) (data DeviceData, err error) {
  153. client := &http.Client{Timeout: 5 * time.Second}
  154. req, err := http.NewRequest("GET", x.baseUrl+"/screen/datas?deviceId="+id, nil)
  155. if err != nil {
  156. return
  157. }
  158. req.Header.Set("token", token)
  159. req.Header.Set("content-type", "application/x-www-form-urlencoded")
  160. resp, err := client.Do(req)
  161. if err != nil {
  162. return
  163. }
  164. defer resp.Body.Close()
  165. body, _ := ioutil.ReadAll(resp.Body)
  166. err = json.Unmarshal(body, &data)
  167. return
  168. }
  169. type PestImageRespond struct {
  170. DataTime string `json:"dataTime"`
  171. Image string `json:"image"`
  172. Imei string `json:"imei"`
  173. Result string `json:"result"`
  174. ResultImage string `json:"resultImage"`
  175. }
  176. func (x *Xph) GetPestImage(id, token string) (image PestImageRespond, err error) {
  177. client := &http.Client{Timeout: 5 * time.Second}
  178. req, err := http.NewRequest("GET", x.baseUrl+"/pest/image/"+id, nil)
  179. if err != nil {
  180. return
  181. }
  182. req.Header.Set("token", token)
  183. req.Header.Set("content-type", "application/x-www-form-urlencoded")
  184. resp, err := client.Do(req)
  185. if err != nil {
  186. return
  187. }
  188. defer resp.Body.Close()
  189. body, _ := ioutil.ReadAll(resp.Body)
  190. err = json.Unmarshal(body, &image)
  191. return
  192. }