datareport.go 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. package admin
  2. import (
  3. "fmt"
  4. "strings"
  5. "time"
  6. "github.com/tealeg/xlsx"
  7. "dashoo.cn/labsop"
  8. . "dashoo.cn/qatoolsweb/controllers"
  9. )
  10. type DatareportController struct {
  11. BaseController
  12. }
  13. type datas struct {
  14. SNum int
  15. Temperature float64
  16. Humidity float64
  17. Zbackup8 float64
  18. Co2 float64
  19. ElectricalPower int64
  20. ElectricalSupply int64
  21. Signal float64
  22. Voltage float64
  23. BBVoltage float64
  24. SensorMAC string
  25. BBMac string
  26. Zbackup4 int64 //sensor序列号
  27. SensorNo int64 //序列号(blackbox)
  28. Zbackup3 int64 //移动信号
  29. Zbackup5 string //服务器时间
  30. Zbackup2 string //BBtime
  31. CSTime string //传输时间
  32. CJTime string //采集时间
  33. Zbackup10 float64 //真实温度
  34. Zbackup1 string //请求原数据
  35. }
  36. type headname1 struct {
  37. SNum string
  38. Temperature string
  39. Humidity string
  40. Zbackup8 string
  41. Co2 string
  42. ElectricalPower string
  43. ElectricalSupply string
  44. Signal string
  45. Voltage string
  46. BBVoltage string
  47. SensorMac string
  48. BBMac string
  49. Zbackup4 string
  50. SensorNo string
  51. Zbackup3 string
  52. Zbackup5 string
  53. Zbackup2 string
  54. CSTime string
  55. CJTime string
  56. Zbackup10 string
  57. Zbackup1 string
  58. TimeRange string
  59. }
  60. func (this *DatareportController) DataReport() {
  61. var channel, bbMac string
  62. if this.GetString("sensormac") != "" {
  63. channel = this.GetString("sensormac")
  64. } else {
  65. channel = this.GetString("c")
  66. }
  67. if this.GetString("blackboxmac") != "" {
  68. bbMac = this.GetString("blackboxmac")
  69. } else {
  70. bbMac = this.GetString("bbmac")
  71. }
  72. start := time.Now().Add(-4 * time.Hour).Format("2006-01-02 15:04:05")
  73. end := time.Now().Format("2006-01-02 15:04:05")
  74. if this.GetString("starttime") != "" {
  75. start = this.GetString("starttime")
  76. } else if this.GetString("start") != "" {
  77. start = this.GetString("start")
  78. }
  79. if this.GetString("endtime") != "" {
  80. end = this.GetString("endtime")
  81. } else if this.GetString("end") != "" {
  82. end = this.GetString("end")
  83. }
  84. t := ""
  85. if this.Ctx.Request.Method == "POST" || this.GetString("to") == "excel" || this.GetString("sensormac") != "" {
  86. if channel != "" {
  87. switch this.GetString("t") {
  88. case "3":
  89. starttime, _ := time.ParseInLocation("2006-1-2 15:4:5", start, time.Local)
  90. endtime, _ := time.ParseInLocation("2006-1-2 15:4:5", end, time.Local)
  91. client := labsop.GetLabSopClient(GetInfluxDBService(this.QADB))
  92. sql := fmt.Sprintf("select * from %v where time > %vs and time < %vs", "c"+channel, starttime.Unix()-1, endtime.Unix()+1)
  93. if bbMac != "" {
  94. sql = fmt.Sprintf("select * from %v where time > %vs and time < %vs and bbmac='%v'", "c"+channel, starttime.Unix()-1, endtime.Unix()+1, bbMac)
  95. }
  96. obj := new(labsop.DatapointLabSop)
  97. result := client.QueryLabSop(sql, obj)
  98. t = "3"
  99. liatcount := len(result)
  100. list := make([]labsop.DatapointLabSop, liatcount)
  101. for i, j := 0, liatcount; i < j; i++ {
  102. list[i] = result[j-i-1]
  103. }
  104. this.Data["data"] = list
  105. case "2":
  106. client := labsop.GetLabSopClient(GetInfluxDBService(this.QADB))
  107. t = "2"
  108. sql := fmt.Sprintf("select * from %v order by time desc limit 1 ", "c"+channel)
  109. if bbMac != "" {
  110. sql = fmt.Sprintf("select * from %v where bbmac='%v' order by time desc limit 1 ", "c"+channel, bbMac)
  111. }
  112. obj := new(labsop.DatapointLabSop)
  113. result := client.QueryLabSop(sql, obj)
  114. this.Data["data"] = result
  115. }
  116. }
  117. }
  118. this.Data["t"] = t
  119. this.Data["c"] = channel
  120. this.Data["bbmac"] = bbMac
  121. this.Data["start"] = start
  122. this.Data["end"] = end
  123. if this.GetString("to") == "excel" {
  124. this.TplName = "admin/datareport/excel.tpl" // 页面模板文件
  125. } else {
  126. this.TplName = "admin/datareport/index.tpl" // 页面模板文件
  127. }
  128. }
  129. func (this *DatareportController) DataExcel() {
  130. url := this.GetString("url")
  131. url = "http://" + this.Ctx.Request.Host + strings.Replace(url, " ", "%20", -1)
  132. upath := "/static/file/excel/"
  133. req := PageUrltoFile(url, upath, "blackboxfoodsafe.xls")
  134. this.Ctx.WriteString(req)
  135. }
  136. func (this *DatareportController) ExportData() {
  137. var channel, bbMac string
  138. if this.GetString("sensormac") != "" {
  139. channel = this.GetString("sensormac")
  140. } else {
  141. channel = this.GetString("c")
  142. }
  143. if this.GetString("blackboxmac") != "" {
  144. bbMac = this.GetString("blackboxmac")
  145. } else {
  146. bbMac = this.GetString("bbmac")
  147. }
  148. start := time.Now().Add(-4 * time.Hour).Format("2006-01-02 15:04:05")
  149. end := time.Now().Format("2006-01-02 15:04:05")
  150. if this.GetString("starttime") != "" {
  151. start = this.GetString("starttime")
  152. } else if this.GetString("start") != "" {
  153. start = this.GetString("start")
  154. }
  155. if this.GetString("endtime") != "" {
  156. end = this.GetString("endtime")
  157. } else if this.GetString("end") != "" {
  158. end = this.GetString("end")
  159. }
  160. t := ""
  161. if channel != "" {
  162. client := labsop.GetLabSopClient(GetInfluxDBService(this.QADB))
  163. switch this.GetString("t") {
  164. case "3":
  165. starttime, _ := time.ParseInLocation("2006-1-2 15:4:5", start, time.Local)
  166. endtime, _ := time.ParseInLocation("2006-1-2 15:4:5", end, time.Local)
  167. sql := fmt.Sprintf("select * from %v where time > %vs and time < %vs ", "c"+channel, starttime.Unix()-1, endtime.Unix()+1)
  168. if bbMac != "" {
  169. sql = fmt.Sprintf("select * from %v where time > %vs and time < %vs and bbmac='%v' ", "c"+channel, starttime.Unix()-1, endtime.Unix()+1, bbMac)
  170. }
  171. obj := new(labsop.DatapointLabSop)
  172. result := client.QueryLabSop(sql, obj)
  173. t = "3"
  174. this.Data["data"] = result
  175. f := xlsx.NewFile()
  176. this.SaveXlsx(result, f, channel, start+"至"+end)
  177. f.Save("static/file/excel/sensordatas.xlsx")
  178. this.Ctx.WriteString("static/file/excel/sensordatas.xlsx")
  179. case "2":
  180. sql := fmt.Sprintf("select * from %v order by time desc limit 1 ", "c"+channel)
  181. if bbMac != "" {
  182. sql = fmt.Sprintf("select * from %v where bbmac='%v' order by time desc limit 1 ", "c"+channel, bbMac)
  183. }
  184. obj := new(labsop.DatapointLabSop)
  185. result := client.QueryLabSop(sql, obj)
  186. t = "2"
  187. this.Data["data"] = result
  188. f := xlsx.NewFile()
  189. this.SaveXlsx(result, f, channel, start+"至"+end)
  190. f.Save("static/file/excel/sensordatas.xlsx")
  191. this.Ctx.WriteString("static/file/excel/sensordatas.xlsx")
  192. }
  193. }
  194. this.Data["t"] = t
  195. this.Data["c"] = channel
  196. this.Data["bbmac"] = bbMac
  197. this.Data["start"] = start
  198. this.Data["end"] = end
  199. }
  200. func (this *DatareportController) SaveXlsx(data []labsop.DatapointLabSop, f *xlsx.File, smac string, timerange string) {
  201. // sheet, _ := f.AddSheet("SensorData")
  202. // rowhead := sheet.AddRow()
  203. // headsname := headname1{
  204. // "序号",
  205. // "温度/℃",
  206. // "湿度/%",
  207. // "氧气/%",
  208. // "二氧化碳/‰",
  209. // "电器功率/w",
  210. // "电量/v",
  211. // "信号强度",
  212. // "Sensor电压",
  213. // "BB电压",
  214. // "SensorMac",
  215. // "BBMAC",
  216. // "Sensor序列号",
  217. // "BB序列号",
  218. // "移动信号",
  219. // "服务器时间",
  220. // "BB传输时间",
  221. // "Sensor传输时间",
  222. // "采集时间",
  223. // "真实温度",
  224. // "原数据",
  225. // timerange,
  226. // }
  227. // rowhead.WriteStruct(&headsname, -1)
  228. // num := 0
  229. // for j, l := 0, len(data); j < l; j++ {
  230. // num++
  231. // row := sheet.AddRow()
  232. // testStruct := datas{
  233. // num,
  234. // data[l-j-1].Temperature,
  235. // data[l-j-1].Humidity,
  236. // data[l-j-1].O2,
  237. // data[l-j-1].Co2,
  238. // // data[l-j-1].ElectricalPower,
  239. // // data[l-j-1].ElectricalSupply,
  240. // data[l-j-1].RSSI,
  241. // data[l-j-1].Voltage,
  242. // data[l-j-1].BBVoltage,
  243. // smac,
  244. // data[l-j-1].BBMac,
  245. // data[l-j-1].SensorNo,
  246. // data[l-j-1].BBNo,
  247. // data[l-j-1].SimSignal,
  248. // data[l-j-1].ServiceTime.Format("2006-01-02 15:04:05"),
  249. // data[l-j-1].BBCSTime.Format("2006-01-02 15:04:05"),
  250. // data[l-j-1].CSTime.Format("2006-01-02 15:04:05"),
  251. // data[l-j-1].Time.Format("2006-01-02 15:04:05"),
  252. // data[l-j-1].RealTemperature,
  253. // data[l-j-1].RequestData,
  254. // }
  255. // row.WriteStruct(&testStruct, -1)
  256. // }
  257. // sheet.Cols[0].Width = 10 //设置时间单元格的宽度
  258. // sheet.Cols[1].Width = 10
  259. // sheet.Cols[2].Width = 10
  260. // sheet.Cols[3].Width = 10
  261. // sheet.Cols[4].Width = 10
  262. // sheet.Cols[5].Width = 10
  263. // sheet.Cols[6].Width = 10
  264. // sheet.Cols[7].Width = 10
  265. // sheet.Cols[8].Width = 10
  266. // sheet.Cols[9].Width = 10
  267. // sheet.Cols[10].Width = 15
  268. // sheet.Cols[10].Width = 10
  269. // sheet.Cols[11].Width = 10
  270. // sheet.Cols[12].Width = 10
  271. // sheet.Cols[13].Width = 20
  272. // sheet.Cols[14].Width = 20
  273. // sheet.Cols[15].Width = 20
  274. // sheet.Cols[16].Width = 20
  275. // sheet.Cols[17].Width = 10
  276. // sheet.Cols[18].Width = 200
  277. }