YHGW/do_send_data.go

129 lines
3.5 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
//完善 如果没有http前缀则自动加上
payload := strings.NewReader("------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"data\"\r\n\r\n" + post_data + "\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--")
req, error := http.NewRequest("POST", url, payload)
if error != nil{
log.Println("new request err:",error)
}else{
req.Header.Add("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW")
res, err := http.DefaultClient.Do(req)
if err != nil {
log.Println("do post err:",err)
} else {
// log.Println("end close resp")
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
log.Println("post_to_server:", string(body))
}
}
}