Data.go 19 KB

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