package main import ( "encoding/json" "io/ioutil" "log" "net/http" "strings" ) type P1001 struct { CODE int `json:"code"` GATEWAY_INFO Gateway_info `json:"gateway_info"` DEVICES []Device `json:"devices"` } type P1004_6 struct { CODE uint16 `json:"code"` ID string `json:"id"` VERSION string `json:"version"` ONLINE bool `json:"online"` DATA map[string]interface{} `json:"data"` TIMESTAMP int64 `json:"timestamp"` } // 发送数据 func send_data(code int, data ...Device) { log.Println("************************************************************************") data_buf := string(build_data(code, data)) log.Println(data_buf) post_to_server(data_buf) log.Println("************************************************************************") } // 生成对应code数据 func build_data(code int, data []Device) []byte { switch code { case 1001: var R_data P1001 R_data.CODE = 1001 R_data.DEVICES = make([]Device, 0) R_data.GATEWAY_INFO = conf.GATEWAY_INFO DEVICEDATAS.RLock() for _, i := range DEVICEDATAS.DATA { R_data.DEVICES = append(R_data.DEVICES, i) } DEVICEDATAS.RUnlock() data_buf, _ := json.Marshal(R_data) return data_buf case 1004: var R_data P1004_6 R_data.CODE = 1004 R_data.ID = rl_data.MACADDRESS R_data.VERSION = "hk_kll_v1" R_data.ONLINE = true R_data.DATA = make(map[string]interface{}) R_data.DATA["starttime"] = rl_data.PEOPLECOUNTING.TIMERANGE.STARTTIME R_data.DATA["endtime"] = rl_data.PEOPLECOUNTING.TIMERANGE.ENDTIME R_data.DATA["enter"] = rl_data.PEOPLECOUNTING.ENTER R_data.DATA["pass"] = rl_data.PEOPLECOUNTING.PASS R_data.DATA["exit"] = rl_data.PEOPLECOUNTING.EXIT traffic_data.TRAFFIC = traffic_data.TRAFFIC + rl_data.PEOPLECOUNTING.ENTER data_buf, _ := json.Marshal(R_data) return data_buf case 1005: var R_data P1004_6 R_data.CODE = 1005 R_data.ID = data[0].ID R_data.VERSION = data[0].VERSION R_data.ONLINE = data[0].ONLINE R_data.DATA = data[0].DATA data_buf, _ := json.Marshal(R_data) return data_buf case 1006: var R_data P1004_6 R_data.CODE = 1006 R_data.ID = pj_data.ID R_data.VERSION = "yunhorn_pj_c_v1" R_data.ONLINE = true R_data.DATA = make(map[string]interface{}) R_data.DATA["feedback"] = pj_data.FEEDBACK switch pj_data.FEEDBACK { case "棒棒哒": good++ case "没厕纸": bad++ case "气味难闻": bad++ case "地面湿滑": bad++ case "洗手台不洁": bad++ case "厕位不洁": bad++ case "其他": bad++ } var data float64 data = good / (good + bad) satisfaction_data.SATISFACTION = Round(data, 2) data_buf, _ := json.Marshal(R_data) return data_buf } return nil } // post到服务器 func post_to_server(post_data string) { url := conf.POST_TO_SERVER payload := strings.NewReader("------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"data\"\r\n\r\n" + post_data + "\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW") res, err := http.DefaultClient.Do(req) if err != nil { log.Println(err) } else { defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) log.Println("post_to_server:", string(body)) } }