| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- package controllers
- import (
- "bytes"
- "encoding/json"
- "fmt"
- "io"
- "io/ioutil"
- "math/rand"
- "net/http"
- "os"
- "strconv"
- "strings"
- "time"
- "github.com/axgle/mahonia"
- "github.com/nsqio/go-nsq"
- "dashoo.cn/base_common/business/permission"
- "dashoo.cn/base_common/labsop"
- "dashoo.cn/base_common/utils"
- )
- var (
- Nsqdtcpaddr string
- Nsqtopic string
- SalesAdmin string = "SalesAdmin" //分销商管理员
- ProjectSourse string = "coldchain"
- )
- type blackboxddata struct {
- Code string
- Datapoint labsop.DatapointLabSop
- }
- // 保留两位小数
- func Get2point(v float64) string {
- return strconv.FormatFloat(v, 'f', 2, 64)
- }
- //格式化时间
- func FormatTime(timein time.Time) string {
- var timestring = timein.Format("2006-01-02")
- if strings.Contains("0001-01-01", timestring) {
- return ""
- } else {
- return timein.Format("2006-01-02")
- }
- }
- func Timeisnull(t time.Time) bool {
- var to time.Time
- return t.Equal(to)
- }
- func Apiget(str string) (body []byte) {
- str = strings.Replace(str, " ", "%20", -1)
- response, _ := http.Get(str)
- if response != nil {
- defer response.Body.Close()
- body, _ = ioutil.ReadAll(response.Body)
- }
- //json.Unmarshal(body, &devices)
- return
- }
- func Apipost(strUrl, method string, postDict interface{}) (body []byte) {
- strUrl = strings.Replace(strUrl, " ", "%20", -1)
- httpClient := &http.Client{
- //Transport:nil,
- //CheckRedirect: nil,
- }
- var httpReq *http.Request
- b, _ := json.Marshal(postDict)
- postBytesReader := bytes.NewReader(b)
- httpReq, _ = http.NewRequest(method, strUrl, postBytesReader)
- httpReq.Header.Add("Content-Type", "application/json")
- response, _ := httpClient.Do(httpReq)
- body, _ = ioutil.ReadAll(response.Body)
- return
- }
- func SaveDirectory(path string) {
- os.MkdirAll(path, os.ModePerm)
- }
- // 上传图片
- func UploadImage(typename, path string, r *http.Request) string {
- fn, _, _ := r.FormFile("file")
- defer fn.Close()
- var spit string
- if os.IsPathSeparator('\\') { //前边的判断是否是系统的分隔符
- spit = "\\"
- } else {
- spit = "/"
- }
- var urlpath = path
- path = strings.Replace(path, "/", spit, -1)
- dir, _ := os.Getwd() //当前目录
- path = dir + path + spit + utils.ToStr(time.Now().Year()) + spit + fmt.Sprintf("%s", time.Now().Format("1")) + spit
- os.MkdirAll(path, os.ModePerm)
- var name = utils.GetGuid() + "." + typename
- f, _ := os.Create(path + name)
- defer f.Close()
- io.Copy(f, fn)
- return urlpath + utils.ToStr(time.Now().Year()) + "/" + fmt.Sprintf("%s", time.Now().Format("1")) + "/" + name
- }
- func GetTriggerItemNameByItem(item int) (name string) {
- switch item {
- case 1:
- name = ">"
- case 2:
- name = ">="
- case 3:
- name = "<"
- case 4:
- name = "<="
- case 5:
- name = "="
- }
- return
- }
- func GetChannelLast(code string) (lastdata labsop.DatapointLabSop, err error) {
- return labsop.GetBoxLastdata(strings.Replace(code, "c", "", 1))
- }
- func GetChannelCacheLast(code string) (lastdata labsop.BoxCache, err error) {
- return labsop.GetBox(strings.Replace(code, "c", "", 1))
- }
- func WriteAlertBindValue(code, value string) (err error) {
- key := strings.Replace(code, "c", "", 1)
- data := labsop.DatapointLabSop{Time: time.Now(), RequestData: value}
- err = labsop.UpdateBoxLastdata(key, data)
- if err == nil {
- cfg := nsq.NewConfig()
- Producernsq, _ := nsq.NewProducer(Nsqdtcpaddr, cfg)
- bdata, err := json.Marshal(blackboxddata{key, data})
- if err == nil {
- err = Producernsq.Publish(Nsqtopic, bdata)
- }
- }
- return
- }
- func GetChannelInfov2(code string, startandend ...int64) (cols []string, arrs [][]interface{}) {
- client := labsop.GetLabSopClient("coldcloud", "cc@1qaz2wsx", "coldcloud", "114.215.27.56:9086")
- sql := fmt.Sprintf("select * from %v ", code)
- if len(startandend) == 2 {
- sql = sql + fmt.Sprintf(" where time>%vs and time<%vs ", startandend[0], startandend[1])
- } else {
- sql = sql + " order by time desc limit 1"
- }
- data, err := client.QueryOneResultByCommand(sql)
- if err == nil && len(data) > 0 && len(data[0].Values) > 0 {
- cols, arrs = data[0].Columns, data[0].Values
- }
- return
- }
- func GetChannelBysql(sql string) (cols []string, arrs [][]interface{}) {
- client := labsop.GetLabSopClient("coldcloud", "cc@1qaz2wsx", "coldcloud", "47.92.249.239:9086")
- data, err := client.QueryOneResultByCommand(sql)
- if err == nil && len(data) > 0 && len(data[0].Values) > 0 {
- cols, arrs = data[0].Columns, data[0].Values
- }
- return
- }
- func CodertoGBK(str string) string {
- dec := mahonia.NewDecoder("UTF-8")
- enc := mahonia.NewEncoder("GBK")
- return enc.ConvertString(dec.ConvertString(str))
- }
- func CoderGBKtoUTF8(str string) string {
- dec := mahonia.FallbackDecoder(mahonia.NewDecoder("GBK"), mahonia.NewDecoder("UTF-8"))
- return dec.ConvertString(str)
- }
- //设备类型汇总
- const (
- Device_Box = "0" //设备,普通box
- Device_Alertor = "4" //设备,报警器
- ChannelItem_Sensor = "0,6,7,9,10,13,14,17,26,25,31" //sensor,常温,深低温,o2,co2,特殊(隐藏湿度的常温),功率
- ChannelItem_Report = "0,6,7,9,10,14" //sensor报表使用,不需要功率,常温,深低温,o2,co2,特殊(隐藏湿度的常温)
- ChannelItem_Box = "1" //sensor,box自身数据
- ChannelItem_TAndH = "0" //sensor,常温,显示温湿度
- ChannelItem_Temperature = "6,10" //sensor,深低温,特殊,显示温度
- ChannelItem_Co2 = "9,26" //sensor,co2,显示温湿度,co2
- ChannelItem_O2 = "7,17" //sensor,o2,显示温湿度,O2
- ChannelItem_Power = "13" //sensor,功率插座,显示功率,电量
- ChannelItem_HaveT = "0,6,7,9,10" //含温度数据
- ChannelItem_HaveV = "0,6,7,9,10" //含电压数据
- ChannelItem_HaveH = "0,7,9" //含湿度数据
- ChannelItem_HaveCO2 = "9,26" //含二氧化碳数据,co2
- ChannelItem_HaveO2 = "7,17" //含氧气数据,o2
- Alertor_Alarm = "2,4,5,8,12" //报警器,普通,纯报警,纯正常,android,条屏
- Alertor_AlarmBindData = "3" //报警器,绑定数据
- Alertor_Alarm1 = "2" //报警器,普通
- Alertor_Alarm3 = "4" //报警器,纯报警
- Alertor_AlarmOnlyData = "5" //报警器,纯正常
- Alertor_AlarmAndroid = "8" //报警器,android
- Alertor_AlarmBaoJing = "2,4,5,8" //报警器,报警
- Alertor_AlarmLed = "12" //报警器,条屏
- Alertor_NeedAction = "2,4,5,8" //报警器,需要添加动作
- Alertor_NotNeedAction = "12" //报警器,不需要添加动作
- )
- //设备类型判断
- func DeviceItemContain(itemenum, item string) bool {
- return utils.SliceContains(strings.Split(itemenum, ","), item)
- }
- func DeviceItemContainint(itemenum string, item int) bool {
- return utils.SliceContains(strings.Split(itemenum, ","), utils.ToStr(item))
- }
- func StringIsContain(strs string, str ...interface{}) bool {
- if len(str) == 1 {
- return utils.SliceContains(strings.Split(strs, ","), utils.ToStr(str[0]))
- } else if len(str) == 2 {
- return utils.SliceContains(strings.Split(strs, ","), utils.ToStr(str[0])) || utils.SliceContains(strings.Split(strs, ","), utils.ToStr(str[1]))
- }
- return false
- }
- func IsAuthorized(uid string, permissionItemCode string) bool {
- svc := permission.GetPermissionService(utils.DBE)
- return svc.IsAuthorized(uid, permissionItemCode)
- }
- func randInt(min int, max int) int {
- if max-min <= 0 {
- return min
- }
- rand.Seed(time.Now().UTC().UnixNano())
- return min + rand.Intn(max-min)
- }
- //比较大小
- func Compare(item int, v1, v2 float64) bool {
- istrue := false
- switch item {
- case 1:
- istrue = v1 > v2
- case 2:
- istrue = v1 >= v2
- case 3:
- istrue = v1 < v2
- case 4:
- istrue = v1 <= v2
- case 5:
- istrue = v1 == v2
- }
- return istrue
- }
|