| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- package controllers
- import (
- "bufio"
- "encoding/base64"
- "encoding/json"
- "fmt"
- "io/ioutil"
- "net/http"
- "os"
- "reflect"
- "strconv"
- "strings"
- "time"
- "dashoo.cn/business/permission"
- "dashoo.cn/utils"
- )
- type Series struct {
- Name string `json:"name"`
- Columns []string `json:"columns"`
- Points [][]interface{} `json:"points"`
- }
- // 返回Bootstrap格式的提示信息
- func Alert(message string) (alert string) {
- // Bootstrap提示信息HTML模板
- template := `<div class="alert alert-info">
- <button type="button" class="close" data-dismiss="alert">×</button>
- %s
- </div>
- `
- return fmt.Sprintf(template, message) // 提示信息HTML代码
- }
- // 如果当前分类被选中则返回` selected`字符串
- func IsSelected(categoryId1 int, categoryId2 int) bool {
- if categoryId1 == categoryId2 {
- return true
- } else {
- return false
- }
- }
- // 判断选择状态
- func MenuSelectCss(urlstr, selcturl string) string {
- if urlstr == selcturl {
- return "active teal"
- } else {
- return ""
- }
- }
- //打印相关
- type PrintColType struct {
- JsonType string
- FieldIndex int
- FieldType string
- FieldSize int
- FieldName string
- Required bool
- }
- type PrintData struct {
- Data interface{}
- Cols []PrintColType
- }
- type PrintInfo struct {
- Alldata []PrintData `json:"alldata"`
- Vars []string `json:"vars"`
- }
- func AutoColType(source interface{}) (cols []PrintColType) {
- sObjT := reflect.TypeOf(source).Elem()
- for i := 0; i < sObjT.NumField(); i++ {
- fieldT := sObjT.Field(i)
- var fieldName, jsontype, datatype string = fieldT.Name, fieldT.Type.Kind().String(), "string"
- var fildsize = 2000
- switch fieldT.Type.Kind() {
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- fildsize = 0
- datatype = "integer"
- case reflect.Float32, reflect.Float64:
- datatype = "float"
- fildsize = 0
- }
- cols = append(cols, PrintColType{jsontype, i, datatype, fildsize, fieldName, false})
- }
- return
- }
- //base64 解密
- const (
- base64Table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
- )
- var coder = base64.NewEncoding(base64Table)
- func Base64Decode(src string) string {
- co, _ := coder.DecodeString(src)
- return string(co)
- }
- // 判断选择状态
- func Actionselect(actionsitem, actionsitemname int) string {
- if actionsitem == actionsitemname {
- return "selected"
- } else {
- return ""
- }
- }
- // 判断单选框选择状态
- func Radioselect(actionsitem, actionsitemname int) string {
- if actionsitem == actionsitemname {
- return "checked"
- } else {
- return ""
- }
- }
- // 保留两位小数
- func Get2point(v float64) string {
- return strconv.FormatFloat(v, 'f', 2, 64)
- }
- func Timeisnull(t time.Time) bool {
- var to time.Time
- return t.Equal(to)
- }
- func IsAuthorized(uid int, permissionItemCode string) bool {
- svc := permission.GetPermissionService(utils.DBE)
- return svc.IsAuthorized(utils.ToStr(uid), permissionItemCode)
- }
- //网页导出成文件
- func PageUrltoFile(url, upath, filename string) string {
- response, _ := http.Get(url)
- defer response.Body.Close()
- body, _ := ioutil.ReadAll(response.Body)
- var spit string
- if os.IsPathSeparator('\\') { //前边的判断是否是系统的分隔符
- spit = "\\"
- } else {
- spit = "/"
- }
- var path = upath
- path = strings.Replace(path, "/", spit, -1)
- dir, _ := os.Getwd() //当前目录
- path = dir + path
- os.MkdirAll(path, os.ModePerm)
- file, _ := os.Create(path + filename)
- defer file.Close()
- w := bufio.NewWriter(file)
- w.WriteString(string(body))
- w.Flush()
- return upath + filename
- }
- func AddNum(i1, i2 int) int {
- return i1 + i2
- }
- func GetChannelInfo(code, u, p string, startandend ...int64) (ctype string, cols []string, arrs [][]interface{}) {
- var data []Series
- strUrl := utils.Cfg.MustValue("server", "dataurl") + fmt.Sprintf("/datapoints/channels/%v?u=%v&p=%v", code, u, p)
- if len(startandend) > 0 {
- strUrl = utils.Cfg.MustValue("server", "dataurl") + fmt.Sprintf("/datapoints/channels/%v?u=%v&p=%v&start=%v&end=%v", code, u, p, startandend[0], startandend[1])
- }
- //strUrl := "http://114.215.122.32:9086/v1/datapoints/channels/ceszh01?u=sandbox&p=sandbox&start=1416799160&end=1516899260"
- json.Unmarshal(Apiget(strUrl), &data)
- if len(data) > 0 {
- indexlt := utils.SliceIndexOf(data[0].Columns, "lat")
- indexlg := utils.SliceIndexOf(data[0].Columns, "lng")
- indexw := utils.SliceIndexOf(data[0].Columns, "w")
- indexh := utils.SliceIndexOf(data[0].Columns, "h")
- indexp := utils.SliceIndexOf(data[0].Columns, "p")
- indexbd := utils.SliceIndexOf(data[0].Columns, "bd")
- indextime := utils.SliceIndexOf(data[0].Columns, "time")
- if indexlt > -1 && indexlg > -1 {
- ctype = "gps"
- for i, j := 0, len(data[0].Points); i < j; i++ {
- if indextime > -1 {
- arrs = append(arrs, []interface{}{data[0].Points[j-1-i][indextime], data[0].Points[j-1-i][indexlt], data[0].Points[j-1-i][indexlg]})
- } else {
- arrs = append(arrs, []interface{}{data[0].Points[j-1-i][indexlt], data[0].Points[j-1-i][indexlg]})
- }
- }
- cols = []string{"time", "lt", "lg"}
- } else if indexw > -1 && indexh > -1 && indexp > -1 && indexbd > -1 {
- ctype = "photo"
- for i, j := 0, len(data[0].Points); i < j; i++ {
- if indextime > -1 {
- arrs = append(arrs, []interface{}{data[0].Points[j-1-i][indextime], data[0].Points[j-1-i][indexw], data[0].Points[j-1-i][indexh], data[0].Points[j-1-i][indexp], data[0].Points[j-1-i][indexbd]})
- } else {
- arrs = append(arrs, []interface{}{data[0].Points[j-1-i][indexw], data[0].Points[j-1-i][indexh], data[0].Points[j-1-i][indexp], data[0].Points[j-1-i][indexbd]})
- }
- }
- cols = []string{"time", "w", "h", "p", "bd"}
- } else {
- ctype = "value"
- cols, arrs = ChannelInfoValue(data[0].Columns, data[0].Points)
- }
- return
- }
- return
- }
- func ChannelInfoValue(clos []string, points [][]interface{}) (closnew []string, pointsnew [][]interface{}) {
- colsindexstr := make([]string, 0)
- for k, v := range clos {
- //去除一些非数字的特殊字段
- if v == "sequence_number" || strings.Index(v, "zbackup") == 0 || v == "bbmac" || v == "cjtime" || v == "cstime" {
- colsindexstr = append(colsindexstr, utils.ToStr(k))
- } else {
- closnew = append(closnew, v)
- }
- }
- for i, j := 0, len(points); i < j; i++ {
- ps := make([]interface{}, 0)
- for k, v := range points[j-1-i] {
- if !utils.SliceContains(colsindexstr, utils.ToStr(k)) {
- ps = append(ps, v)
- }
- }
- pointsnew = append(pointsnew, ps)
- }
- return
- }
- 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
- }
- //121.42.183.126 10.251.48.16 //"ccreader", "CC@1511162efvbf2d", "coldcloud", "114.215.122.32:9086"
- // "ccqa", "ccqa@1qaz2wsx", "coldcloudqa", "121.42.183.126:9086"10.251.48.16:9086
- func GetInfluxDBService(qadb string) (string, string, string, string) {
- if qadb == "test" {
- return "ccqa", "ccqa@1qaz2wsx", "coldcloudqa", "47.92.212.59:9086"
- } else {
- return "coldcloud", "cc@1qaz2wsx", "coldcloud", "47.92.212.59:9086"
- }
- }
|