Data.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  1. package controllers
  2. import (
  3. "Cold_Api/Nats/NatsServer"
  4. "Cold_Api/conf"
  5. "Cold_Api/controllers/lib"
  6. "Cold_Api/models/Account"
  7. "Cold_Api/models/Device"
  8. "Cold_Api/models/RawSql"
  9. "fmt"
  10. beego "github.com/beego/beego/v2/server/web"
  11. "github.com/signintech/gopdf"
  12. "github.com/xuri/excelize/v2"
  13. "math"
  14. "os"
  15. "strconv"
  16. "strings"
  17. "time"
  18. )
  19. type DataController struct {
  20. beego.Controller
  21. Admin_r *Account.Admin // 登陆的用户
  22. T_pid int // 公司id
  23. }
  24. func (c *DataController) Prepare() {
  25. GetCookie := c.Ctx.GetCookie("User_tokey")
  26. GetString := c.GetString("User_tokey")
  27. User_tokey := GetCookie
  28. if len(User_tokey) == 0 {
  29. User_tokey = GetString
  30. }
  31. c.Admin_r = lib.Admin_r
  32. T_pid := c.Admin_r.T_pid
  33. if T_pid == 0 {
  34. T_pid, _ = Account.Redis_Tokey_T_pid_Get(User_tokey)
  35. }
  36. c.T_pid = T_pid
  37. }
  38. // 获取传感器
  39. func (c *DataController) Device_Sensor_Get() {
  40. T_sn := c.GetString("T_sn")
  41. T_id, _ := c.GetInt("T_id")
  42. //c.Data["Class_List"] = Device.Read_Class_All_1()
  43. DeviceSensor_r, err := Device.Read_DeviceSensor_ByTsn_Tid(T_sn, T_id)
  44. if err != nil {
  45. c.Data["json"] = lib.JSONS{Code: 201, Msg: "err!"}
  46. c.ServeJSON()
  47. return
  48. }
  49. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.DeviceSensorToDeviceSensor_R(DeviceSensor_r)}
  50. c.ServeJSON()
  51. return
  52. }
  53. // 传感器列表
  54. func (c *DataController) Device_Sensor_List() {
  55. type R_JSONS struct {
  56. //必须的大写开头
  57. DeviceSensor_lite []Device.DeviceSensor_R
  58. Num int
  59. Page int
  60. Page_size int
  61. Pages []lib.Page_T
  62. }
  63. var r_jsons R_JSONS
  64. page, _ := c.GetInt("page")
  65. if page < 1 {
  66. page = 1
  67. }
  68. page_z, _ := c.GetInt("page_z")
  69. if page_z == 0 {
  70. page_z = conf.Page_size
  71. }
  72. T_sn := c.GetString("T_sn")
  73. T_Class_id, _ := c.GetInt("T_calssid")
  74. T_type, T_type_err := c.GetInt("T_type")
  75. if T_type_err != nil {
  76. T_type = -1
  77. }
  78. T_name := c.GetString("T_name")
  79. T_RealTime, T_RealTime_err := c.GetInt("T_RealTime")
  80. if T_RealTime_err != nil {
  81. T_RealTime = 0
  82. }
  83. var cnt int64
  84. Device.Read_DeviceSensorParameter_All_Map(T_sn, 0)
  85. r_jsons.DeviceSensor_lite, cnt = Device.Read_DeviceSensor_List_For_Data(c.T_pid, T_sn, T_name, T_Class_id, T_type, T_RealTime, page, page_z)
  86. page_size := math.Ceil(float64(cnt) / float64(page_z))
  87. r_jsons.Page = int(page)
  88. r_jsons.Page_size = int(page_size)
  89. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  90. r_jsons.Num = int(cnt)
  91. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  92. c.ServeJSON()
  93. return
  94. }
  95. // 传感器数据列表
  96. func (c *DataController) Device_Sensor_Data() {
  97. page, _ := c.GetInt("page")
  98. page_z, _ := c.GetInt("page_z")
  99. T_id, _ := c.GetInt("T_id")
  100. SN := c.GetString("T_sn")
  101. Time_start := c.GetString("Time_start")
  102. Time_end := c.GetString("Time_end")
  103. type R_JSONS struct {
  104. //必须的大写开头
  105. DeviceSensor_data []Device.DeviceData_R
  106. Num int
  107. Page int
  108. Page_size int
  109. Pages []lib.Page_T
  110. }
  111. var r_jsons R_JSONS
  112. var cnt int
  113. Device.Read_DeviceSensorParameter_All_Map(SN, T_id)
  114. r_jsons.DeviceSensor_data, cnt = Device.Read_DeviceData_ById_List(SN, T_id, Time_start, Time_end, page, page_z)
  115. page_size := math.Ceil(float64(cnt) / float64(page_z))
  116. r_jsons.Page = page
  117. r_jsons.Page_size = int(page_size)
  118. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  119. r_jsons.Num = cnt
  120. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  121. c.ServeJSON()
  122. return
  123. }
  124. // 设备数据
  125. func (c *DataController) Device_Sensor_Data_More() {
  126. page, _ := c.GetInt("page")
  127. if page < 1 {
  128. page = 1
  129. }
  130. page_z, _ := c.GetInt("page_z")
  131. if page_z < 1 {
  132. page_z = conf.Page_size
  133. }
  134. T_snid := c.GetString("T_snid")
  135. Time_start := c.GetString("Time_start")
  136. Time_end := c.GetString("Time_end")
  137. if len(T_snid) < 10 {
  138. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  139. c.ServeJSON()
  140. return
  141. }
  142. type R_JSONS struct {
  143. //必须的大写开头
  144. Data []Device.DeviceData_R
  145. Num int64
  146. Page int
  147. Page_size int
  148. }
  149. var r_jsons R_JSONS
  150. r_jsons.Data, r_jsons.Num = Device.Read_DeviceData_By_T_snid_List(T_snid, Time_start, Time_end, page, page_z)
  151. r_jsons.Page = page
  152. r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
  153. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  154. c.ServeJSON()
  155. return
  156. }
  157. // -------------------------------------
  158. // 导出传感器数据列表
  159. func (c *DataController) Device_Sensor_Data_Excel() {
  160. T_snid := c.GetString("T_snid")
  161. Time_start := c.GetString("Time_start")
  162. Time_end := c.GetString("Time_end")
  163. if len(T_snid) < 10 {
  164. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  165. c.ServeJSON()
  166. return
  167. }
  168. var DeviceSensor_data []Device.DeviceData_R
  169. DeviceSensor_data, _ = Device.Read_DeviceData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999)
  170. f := excelize.NewFile() // 设置单元格的值
  171. // 这里设置表头
  172. f.SetCellValue("Sheet1", "A1", "编号")
  173. f.SetCellValue("Sheet1", "B1", "传感器名称")
  174. f.SetCellValue("Sheet1", "C1", "温度℃")
  175. f.SetCellValue("Sheet1", "D1", "湿度%")
  176. f.SetCellValue("Sheet1", "E1", "温度范围 ℃")
  177. f.SetCellValue("Sheet1", "F1", "湿度范围 %")
  178. f.SetCellValue("Sheet1", "G1", "记录时间")
  179. // 设置列宽
  180. f.SetColWidth("Sheet1", "A", "A", 10)
  181. f.SetColWidth("Sheet1", "B", "B", 15)
  182. f.SetColWidth("Sheet1", "C", "D", 10)
  183. f.SetColWidth("Sheet1", "E", "F", 15)
  184. f.SetColWidth("Sheet1", "G", "G", 22)
  185. line := 1
  186. headStyleLower, _ := f.NewStyle(
  187. &excelize.Style{
  188. Font: &excelize.Font{Size: 11, Color: "#ff8585", Family: "arial"},
  189. })
  190. headStyleUpper, _ := f.NewStyle(
  191. &excelize.Style{
  192. Font: &excelize.Font{Size: 11, Color: "#ff8585", Family: "arial"},
  193. })
  194. // 循环写入数据
  195. for _, v := range DeviceSensor_data {
  196. line++
  197. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1)
  198. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]")
  199. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t)
  200. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
  201. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_tl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_tu), 'f', 2, 64))
  202. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_rhl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_rhu), 'f', 2, 64))
  203. f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time)
  204. if v.T_t < v.T_tl || v.T_t > v.T_tu {
  205. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower)
  206. }
  207. if v.T_rh < v.T_rhl || v.T_rh > v.T_rhu {
  208. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
  209. }
  210. }
  211. timeStr := time.Now().Format("20060102150405")
  212. // 保存文件
  213. if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
  214. fmt.Println(err)
  215. }
  216. // 上传 OSS
  217. url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx")
  218. if !is {
  219. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  220. c.ServeJSON()
  221. return
  222. }
  223. //删除目录
  224. err := os.Remove("ofile/" + timeStr + ".xlsx")
  225. if err != nil {
  226. fmt.Println(err)
  227. }
  228. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
  229. c.ServeJSON()
  230. return
  231. }
  232. // 列表 - 接口
  233. func (c *DataController) Device_Sensor_Data_Excel_m() {
  234. T_snid := c.GetString("T_snid")
  235. Time_start := c.GetString("Time_start")
  236. Time_end := c.GetString("Time_end")
  237. t_x, _ := c.GetInt("t_x")
  238. if len(T_snid) < 10 {
  239. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  240. c.ServeJSON()
  241. return
  242. }
  243. var DeviceSensor_data []Device.DeviceData_R
  244. DeviceSensor_data, _ = Device.Read_DeviceData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999)
  245. f := excelize.NewFile() // 设置单元格的值
  246. // 这里设置表头
  247. f.SetCellValue("Sheet1", "A1", "编号")
  248. f.SetCellValue("Sheet1", "B1", "传感器名称")
  249. f.SetCellValue("Sheet1", "C1", "温度℃")
  250. f.SetCellValue("Sheet1", "D1", "湿度%")
  251. f.SetCellValue("Sheet1", "E1", "温度范围 ℃")
  252. f.SetCellValue("Sheet1", "F1", "湿度范围 %")
  253. f.SetCellValue("Sheet1", "G1", "记录时间")
  254. // 设置列宽
  255. f.SetColWidth("Sheet1", "A", "A", 10)
  256. f.SetColWidth("Sheet1", "B", "B", 15)
  257. f.SetColWidth("Sheet1", "C", "D", 10)
  258. f.SetColWidth("Sheet1", "E", "F", 15)
  259. f.SetColWidth("Sheet1", "G", "G", 22)
  260. line := 1
  261. headStyleLower, _ := f.NewStyle(
  262. &excelize.Style{
  263. Font: &excelize.Font{Size: 11, Color: "#a8f7ff", Family: "arial"},
  264. })
  265. headStyleUpper, _ := f.NewStyle(
  266. &excelize.Style{
  267. Font: &excelize.Font{Size: 11, Color: "#ff8585", Family: "arial"},
  268. })
  269. atime, _ := time.ParseDuration("-1m") // Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
  270. // 循环写入数据
  271. for v_i, v := range DeviceSensor_data {
  272. line++
  273. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1)
  274. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]")
  275. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t)
  276. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
  277. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_tl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_tu), 'f', 2, 64))
  278. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_rhl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_rhu), 'f', 2, 64))
  279. f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time)
  280. if v.T_t < v.T_tl || v.T_t > v.T_tu {
  281. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower)
  282. }
  283. if v.T_rh < v.T_rhl || v.T_rh > v.T_rhu {
  284. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
  285. }
  286. if len(DeviceSensor_data)-1 == v_i {
  287. break
  288. }
  289. cha_v := ((DeviceSensor_data[v_i+1].T_t - v.T_t) / 3)
  290. println("t_x:", t_x)
  291. for i := 0; i < t_x; i++ {
  292. println("// -------", i)
  293. v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v)))
  294. fTime, _ := time.Parse("2006-01-02 15:04:05", v.T_time)
  295. fTime = fTime.Add(atime)
  296. v.T_time = fTime.Format("2006-01-02 15:04:05")
  297. line++
  298. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1)
  299. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]")
  300. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t)
  301. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
  302. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_tl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_tu), 'f', 2, 64))
  303. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_rhl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_rhu), 'f', 2, 64))
  304. f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time)
  305. if v.T_t < v.T_tl || v.T_t > v.T_tu {
  306. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower)
  307. }
  308. if v.T_rh < v.T_rhl || v.T_rh > v.T_rhu {
  309. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
  310. }
  311. }
  312. }
  313. timeStr := time.Now().Format("20060102150405")
  314. // 保存文件
  315. if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
  316. fmt.Println(err)
  317. }
  318. // 上传 OSS
  319. url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx")
  320. if !is {
  321. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  322. c.ServeJSON()
  323. return
  324. }
  325. //删除目录
  326. //err := os.Remove("ofile/" + timeStr + ".xlsx")
  327. //if err != nil {
  328. // fmt.Println(err)
  329. //}
  330. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
  331. c.ServeJSON()
  332. return
  333. }
  334. // 列表 - 接口
  335. func (c *DataController) DeviceSensor_Data_Print() {
  336. SN := c.GetString("T_sn")
  337. T_id, _ := c.GetInt("T_id")
  338. Time_start := c.GetString("Time_start")
  339. Time_end := c.GetString("Time_end")
  340. type R_JSONS struct {
  341. //必须的大写开头
  342. T_time string
  343. T1 interface{}
  344. T2 interface{}
  345. T3 interface{}
  346. T4 interface{}
  347. }
  348. r_jsons := make(map[string]R_JSONS)
  349. GROUP_BY_t_time := Device.Read_DeviceData_List_GROUP_BY_t_time(SN, Time_start, Time_end)
  350. // 时间 MAP
  351. for _, vt := range GROUP_BY_t_time {
  352. tt := lib.To_string(vt[0])
  353. r_jsons[tt] = R_JSONS{T_time: tt, T1: nil, T2: nil, T3: nil, T4: nil}
  354. }
  355. // 记录传感器
  356. Device.Read_DeviceSensorParameter_All_Map(SN, T_id)
  357. maps, num := Device.Read_DeviceData_ById_List(SN, T_id, Time_start, Time_end, 1, 9999)
  358. if num > 0 {
  359. for _, v_map := range maps {
  360. ws, ok := r_jsons[v_map.T_time] /*如果确定是真实的,则存在,否则不存在 */
  361. if ok {
  362. ws.T1 = v_map
  363. r_jsons[v_map.T_time] = ws
  364. }
  365. }
  366. }
  367. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  368. c.ServeJSON()
  369. return
  370. }
  371. // 列表 - 接口
  372. func (c *DataController) Device_Sensor_Data_PDF() {
  373. T_snid := c.GetString("T_snid")
  374. Time_start := c.GetString("Time_start")
  375. Time_end := c.GetString("Time_end")
  376. if len(T_snid) < 10 {
  377. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  378. c.ServeJSON()
  379. return
  380. }
  381. var DeviceSensor_data []Device.DeviceData_R
  382. DeviceSensor_data, _ = Device.Read_DeviceData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999)
  383. var err error
  384. pdf := &gopdf.GoPdf{}
  385. pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4
  386. //err = GetFont(pdf, "LiberationSerif-Regular.ttf")
  387. //if err != nil {
  388. // log.Fatalln(err)
  389. //}
  390. //err = pdf.SetFont("Ubuntu-L", "", 14)
  391. //if err != nil {
  392. // log.Fatalln(err)
  393. //}
  394. err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf")
  395. if err != nil {
  396. c.Data["json"] = lib.JSONS{Code: 204, Msg: "ok!", Data: err}
  397. c.ServeJSON()
  398. return
  399. }
  400. err = pdf.SetFont("simsun", "", 24)
  401. if err != nil {
  402. c.Data["json"] = lib.JSONS{Code: 205, Msg: "ok!", Data: err}
  403. c.ServeJSON()
  404. return
  405. }
  406. pdf.SetGrayFill(0.5)
  407. pdf.SetMargins(0, 20, 0, 20)
  408. pdf.AddPage()
  409. //use path
  410. //pdf.Image("logo.png", 100, 50, &gopdf.Rect{W: 50, H: 50})
  411. textw, _ := pdf.MeasureTextWidth(c.Admin_r.T_name)
  412. pdf.SetX((595 / 2) - (textw / 2))
  413. pdf.SetY(40)
  414. pdf.Text(c.Admin_r.T_name)
  415. // 线
  416. pdf.SetLineWidth(2)
  417. pdf.SetLineType("dashed")
  418. pdf.Line(10, 60, 585, 60)
  419. err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf")
  420. if err != nil {
  421. c.Data["json"] = lib.JSONS{Code: 206, Msg: "ok!", Data: err}
  422. c.ServeJSON()
  423. return
  424. }
  425. err = pdf.SetFont("wts", "", 12)
  426. if err != nil {
  427. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  428. c.ServeJSON()
  429. return
  430. }
  431. //fmt.Sprintf(" %.1f ", v.T_t)
  432. lib.RectFillColor(pdf, "历史数据["+Time_start+" / "+Time_end+"]", 14, 22, 80, 550, 40, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  433. lib.RectFillColor(pdf, "序号", 12, 22, 120, 30, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  434. lib.RectFillColor(pdf, "传感器名称", 12, 52, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  435. lib.RectFillColor(pdf, "温度℃", 12, 152, 120, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  436. lib.RectFillColor(pdf, "湿度%", 12, 212, 120, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  437. lib.RectFillColor(pdf, "温度范围", 12, 272, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  438. lib.RectFillColor(pdf, "湿度范围", 12, 362, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  439. lib.RectFillColor(pdf, "记录时间", 12, 452, 120, 120, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  440. var y float64 = 140
  441. err = pdf.SetFont("wts", "", 10)
  442. if err != nil {
  443. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  444. c.ServeJSON()
  445. return
  446. }
  447. for i, v := range DeviceSensor_data {
  448. text := fmt.Sprintf(" %d ", i+1)
  449. var textH float64 = 25 // if text height is 25px.
  450. pdf.SetNewY(y, textH)
  451. y = pdf.GetY()
  452. //pdf.SetX(x) // must after pdf.SetNewY() called.
  453. //err = pdf.Text(text)
  454. //if err != nil {
  455. // log.Fatalln(err)
  456. //}
  457. T_t := fmt.Sprintf(" %.1f ", v.T_t)
  458. T_rh := fmt.Sprintf(" %.1f ", v.T_rh)
  459. T_Tlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_tl, v.T_tu)
  460. T_Rlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_rhl, v.T_rhu)
  461. T_time := fmt.Sprintf("%s", v.T_time)
  462. //if user_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD") {
  463. // T_rh = "-"
  464. // T_Rlu = "-"
  465. //}
  466. lib.RectFillColor(pdf, text, 10, 22, y, 30, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  467. lib.RectFillColor(pdf, v.T_name, 10, 52, y, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  468. lib.RectFillColor(pdf, T_t, 10, 152, y, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  469. lib.RectFillColor(pdf, T_rh, 10, 212, y, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  470. lib.RectFillColor(pdf, T_Tlu, 10, 272, y, 90, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  471. lib.RectFillColor(pdf, T_Rlu, 10, 362, y, 90, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  472. lib.RectFillColor(pdf, T_time, 10, 452, y, 120, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  473. y += 20
  474. }
  475. timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf"
  476. err = pdf.WritePdf(timeStr)
  477. if err != nil {
  478. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  479. c.ServeJSON()
  480. return
  481. }
  482. // 上传 OSS
  483. url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
  484. if !is {
  485. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  486. c.ServeJSON()
  487. return
  488. }
  489. //删除目录
  490. err = os.Remove(timeStr)
  491. if err != nil {
  492. fmt.Println(err)
  493. }
  494. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
  495. c.ServeJSON()
  496. return
  497. }
  498. // 大数据平台
  499. func (c *DataController) Raw() {
  500. admin_r := c.Admin_r
  501. T_SQL := c.GetString("T_SQL")
  502. T_SQL_ := strings.ToLower(T_SQL)
  503. if strings.Contains(T_SQL_, ";") ||
  504. //strings.Contains(T_SQL, "Admin")||
  505. //strings.Contains(T_SQL, "Device ")||
  506. //strings.Contains(T_SQL, "DeviceParameter")||
  507. //strings.Contains(T_SQL, "DeviceSensor")||
  508. //strings.Contains(T_SQL, "DeviceSnOld")||
  509. //strings.Contains(T_SQL, "DeviceTask")||
  510. //strings.Contains(T_SQL, "DeviceWarning")||
  511. strings.Contains(T_SQL, "Logs") ||
  512. strings.Contains(T_SQL, "SqlLogs") ||
  513. strings.Contains(T_SQL, "Tokey") ||
  514. strings.Contains(T_SQL, "UserLogs") ||
  515. strings.Contains(T_SQL_, "show") ||
  516. strings.Contains(T_SQL_, "create") ||
  517. strings.Contains(T_SQL_, "drop") ||
  518. strings.Contains(T_SQL_, "desc") ||
  519. strings.Contains(T_SQL_, "alter") ||
  520. strings.Contains(T_SQL_, "insert") ||
  521. strings.Contains(T_SQL_, "update") ||
  522. strings.Contains(T_SQL_, "delete") {
  523. RawSql.Add_SqlLogs(admin_r.T_uuid, "Err:"+admin_r.T_user, T_SQL)
  524. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!", Data: admin_r.T_name + " :你的行为 也被记录"}
  525. c.ServeJSON()
  526. return
  527. }
  528. if //!strings.Contains(T_SQL, "z_device_data_") ||
  529. !strings.Contains(T_SQL_, "select") {
  530. RawSql.Add_SqlLogs(admin_r.T_uuid, "Err:"+admin_r.T_user, T_SQL)
  531. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!", Data: admin_r.T_name + " :你的行为 也被记录"}
  532. c.ServeJSON()
  533. return
  534. }
  535. RawSql.Add_SqlLogs(admin_r.T_uuid, "ok", T_SQL)
  536. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.Read_SqlRaw(T_SQL)}
  537. c.ServeJSON()
  538. return
  539. }