Data.go 20 KB

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