ipCastControlService.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. package edge_service
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "io/ioutil"
  7. "iot_manager_service/config"
  8. "iot_manager_service/util/common"
  9. "iot_manager_service/util/logger"
  10. "net/http"
  11. "strconv"
  12. "strings"
  13. )
  14. // IpCastControlService ip音柱连续控制接口
  15. type IpCastControlService struct{}
  16. type IpCastControlReq struct {
  17. Action string `json:"action"`
  18. PostData map[string]interface{} `json:"postData"`
  19. }
  20. type TermInfo struct {
  21. AreaID int `json:"AreaID"`
  22. From string `json:"From"`
  23. ID int `json:"ID"`
  24. IP string `json:"IP"`
  25. Name string `json:"Name"`
  26. Online int `json:"Online"`
  27. State int `json:"State"`
  28. Tasks int `json:"Tasks"`
  29. Vol int `json:"Vol"`
  30. }
  31. // GetTermIds 取设备列表和状态
  32. func (f IpCastControlService) GetTermIds() (terminfos map[string]TermInfo, err error) {
  33. var reqData IpCastControlReq
  34. reqData.Action = "GetTermIds"
  35. m := make(map[string]interface{})
  36. reqData.PostData = m
  37. mapStr, err := f.RequestApi(reqData)
  38. if err != nil {
  39. return terminfos, err
  40. }
  41. terms, ok := mapStr["Terms"]
  42. if ok {
  43. marshal, _ := json.Marshal(terms)
  44. var terminfosList []TermInfo
  45. err := json.Unmarshal(marshal, &terminfosList)
  46. terms := make(map[string]TermInfo)
  47. for _, info := range terminfosList {
  48. info.Vol = int(common.MapRange(float64(info.Vol), 1, 16, 1, 100))
  49. terms[info.Name] = info
  50. }
  51. terminfos = terms
  52. if err != nil {
  53. return nil, err
  54. }
  55. return terminfos, nil
  56. }
  57. return terminfos, err
  58. }
  59. // SetVol 设置音量
  60. func (f IpCastControlService) SetVol(sn string, vol int) error {
  61. terminfos, err2 := f.GetTermIds()
  62. if err2 != nil {
  63. return err2
  64. }
  65. term, ok := terminfos[sn]
  66. if !ok {
  67. return errors.New("devices not found\tsn=" + sn)
  68. }
  69. var reqData IpCastControlReq
  70. reqData.Action = "TermVolSet"
  71. m := make(map[string]interface{})
  72. m["TermIds"] = []int{term.ID}
  73. m["Volume"] = int(common.MapRange(float64(vol), 1, 100, 1, 16))
  74. reqData.PostData = m
  75. _, err := f.RequestApi(reqData)
  76. if err != nil {
  77. return err
  78. }
  79. return nil
  80. }
  81. // RequestApi 公共请求
  82. func (f IpCastControlService) RequestApi(reqData IpCastControlReq) (map[string]interface{}, error) {
  83. cfg := config.Instance()
  84. url := fmt.Sprintf("%v/%v", cfg.Foreign.IpCastEdgeUrl, reqData.Action)
  85. method := "POST"
  86. client := &http.Client{}
  87. marshal, _ := json.Marshal(reqData.PostData)
  88. //fmt.Printf("playJson = %v \n", string(marshal))
  89. req, err := http.NewRequest(method, url, strings.NewReader(string(marshal)))
  90. if err != nil {
  91. logger.Logger.Errorf("IpCastControlService NewRequest %v", err.Error())
  92. return nil, err
  93. }
  94. req.Header.Add("Content-Type", "application/json")
  95. res, err := client.Do(req)
  96. if err != nil {
  97. logger.Logger.Errorf("IpCastControlService Do %v", err.Error())
  98. return nil, err
  99. }
  100. defer res.Body.Close()
  101. body, err := ioutil.ReadAll(res.Body)
  102. if err != nil {
  103. logger.Logger.Errorf("IpCastControlService ReadAll %v", err.Error())
  104. return nil, err
  105. }
  106. var IpCastControlRes map[string]interface{}
  107. err = json.Unmarshal(body, &IpCastControlRes)
  108. if err != nil {
  109. logger.Logger.Errorf("IpCastControlService Unmarshal %v", err.Error())
  110. return nil, err
  111. }
  112. //fmt.Printf("IpCastControlRes = %v \n", IpCastControlRes)
  113. if IpCastControlRes["Ret"] == 1000 {
  114. fmt.Printf("RequestApi url = %v \n", url)
  115. fmt.Printf("reqData = %v \n", reqData)
  116. logger.Logger.Errorf("IpCastControlService %v", IpCastControlRes)
  117. return nil, err
  118. }
  119. return IpCastControlRes, nil
  120. }
  121. type uploadMp3Data struct {
  122. Remark string `json:"Remark"`
  123. Ret int `json:"Ret"`
  124. NSeconds int `json:"nSeconds"`
  125. }
  126. // UploadMp3GetFileId 上传素材 到ip音柱服务端
  127. func (f IpCastControlService) UploadMp3GetFileId(imgUrl string, fileName string) (string, error) {
  128. cfg := config.Instance()
  129. url := fmt.Sprintf("%v/UploadFile:%v", cfg.Foreign.IpCastEdgeUrl, fileName)
  130. method := "POST"
  131. response, err := http.Get(imgUrl)
  132. if err != nil {
  133. panic(err)
  134. }
  135. defer response.Body.Close()
  136. client := &http.Client{}
  137. req, err := http.NewRequest(method, url, response.Body)
  138. if err != nil {
  139. fmt.Println(err)
  140. logger.Logger.Errorf("IpCastControlService UploadMp3GetFileId 1 %v", err.Error())
  141. return "", err
  142. }
  143. req.Header.Add("Content-Type", "audio/mpeg")
  144. res, err := client.Do(req)
  145. if err != nil {
  146. fmt.Println(err)
  147. logger.Logger.Errorf("IpCastControlService UploadMp3GetFileId 2 %v", err.Error())
  148. return "", err
  149. }
  150. defer res.Body.Close()
  151. body, err := ioutil.ReadAll(res.Body)
  152. if err != nil {
  153. fmt.Println(err)
  154. logger.Logger.Errorf("IpCastControlService UploadMp3GetFileId 3 %v", err.Error())
  155. return "", err
  156. }
  157. var resData uploadMp3Data
  158. err = json.Unmarshal(body, &resData)
  159. if err != nil {
  160. return "", err
  161. }
  162. if resData.Ret > 0 {
  163. return strconv.Itoa(resData.Ret), nil
  164. }
  165. return "", errors.New("上传失败啦")
  166. }
  167. func (f IpCastControlService) SetStop() error {
  168. var reqData IpCastControlReq
  169. reqData.Action = "StopMp3ByID"
  170. m := make(map[string]interface{})
  171. m["ID"] = 0
  172. reqData.PostData = m
  173. _, err := f.RequestApi(reqData)
  174. return err
  175. }
  176. // 发布节目
  177. func (f IpCastControlService) PushPlay(playJson string, ptype int) error {
  178. var reqData IpCastControlReq
  179. if ptype == 1 {
  180. reqData.Action = "PlayMp3ByID"
  181. } else {
  182. reqData.Action = "PlayText"
  183. }
  184. m := make(map[string]interface{})
  185. fmt.Printf("playJson = %v \n", playJson)
  186. err := json.Unmarshal([]byte(playJson), &m)
  187. reqData.PostData = m
  188. if err != nil {
  189. return err
  190. }
  191. _, err = f.RequestApi(reqData)
  192. return err
  193. }