129 lines
3.5 KiB
Go
129 lines
3.5 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"`
|
||
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))
|
||
}
|
||
}
|
||
|
||
}
|