Data.go 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181
  1. package controllers
  2. import (
  3. "Cold_Api/Nats"
  4. "Cold_Api/conf"
  5. "Cold_Api/controllers/lib"
  6. "Cold_Api/models/Admin"
  7. "Cold_Api/models/Device"
  8. "Cold_Api/models/System"
  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. }
  22. // 列表 -
  23. func (c *DataController) DataPlane() {
  24. // 验证登录
  25. b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  26. if !b_ {
  27. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  28. c.ServeJSON()
  29. return
  30. }
  31. c.TplName = "Data/DataPlane.html"
  32. } // 列表 -
  33. func (c *DataController) DataReal_html() {
  34. // 验证登录
  35. b_, R_u := 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. Name := c.GetString("Name")
  42. c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(R_u.Admin_uuid)
  43. c.Data["Name"] = Name
  44. c.TplName = "Data/DataReal.html"
  45. }
  46. // 列表 -
  47. func (c *DataController) DataRealCalss_html() {
  48. // 验证登录
  49. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  50. if !b_ {
  51. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  52. c.ServeJSON()
  53. return
  54. }
  55. c.Data["Admin_r"] = admin_r
  56. Name := c.GetString("Name")
  57. c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(admin_r.Admin_uuid)
  58. c.Data["Name"] = Name
  59. c.TplName = "Data/DataRealCalss.html"
  60. }
  61. // 列表 -
  62. func (c *DataController) DataList_html() {
  63. // 验证登录
  64. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  65. if !b_ {
  66. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  67. c.ServeJSON()
  68. return
  69. }
  70. c.Data["Admin_r"] = admin_r
  71. Name := c.GetString("Name")
  72. c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(admin_r.Admin_uuid)
  73. c.Data["Name"] = Name
  74. c.TplName = "Data/DataList.html"
  75. }
  76. // 列表 -
  77. func (c *DataController) DataLine_html() {
  78. // 验证登录
  79. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  80. if !b_ {
  81. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  82. c.ServeJSON()
  83. return
  84. }
  85. c.Data["Admin_r"] = admin_r
  86. Name := c.GetString("Name")
  87. c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(admin_r.Admin_uuid)
  88. c.Data["Name"] = Name
  89. c.TplName = "Data/DataLine.html"
  90. }
  91. // 列表 -
  92. func (c *DataController) DataMap_html() {
  93. // 验证登录
  94. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  95. if !b_ {
  96. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  97. c.ServeJSON()
  98. return
  99. }
  100. c.Data["Admin_r"] = admin_r
  101. Name := c.GetString("Name")
  102. c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(admin_r.Admin_uuid)
  103. c.Data["Name"] = Name
  104. c.TplName = "Data/DataMap.html"
  105. }
  106. func (c *DataController) Device_Sensor() {
  107. // 验证登录
  108. b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  109. if !b_ {
  110. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  111. c.ServeJSON()
  112. return
  113. }
  114. T_sn := c.GetString("T_sn")
  115. T_id, _ := c.GetInt("T_id")
  116. //c.Data["Class_List"] = Device.Read_Class_All_1()
  117. DeviceSensor_r, err := Device.Read_DeviceSensor_ByTsn_Tid(T_sn, T_id)
  118. if err != nil {
  119. c.Data["json"] = lib.JSONS{Code: 201, Msg: "err!"}
  120. c.ServeJSON()
  121. return
  122. }
  123. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.DeviceSensorToDeviceSensor_R(DeviceSensor_r)}
  124. c.ServeJSON()
  125. return
  126. }
  127. func (c *DataController) Device_Sensor_List() {
  128. // 验证登录
  129. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  130. if !b_ {
  131. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  132. c.ServeJSON()
  133. return
  134. }
  135. type R_JSONS struct {
  136. //必须的大写开头
  137. DeviceSensor_lite []Device.DeviceSensor
  138. Num int
  139. Page int
  140. Page_size int
  141. Pages []lib.Page_T
  142. }
  143. var r_jsons R_JSONS
  144. page, _ := c.GetInt("page")
  145. println(page)
  146. if page < 1 {
  147. page = 1
  148. }
  149. page_z, _ := c.GetInt("page_z")
  150. println(page_z)
  151. if page_z == 0 {
  152. page_z = conf.Page_size
  153. }
  154. T_sn := c.GetString("T_sn")
  155. T_Calss_id, _ := c.GetInt("T_class_id")
  156. T_name := c.GetString("T_name")
  157. SN_type := c.GetString("SN_type")
  158. //c.Data["Class_List"] = Device.Read_Class_All_1()
  159. var cnt int64
  160. r_jsons.DeviceSensor_lite, cnt = Device.Read_DeviceSensor_class_ALL_1(admin_r, T_Calss_id, page, page_z, T_sn, T_name, SN_type)
  161. page_size := math.Ceil(float64(cnt) / float64(page_z))
  162. r_jsons.Page = int(page)
  163. r_jsons.Page_size = int(page_size)
  164. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  165. r_jsons.Num = int(cnt)
  166. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  167. c.ServeJSON()
  168. return
  169. }
  170. // 列表 - 接口
  171. func (c *DataController) Device_Sensor_Data() {
  172. page, _ := c.GetInt("page")
  173. page_z, _ := c.GetInt("page_z")
  174. println(page)
  175. if page < 1 {
  176. page = 1
  177. }
  178. if page_z < 1 {
  179. page_z = 10
  180. }
  181. T_id, _ := c.GetInt("T_id")
  182. SN := c.GetString("T_sn")
  183. Time_start := c.GetString("Time_start")
  184. Time_end := c.GetString("Time_end")
  185. type R_JSONS struct {
  186. //必须的大写开头
  187. DeviceSensor_data []Device.DeviceData_
  188. Num int
  189. Page int
  190. Page_size int
  191. Pages []lib.Page_T
  192. }
  193. var r_jsons R_JSONS
  194. var cnt int
  195. r_jsons.DeviceSensor_data, cnt = Device.Read_DeviceSensorData_ById_List(SN, T_id, Time_start, Time_end, page, page_z)
  196. page_size := math.Ceil(float64(cnt) / float64(page_z))
  197. r_jsons.Page = int(page)
  198. r_jsons.Page_size = int(page_size)
  199. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  200. r_jsons.Num = int(cnt)
  201. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  202. c.ServeJSON()
  203. return
  204. }
  205. // 列表 - 接口
  206. func (c *DataController) Device_Sensor_Data_More() {
  207. page, _ := c.GetInt("page")
  208. page_z, _ := c.GetInt("page_z")
  209. println(page)
  210. if page < 1 {
  211. page = 1
  212. }
  213. if page_z < 1 {
  214. page_z = 10
  215. }
  216. T_snid := c.GetString("T_snid")
  217. Time_start := c.GetString("Time_start")
  218. Time_end := c.GetString("Time_end")
  219. if len(T_snid) < 10 {
  220. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  221. c.ServeJSON()
  222. return
  223. }
  224. type R_JSONS struct {
  225. //必须的大写开头
  226. DeviceSensor_data []Device.DeviceData_
  227. Num int
  228. Page int
  229. Page_size int
  230. Pages []lib.Page_T
  231. }
  232. var r_jsons R_JSONS
  233. var cnt int
  234. r_jsons.DeviceSensor_data, cnt = Device.Read_DeviceSensorData_By_T_snid_List(T_snid, Time_start, Time_end, page, page_z)
  235. page_size := math.Ceil(float64(cnt) / float64(page_z))
  236. r_jsons.Page = int(page)
  237. r_jsons.Page_size = int(page_size)
  238. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  239. r_jsons.Num = int(cnt)
  240. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  241. c.ServeJSON()
  242. return
  243. }
  244. // 列表 - 接口
  245. func (c *DataController) Device_Sensor_Data_Excel() {
  246. // 验证登录
  247. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  248. if !b_ {
  249. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  250. c.ServeJSON()
  251. return
  252. }
  253. T_snid := c.GetString("T_snid")
  254. Time_start := c.GetString("Time_start")
  255. Time_end := c.GetString("Time_end")
  256. if len(T_snid) < 10 {
  257. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  258. c.ServeJSON()
  259. return
  260. }
  261. var DeviceSensor_data []Device.DeviceData_
  262. DeviceSensor_data, _ = Device.Read_DeviceSensorData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999)
  263. f := excelize.NewFile() // 设置单元格的值
  264. // 这里设置表头
  265. f.SetCellValue("Sheet1", "A1", "编号")
  266. f.SetCellValue("Sheet1", "B1", "传感器名称")
  267. f.SetCellValue("Sheet1", "C1", "温度℃")
  268. f.SetCellValue("Sheet1", "D1", "湿度%")
  269. f.SetCellValue("Sheet1", "E1", "温度范围 ℃")
  270. f.SetCellValue("Sheet1", "F1", "湿度范围 %")
  271. f.SetCellValue("Sheet1", "G1", "记录时间")
  272. // 设置列宽
  273. f.SetColWidth("Sheet1", "A", "A", 10)
  274. f.SetColWidth("Sheet1", "B", "B", 15)
  275. f.SetColWidth("Sheet1", "C", "D", 10)
  276. f.SetColWidth("Sheet1", "E", "F", 15)
  277. f.SetColWidth("Sheet1", "G", "G", 22)
  278. line := 1
  279. headStyleLower, _ := f.NewStyle(`{
  280. "font":{
  281. "color":"#a8f7ff",
  282. "size":11,
  283. "family":"arial"
  284. }
  285. }`)
  286. headStyleUpper, _ := f.NewStyle(`{
  287. "font":{
  288. "color":"#ff8585",
  289. "size":11,
  290. "family":"arial"
  291. }
  292. }`)
  293. // 循环写入数据
  294. for _, v := range DeviceSensor_data {
  295. line++
  296. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1)
  297. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]")
  298. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t)
  299. if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
  300. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
  301. }
  302. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64))
  303. if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
  304. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64))
  305. }
  306. f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time)
  307. if v.T_t < v.T_Tlower || v.T_rh < v.T_RHlower {
  308. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower)
  309. }
  310. if v.T_t > v.T_Tupper || v.T_rh > v.T_RHupper {
  311. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
  312. }
  313. }
  314. timeStr := time.Now().Format("20060102150405")
  315. // 保存文件
  316. if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
  317. fmt.Println(err)
  318. }
  319. // 上传 OSS
  320. url, is := Nats.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx")
  321. if !is {
  322. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  323. c.ServeJSON()
  324. return
  325. }
  326. //删除目录
  327. err := os.Remove("ofile/" + timeStr + ".xlsx")
  328. if err != nil {
  329. fmt.Println(err)
  330. }
  331. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
  332. c.ServeJSON()
  333. return
  334. }
  335. // 列表 - 接口
  336. func (c *DataController) Device_Sensor_Data_Excel_m() {
  337. // 验证登录
  338. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  339. if !b_ {
  340. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  341. c.ServeJSON()
  342. return
  343. }
  344. T_snid := c.GetString("T_snid")
  345. Time_start := c.GetString("Time_start")
  346. Time_end := c.GetString("Time_end")
  347. if len(T_snid) < 10 {
  348. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  349. c.ServeJSON()
  350. return
  351. }
  352. var DeviceSensor_data []Device.DeviceData_
  353. DeviceSensor_data, _ = Device.Read_DeviceSensorData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999)
  354. f := excelize.NewFile() // 设置单元格的值
  355. // 这里设置表头
  356. f.SetCellValue("Sheet1", "A1", "编号")
  357. f.SetCellValue("Sheet1", "B1", "传感器名称")
  358. f.SetCellValue("Sheet1", "C1", "温度℃")
  359. f.SetCellValue("Sheet1", "D1", "湿度%")
  360. f.SetCellValue("Sheet1", "E1", "温度范围 ℃")
  361. f.SetCellValue("Sheet1", "F1", "湿度范围 %")
  362. f.SetCellValue("Sheet1", "G1", "记录时间")
  363. // 设置列宽
  364. f.SetColWidth("Sheet1", "A", "A", 10)
  365. f.SetColWidth("Sheet1", "B", "B", 15)
  366. f.SetColWidth("Sheet1", "C", "D", 10)
  367. f.SetColWidth("Sheet1", "E", "F", 15)
  368. f.SetColWidth("Sheet1", "G", "G", 22)
  369. line := 1
  370. headStyleLower, _ := f.NewStyle(`{
  371. "font":{
  372. "color":"#a8f7ff",
  373. "size":11,
  374. "family":"arial"
  375. }
  376. }`)
  377. headStyleUpper, _ := f.NewStyle(`{
  378. "font":{
  379. "color":"#ff8585",
  380. "size":11,
  381. "family":"arial"
  382. }
  383. }`)
  384. atime, _ := time.ParseDuration("-1m") // Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
  385. // 循环写入数据
  386. for v_i, v := range DeviceSensor_data {
  387. line++
  388. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1)
  389. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]")
  390. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t)
  391. if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
  392. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
  393. }
  394. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64))
  395. if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
  396. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64))
  397. }
  398. f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time)
  399. if v.T_t < v.T_Tlower || v.T_rh < v.T_RHlower {
  400. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower)
  401. }
  402. if v.T_t > v.T_Tupper || v.T_rh > v.T_RHupper {
  403. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
  404. }
  405. if len(DeviceSensor_data)-1 == v_i {
  406. break
  407. }
  408. cha_v := ((DeviceSensor_data[v_i+1].T_t - v.T_t) / 3)
  409. //println("cha_v:",cha_v)
  410. // -------
  411. v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v)))
  412. //println("v.T_t:",v.T_t)
  413. fTime, _ := time.Parse("2006-1-2 15:04:05", v.T_time)
  414. fTime = fTime.Add(atime)
  415. v.T_time = fTime.Format("2006-1-2 15:04:05")
  416. line++
  417. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1)
  418. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]")
  419. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t)
  420. if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
  421. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
  422. }
  423. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64))
  424. if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
  425. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64))
  426. }
  427. f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time)
  428. if v.T_t < v.T_Tlower || v.T_rh < v.T_RHlower {
  429. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower)
  430. }
  431. if v.T_t > v.T_Tupper || v.T_rh > v.T_RHupper {
  432. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
  433. }
  434. // -------
  435. v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v)))
  436. //println("v.T_t:",v.T_t)
  437. fTime, _ = time.Parse("2006-1-2 15:04:05", v.T_time)
  438. fTime = fTime.Add(atime)
  439. v.T_time = fTime.Format("2006-1-2 15:04:05")
  440. line++
  441. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1)
  442. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]")
  443. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t)
  444. if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
  445. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
  446. }
  447. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64))
  448. if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
  449. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64))
  450. }
  451. f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time)
  452. if v.T_t < v.T_Tlower || v.T_rh < v.T_RHlower {
  453. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower)
  454. }
  455. if v.T_t > v.T_Tupper || v.T_rh > v.T_RHupper {
  456. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
  457. }
  458. // -------
  459. v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v)))
  460. //println("v.T_t:",v.T_t)
  461. fTime, _ = time.Parse("2006-1-2 15:04:05", v.T_time)
  462. fTime = fTime.Add(atime)
  463. v.T_time = fTime.Format("2006-1-2 15:04:05")
  464. line++
  465. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1)
  466. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]")
  467. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t)
  468. if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
  469. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
  470. }
  471. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64))
  472. if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
  473. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64))
  474. }
  475. f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time)
  476. if v.T_t < v.T_Tlower || v.T_rh < v.T_RHlower {
  477. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower)
  478. }
  479. if v.T_t > v.T_Tupper || v.T_rh > v.T_RHupper {
  480. f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
  481. }
  482. //
  483. //// -------
  484. //v.T_t = float32(lib.Decimal(float64(v.T_t+cha_v)))
  485. //println("v.T_t:",v.T_t)
  486. //
  487. //fTime,_ = time.Parse("2006-1-2 15:04:05", v.T_time)
  488. //fTime = fTime.Add(atime)
  489. //v.T_time = fTime.Format("2006-1-2 15:04:05")
  490. //
  491. //line++
  492. //f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1)
  493. //f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]")
  494. //f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t)
  495. //if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
  496. // f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
  497. //}
  498. //
  499. //f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64))
  500. //if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
  501. // f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64))
  502. //}
  503. //f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time)
  504. //
  505. //if v.T_t < v.T_Tlower || v.T_rh < v.T_RHlower {
  506. // f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower)
  507. //}
  508. //if v.T_t > v.T_Tupper || v.T_rh > v.T_RHupper {
  509. // f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
  510. //}
  511. // -------
  512. v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v)))
  513. //println("v.T_t:",v.T_t)
  514. fTime, _ = time.Parse("2006-1-2 15:04:05", v.T_time)
  515. fTime = fTime.Add(atime)
  516. v.T_time = fTime.Format("2006-1-2 15:04:05")
  517. }
  518. timeStr := time.Now().Format("20060102150405")
  519. // 保存文件
  520. if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
  521. fmt.Println(err)
  522. }
  523. // 上传 OSS
  524. url, is := Nats.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx")
  525. if !is {
  526. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  527. c.ServeJSON()
  528. return
  529. }
  530. //删除目录
  531. err := os.Remove("ofile/" + timeStr + ".xlsx")
  532. if err != nil {
  533. fmt.Println(err)
  534. }
  535. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
  536. c.ServeJSON()
  537. return
  538. }
  539. // 大数据平台
  540. func (c *DataController) DataScreen() {
  541. // 验证登录
  542. b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  543. if !b_ {
  544. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  545. c.ServeJSON()
  546. return
  547. }
  548. c.TplName = "Data/DataScreen.html"
  549. }
  550. // 大数据 数据
  551. func (c *DataController) DataScreen_Data() {
  552. // 验证登录
  553. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  554. if !b_ {
  555. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  556. c.ServeJSON()
  557. return
  558. }
  559. Device_YD_1_Count_use := 0
  560. Device_YD_2_Count_use := 0
  561. Data := make(map[string]interface{})
  562. if admin_r.Admin_power == 10 {
  563. admin_r.Id = admin_r.Admin_master
  564. }
  565. // ----------------- 左上角 -----------------
  566. //仓库端总数
  567. Data["KF_Count"] = Device.Read_Device_ALL_T_Bind_Count(admin_r, "KF", 0)
  568. //运输端总数
  569. Data["YD_Count"] = Device.Read_Device_ALL_T_Bind_Count(admin_r, "YD", 0)
  570. // 仓库报备数
  571. Data["KF_Warning_Count"] = Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(admin_r, "KF")
  572. // 运输报警数
  573. Data["YD_Warning_Count"] = Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(admin_r, "YD")
  574. // 仓库端分公司数据统计 分公司名 终端总数 报警设备数 设备报警率
  575. var KF_list []map[string]interface{}
  576. Admin_maps := Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id)
  577. for _, v := range Admin_maps {
  578. Data_KF := make(map[string]interface{})
  579. Data_KF["Name"] = v.Admin_name
  580. Device_Count := Device.Read_Device_ALL_T_Bind_Count(v, "KF", 0)
  581. Data_KF["Device_Count"] = Device_Count
  582. Warning_Count := Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "KF")
  583. Data_KF["Warning_Count"] = Warning_Count
  584. // 强制 报警数 不超过 设备数量
  585. if Warning_Count > Device_Count {
  586. Warning_Count = Device_Count
  587. }
  588. //fmt.Println("Device_Count:",Device_Count,"Warning_Count:",Warning_Count)
  589. if Warning_Count == 0 || Device_Count == 0 {
  590. Data_KF["Ratio"] = 0
  591. } else {
  592. Data_KF["Ratio"] = int((float32(Warning_Count) / float32(Device_Count)) * 100)
  593. }
  594. KF_list = append(KF_list, Data_KF)
  595. }
  596. // 运输报警数
  597. Data["KF_list"] = KF_list
  598. // 运输端分公司数据统计 分公司名 终端总数 报警设备数 设备报警率
  599. var YD_list []map[string]interface{}
  600. Admin_maps = Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id)
  601. for _, v := range Admin_maps {
  602. Data_YD := make(map[string]interface{})
  603. Data_YD["Name"] = v.Admin_name
  604. Device_Count := Device.Read_Device_ALL_T_Bind_Count(v, "YD", 0)
  605. Data_YD["Device_Count"] = Device_Count
  606. Warning_Count := Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "YD")
  607. Data_YD["Warning_Count"] = Warning_Count
  608. //fmt.Println("Device_Count:",Device_Count,"Warning_Count:",Warning_Count)
  609. if Warning_Count == 0 || Device_Count == 0 {
  610. Data_YD["Ratio"] = 0
  611. } else {
  612. Data_YD["Ratio"] = int((float32(Warning_Count) / float32(Device_Count)) * 100)
  613. }
  614. YD_list = append(YD_list, Data_YD)
  615. }
  616. // 运输报警数
  617. Data["YD_list"] = YD_list
  618. // 分公司名 终端总数 报警设备数 设备报警率
  619. var KF_YD_list []map[string]interface{}
  620. Admin_maps = Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id)
  621. for _, v := range Admin_maps {
  622. Data_KF_YD := make(map[string]interface{})
  623. Data_KF_YD["Name"] = v.Admin_name
  624. Device_Count := Device.Read_Device_ALL_T_Bind_Count(v, "", 0)
  625. Data_KF_YD["Device_Count"] = Device_Count
  626. Warning_Count := Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "")
  627. Data_KF_YD["Warning_Count"] = Warning_Count
  628. //fmt.Println("Device_Count:",Device_Count,"Warning_Count:",Warning_Count)
  629. if Warning_Count == 0 || Device_Count == 0 {
  630. Data_KF_YD["Ratio"] = 0
  631. } else {
  632. Data_KF_YD["Ratio"] = int((float32(Warning_Count) / float32(Device_Count)) * 100)
  633. }
  634. KF_YD_list = append(KF_YD_list, Data_KF_YD)
  635. }
  636. // 报警率排名
  637. Data["Warning_KF_YD_list"] = KF_YD_list
  638. //每个时间段使用数量走势(物流曲线/药店曲线)
  639. // 年
  640. Device_list := Device.Read_Device_ALL_bind(admin_r)
  641. var Sales_Year_z_list_1 [12]int
  642. var Sales_Year_z_list_2 [12]int
  643. for _, D_v := range Device_list {
  644. for _, v := range Device.Read_DeviceData_ById_Year_List(D_v.T_sn) {
  645. switch D_v.T_l_p {
  646. case 1:
  647. Sales_Year_z_list_1[lib.To_int(v[0])-1] += 1
  648. break
  649. case 2:
  650. Sales_Year_z_list_2[lib.To_int(v[0])-1] += 1
  651. break
  652. }
  653. }
  654. }
  655. Data["Sales_Year_z_list_1"] = Sales_Year_z_list_1
  656. Data["Sales_Year_z_list_2"] = Sales_Year_z_list_2
  657. // 月
  658. currentTime := time.Now()
  659. Month_z := lib.GetYearMonthToDay(currentTime.Year(), int(currentTime.Month()))
  660. var Sales_Month_z_list_1 = make([]int, Month_z)
  661. var Sales_Month_z_list_2 = make([]int, Month_z)
  662. for _, D_v := range Device_list {
  663. for _, v := range Device.Read_DeviceData_ById_Month_List(D_v.T_sn) {
  664. switch D_v.T_l_p {
  665. case 1:
  666. Sales_Month_z_list_1[lib.To_int(v[0])-1] += 1
  667. break
  668. case 2:
  669. Sales_Month_z_list_2[lib.To_int(v[0])-1] += 1
  670. break
  671. }
  672. }
  673. }
  674. Data["Sales_Month_z_list_1"] = Sales_Month_z_list_1
  675. Data["Sales_Month_z_list_2"] = Sales_Month_z_list_2
  676. // 日
  677. var Sales_Day_z_list_1 [24]int
  678. var Sales_Day_z_list_2 [24]int
  679. for _, D_v := range Device_list {
  680. for _, v := range Device.Read_DeviceSensorData_ById_Day_List(D_v.T_sn) {
  681. switch D_v.T_l_p {
  682. case 1:
  683. Sales_Day_z_list_1[lib.To_int(v[0])] += 1
  684. break
  685. case 2:
  686. Sales_Day_z_list_2[lib.To_int(v[0])] += 1
  687. break
  688. }
  689. }
  690. }
  691. Data["Sales_Day_z_list_1"] = Sales_Day_z_list_1
  692. Data["Sales_Day_z_list_2"] = Sales_Day_z_list_2
  693. // 物流端使用占比
  694. var DY_pie_1 []map[string]interface{}
  695. Admin_maps = Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id)
  696. for _, Admin_maps_v := range Admin_maps {
  697. Day_x := 0
  698. Device_l := Device.Read_Device_ALL_bind_T_l_p(Admin_maps_v, 1)
  699. if len(Device_l) == 0 {
  700. continue
  701. }
  702. for _, Device_list_v := range Device_l {
  703. // 今天 次数(每小时一次)
  704. if len(Device.Read_DeviceSensorData_ById_Day_List(Device_list_v.T_sn)) > 0 {
  705. Day_x += 1
  706. }
  707. }
  708. Data_YD := make(map[string]interface{})
  709. Data_YD["Name"] = Admin_maps_v.Admin_name
  710. Data_YD["Ratio"] = Day_x
  711. Device_YD_1_Count_use += Day_x // 统计 使用次数
  712. DY_pie_1 = append(DY_pie_1, Data_YD)
  713. }
  714. Data["YD_pie_1"] = DY_pie_1
  715. // 药店端使用占比
  716. var DY_pie_2 []map[string]interface{}
  717. Admin_maps = Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id)
  718. for _, Admin_maps_v := range Admin_maps {
  719. Day_x := 0
  720. Device_l := Device.Read_Device_ALL_bind_T_l_p(Admin_maps_v, 2)
  721. if len(Device_l) == 0 {
  722. continue
  723. }
  724. for _, Device_list_v := range Device_l {
  725. // 今天 次数(每小时一次)
  726. if len(Device.Read_DeviceSensorData_ById_Day_List(Device_list_v.T_sn)) > 0 {
  727. Day_x += 1
  728. }
  729. }
  730. Data_YD := make(map[string]interface{})
  731. Data_YD["Name"] = Admin_maps_v.Admin_name
  732. Data_YD["Ratio"] = Day_x
  733. Device_YD_1_Count_use += Day_x // 统计 使用次数
  734. DY_pie_2 = append(DY_pie_2, Data_YD)
  735. }
  736. Data["YD_pie_2"] = DY_pie_2
  737. // 运输端数据统计
  738. var YD_1_2 = make(map[string]interface{})
  739. Device_YD_1_Count := Device.Read_Device_ALL_T_Bind_Count(admin_r, "YD", 1)
  740. YD_1_2["Device_YD_1_Count"] = Device_YD_1_Count
  741. Device_YD_2_Count := Device.Read_Device_ALL_T_Bind_Count(admin_r, "YD", 2)
  742. YD_1_2["Device_YD_2_Count"] = Device_YD_2_Count
  743. YD_1_2["Device_YD_1_Count_use"] = Device_YD_1_Count_use
  744. YD_1_2["Device_YD_2_Count_use"] = Device_YD_2_Count_use
  745. Data["YD_1_2"] = YD_1_2
  746. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Data}
  747. c.ServeJSON()
  748. return
  749. }
  750. // 大数据平台
  751. func (c *DataController) DataScreen_Map() {
  752. // 验证登录
  753. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  754. if !b_ {
  755. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  756. c.ServeJSON()
  757. return
  758. }
  759. if admin_r.Admin_power == 10 {
  760. admin_r.Id = admin_r.Admin_master
  761. }
  762. data := Device.Read_DeviceSensor_Map_ALL_1(admin_r, 0, "", "", "YD")
  763. for i, v := range data {
  764. DeviceSensorData, is := Device.Read_DeviceSensorData_ById_New(v.T_sn, v.T_id)
  765. if !is {
  766. continue
  767. }
  768. data[i].T_t = DeviceSensorData.T_t
  769. data[i].T_rh = DeviceSensorData.T_rh
  770. data[i].T_Site = DeviceSensorData.T_Site
  771. data[i].T_Dattery = DeviceSensorData.T_Dattery
  772. data[i].T_time = DeviceSensorData.T_time
  773. }
  774. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: data}
  775. c.ServeJSON()
  776. return
  777. }
  778. // 列表 - 接口
  779. func (c *DataController) DeviceSensor_Data_Print() {
  780. SN := c.GetString("T_sn")
  781. Time_start := c.GetString("Time_start")
  782. Time_end := c.GetString("Time_end")
  783. type R_JSONS struct {
  784. //必须的大写开头
  785. T_time string
  786. T1 interface{}
  787. T2 interface{}
  788. T3 interface{}
  789. T4 interface{}
  790. }
  791. r_jsons := make(map[string]R_JSONS)
  792. GROUP_BY_t_time := Device.Read_DeviceSensorData_List_GROUP_BY_t_time(SN, Time_start, Time_end)
  793. // 时间 MAP
  794. for _, vt := range GROUP_BY_t_time {
  795. tt := lib.To_string(vt[0])
  796. r_jsons[tt] = R_JSONS{T_time: tt, T1: nil, T2: nil, T3: nil, T4: nil}
  797. }
  798. // 记录传感器
  799. maps, num := Device.Read_DeviceSensorData_ById_List(SN, 1, Time_start, Time_end, 1, 9999)
  800. if num > 0 {
  801. for _, v_map := range maps {
  802. ws, ok := r_jsons[v_map.T_time] /*如果确定是真实的,则存在,否则不存在 */
  803. if ok {
  804. ws.T1 = v_map
  805. r_jsons[v_map.T_time] = ws
  806. }
  807. }
  808. }
  809. maps, num = Device.Read_DeviceSensorData_ById_List(SN, 2, Time_start, Time_end, 1, 9999)
  810. if num > 0 {
  811. for _, v_map := range maps {
  812. ws, ok := r_jsons[v_map.T_time] /*如果确定是真实的,则存在,否则不存在 */
  813. if ok {
  814. ws.T2 = v_map
  815. r_jsons[v_map.T_time] = ws
  816. }
  817. }
  818. }
  819. maps, num = Device.Read_DeviceSensorData_ById_List(SN, 3, Time_start, Time_end, 1, 9999)
  820. if num > 0 {
  821. for _, v_map := range maps {
  822. ws, ok := r_jsons[v_map.T_time] /*如果确定是真实的,则存在,否则不存在 */
  823. if ok {
  824. ws.T3 = v_map
  825. r_jsons[v_map.T_time] = ws
  826. }
  827. }
  828. }
  829. maps, num = Device.Read_DeviceSensorData_ById_List(SN, 4, Time_start, Time_end, 1, 9999)
  830. if num > 0 {
  831. for _, v_map := range maps {
  832. ws, ok := r_jsons[v_map.T_time] /*如果确定是真实的,则存在,否则不存在 */
  833. if ok {
  834. ws.T4 = v_map
  835. r_jsons[v_map.T_time] = ws
  836. }
  837. }
  838. }
  839. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  840. c.ServeJSON()
  841. return
  842. }
  843. // 列表 - 接口
  844. func (c *DataController) Device_Sensor_Data_PDF() {
  845. // 验证登录
  846. b_, user_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  847. if !b_ {
  848. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  849. c.ServeJSON()
  850. return
  851. }
  852. T_snid := c.GetString("T_snid")
  853. Time_start := c.GetString("Time_start")
  854. Time_end := c.GetString("Time_end")
  855. if len(T_snid) < 10 {
  856. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  857. c.ServeJSON()
  858. return
  859. }
  860. var DeviceSensor_data []Device.DeviceData_
  861. DeviceSensor_data, _ = Device.Read_DeviceSensorData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999)
  862. var err error
  863. pdf := &gopdf.GoPdf{}
  864. pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4
  865. //err = GetFont(pdf, "LiberationSerif-Regular.ttf")
  866. //if err != nil {
  867. // log.Fatalln(err)
  868. //}
  869. //err = pdf.SetFont("Ubuntu-L", "", 14)
  870. //if err != nil {
  871. // log.Fatalln(err)
  872. //}
  873. err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf")
  874. if err != nil {
  875. c.Data["json"] = lib.JSONS{Code: 204, Msg: "ok!", Data: err}
  876. c.ServeJSON()
  877. return
  878. }
  879. err = pdf.SetFont("simsun", "", 24)
  880. if err != nil {
  881. c.Data["json"] = lib.JSONS{Code: 205, Msg: "ok!", Data: err}
  882. c.ServeJSON()
  883. return
  884. }
  885. pdf.SetGrayFill(0.5)
  886. pdf.SetMargins(0, 20, 0, 20)
  887. pdf.AddPage()
  888. //use path
  889. //pdf.Image("logo.png", 100, 50, &gopdf.Rect{W: 50, H: 50})
  890. textw, _ := pdf.MeasureTextWidth(user_r.Admin_name)
  891. pdf.SetX((595 / 2) - (textw / 2))
  892. pdf.SetY(40)
  893. pdf.Text(user_r.Admin_name)
  894. // 线
  895. pdf.SetLineWidth(2)
  896. pdf.SetLineType("dashed")
  897. pdf.Line(10, 60, 585, 60)
  898. err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf")
  899. if err != nil {
  900. c.Data["json"] = lib.JSONS{Code: 206, Msg: "ok!", Data: err}
  901. c.ServeJSON()
  902. return
  903. }
  904. err = pdf.SetFont("wts", "", 12)
  905. if err != nil {
  906. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  907. c.ServeJSON()
  908. return
  909. }
  910. //fmt.Sprintf(" %.1f ", v.T_t)
  911. lib.RectFillColor(pdf, "历史数据["+Time_start+" / "+Time_end+"]", 14, 22, 80, 550, 40, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  912. lib.RectFillColor(pdf, "序号", 12, 22, 120, 30, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  913. lib.RectFillColor(pdf, "传感器名称", 12, 52, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  914. lib.RectFillColor(pdf, "温度℃", 12, 152, 120, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  915. lib.RectFillColor(pdf, "湿度%", 12, 212, 120, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  916. lib.RectFillColor(pdf, "温度范围", 12, 272, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  917. lib.RectFillColor(pdf, "湿度范围", 12, 362, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  918. lib.RectFillColor(pdf, "记录时间", 12, 452, 120, 120, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  919. var y float64 = 140
  920. err = pdf.SetFont("wts", "", 10)
  921. if err != nil {
  922. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  923. c.ServeJSON()
  924. return
  925. }
  926. for i, v := range DeviceSensor_data {
  927. text := fmt.Sprintf(" %d ", i+1)
  928. var textH float64 = 25 // if text height is 25px.
  929. pdf.SetNewY(y, textH)
  930. y = pdf.GetY()
  931. //pdf.SetX(x) // must after pdf.SetNewY() called.
  932. //err = pdf.Text(text)
  933. //if err != nil {
  934. // log.Fatalln(err)
  935. //}
  936. T_t := fmt.Sprintf(" %.1f ", v.T_t)
  937. T_rh := fmt.Sprintf(" %.1f ", v.T_rh)
  938. T_Tlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_Tlower, v.T_Tupper)
  939. T_Rlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_RHlower, v.T_RHupper)
  940. T_time := fmt.Sprintf("%s", v.T_time)
  941. if user_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD") {
  942. T_rh = "-"
  943. T_Rlu = "-"
  944. }
  945. lib.RectFillColor(pdf, text, 10, 22, y, 30, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  946. lib.RectFillColor(pdf, v.T_name, 10, 52, y, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  947. lib.RectFillColor(pdf, T_t, 10, 152, y, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  948. lib.RectFillColor(pdf, T_rh, 10, 212, y, 60, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  949. lib.RectFillColor(pdf, T_Tlu, 10, 272, y, 90, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  950. lib.RectFillColor(pdf, T_Rlu, 10, 362, y, 90, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  951. lib.RectFillColor(pdf, T_time, 10, 452, y, 120, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  952. y += 20
  953. }
  954. timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf"
  955. err = pdf.WritePdf(timeStr)
  956. if err != nil {
  957. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  958. c.ServeJSON()
  959. return
  960. }
  961. // 上传 OSS
  962. url, is := Nats.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
  963. if !is {
  964. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  965. c.ServeJSON()
  966. return
  967. }
  968. //删除目录
  969. err = os.Remove(timeStr)
  970. if err != nil {
  971. fmt.Println(err)
  972. }
  973. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
  974. c.ServeJSON()
  975. return
  976. }
  977. // 大数据平台
  978. func (c *DataController) Raw() {
  979. // 验证登录
  980. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  981. if !b_ {
  982. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  983. c.ServeJSON()
  984. return
  985. }
  986. T_SQL := c.GetString("T_SQL")
  987. T_SQL_ := strings.ToLower(T_SQL)
  988. if strings.Contains(T_SQL_, ";") ||
  989. //strings.Contains(T_SQL, "Admin")||
  990. //strings.Contains(T_SQL, "Device ")||
  991. //strings.Contains(T_SQL, "DeviceParameter")||
  992. //strings.Contains(T_SQL, "DeviceSensor")||
  993. //strings.Contains(T_SQL, "DeviceSnOld")||
  994. //strings.Contains(T_SQL, "DeviceTask")||
  995. //strings.Contains(T_SQL, "DeviceWarning")||
  996. strings.Contains(T_SQL, "Logs") ||
  997. strings.Contains(T_SQL, "SqlLogs") ||
  998. strings.Contains(T_SQL, "Tokey") ||
  999. strings.Contains(T_SQL, "UserLogs") ||
  1000. strings.Contains(T_SQL_, "show") ||
  1001. strings.Contains(T_SQL_, "create") ||
  1002. strings.Contains(T_SQL_, "drop") ||
  1003. strings.Contains(T_SQL_, "desc") ||
  1004. strings.Contains(T_SQL_, "alter") ||
  1005. strings.Contains(T_SQL_, "insert") ||
  1006. strings.Contains(T_SQL_, "update") ||
  1007. strings.Contains(T_SQL_, "delete") {
  1008. System.Add_SqlLogs(admin_r.Admin_uuid, "Err:"+admin_r.Admin_user, T_SQL)
  1009. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!", Data: admin_r.Admin_name + " :你的行为 也被记录"}
  1010. c.ServeJSON()
  1011. return
  1012. }
  1013. if //!strings.Contains(T_SQL, "Z_DeviceData_") ||
  1014. !strings.Contains(T_SQL_, "select") {
  1015. System.Add_SqlLogs(admin_r.Admin_uuid, "Err:"+admin_r.Admin_user, T_SQL)
  1016. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!", Data: admin_r.Admin_name + " :你的行为 也被记录"}
  1017. c.ServeJSON()
  1018. return
  1019. }
  1020. System.Add_SqlLogs(admin_r.Admin_uuid, "ok", T_SQL)
  1021. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.Read_SqlRaw(T_SQL)}
  1022. c.ServeJSON()
  1023. return
  1024. }