YHGW/do_send_data.go

121 lines
3.3 KiB
Go

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"`
}
// 发送数据
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))
}
}