TaskData.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758
  1. package controllers
  2. import (
  3. "bzd_server/conf"
  4. "bzd_server/lib"
  5. "bzd_server/logs"
  6. "bzd_server/models/Device"
  7. "bzd_server/models/System"
  8. "bzd_server/models/Task"
  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 TaskDataController struct {
  20. beego.Controller
  21. }
  22. // 获取-
  23. func (c *TaskDataController) Extract_TaskData() {
  24. // 验证登录 User_is, User_r
  25. user_r, User_is := lib.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  26. if !User_is {
  27. c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
  28. c.ServeJSON()
  29. return
  30. }
  31. Time_start := c.GetString("Time_start")
  32. Time_end := c.GetString("Time_end")
  33. T_task_id := c.GetString("T_task_id")
  34. Task_r, is := Task.Read_Task(T_task_id)
  35. if !is {
  36. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  37. c.ServeJSON()
  38. return
  39. }
  40. T_Class_id, err := c.GetInt("T_Class_id")
  41. if err != nil {
  42. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_Class_id 错误!"}
  43. c.ServeJSON()
  44. return
  45. }
  46. DeviceClass_List := Device.Read_DeviceClassList_List_id(T_Class_id)
  47. if len(DeviceClass_List) == 0 {
  48. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_Class_id 分类设备列表 为空!"}
  49. c.ServeJSON()
  50. return
  51. }
  52. logs.Println("----导入 :", DeviceClass_List)
  53. // 清空表
  54. Task.Truncate_TaskData(Task_r.T_task_id)
  55. // 插入 数据
  56. for _, v := range DeviceClass_List {
  57. logs.Println("---- :", v.T_sn, Task_r.T_task_id, Time_start, Time_end)
  58. Task.Import_TaskData(v.T_sn, v.T_id, Task_r.T_task_id, Time_start, Time_end)
  59. }
  60. System.Add_UserLogs(user_r.T_uuid, "提取数据", "提取数据"+Task_r.T_name, Task_r.T_task_id+"|"+Time_start+"|"+Time_end)
  61. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  62. c.ServeJSON()
  63. return
  64. }
  65. // 列表 -
  66. func (c *TaskDataController) TaskData_List() {
  67. // 验证登录 User_is, User_r
  68. _, User_is := lib.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  69. if !User_is {
  70. c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
  71. c.ServeJSON()
  72. return
  73. }
  74. var r_jsons lib.R_JSONS
  75. page, _ := c.GetInt("page")
  76. if page < 1 {
  77. page = 1
  78. }
  79. page_z, _ := c.GetInt("page_z")
  80. if page_z < 1 {
  81. page_z = conf.Page_size
  82. }
  83. Time_start := c.GetString("Time_start")
  84. Time_end := c.GetString("Time_end")
  85. T_sn := c.GetString("T_sn")
  86. T_id, err := c.GetInt("T_id")
  87. if err != nil {
  88. T_id = -1
  89. }
  90. T_task_id := c.GetString("T_task_id")
  91. Task_r, is := Task.Read_Task(T_task_id)
  92. if !is {
  93. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  94. c.ServeJSON()
  95. return
  96. }
  97. var cnt int64
  98. List, cnt := Task.Read_TaskData_ById_List(Task_r.T_task_id, T_sn, T_id, Time_start, Time_end, page, page_z)
  99. page_size := math.Ceil(float64(cnt) / float64(page_z))
  100. r_jsons.List = List
  101. r_jsons.Page = page
  102. r_jsons.Page_size = int(page_size)
  103. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  104. r_jsons.Num = int(cnt)
  105. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  106. c.ServeJSON()
  107. return
  108. }
  109. // 列表 -
  110. func (c *TaskDataController) UserTaskData_List() {
  111. // 验证登录 User_is, User_r
  112. _, User_is := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  113. if !User_is {
  114. c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
  115. c.ServeJSON()
  116. return
  117. }
  118. var r_jsons lib.R_JSONS
  119. page, _ := c.GetInt("page")
  120. if page < 1 {
  121. page = 1
  122. }
  123. page_z, _ := c.GetInt("page_z")
  124. if page_z < 1 {
  125. page_z = conf.Page_size
  126. }
  127. Time_start := c.GetString("Time_start")
  128. Time_end := c.GetString("Time_end")
  129. T_sn := c.GetString("T_sn")
  130. T_id, err := c.GetInt("T_id")
  131. if err != nil {
  132. T_id = -1
  133. }
  134. T_task_id := c.GetString("T_task_id")
  135. Task_r, is := Task.Read_Task(T_task_id)
  136. if !is {
  137. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  138. c.ServeJSON()
  139. return
  140. }
  141. var cnt int64
  142. List, cnt := Task.Read_TaskData_ById_List(Task_r.T_task_id, T_sn, T_id, Time_start, Time_end, page, page_z)
  143. page_size := math.Ceil(float64(cnt) / float64(page_z))
  144. r_jsons.List = List
  145. r_jsons.Page = page
  146. r_jsons.Page_size = int(page_size)
  147. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  148. r_jsons.Num = int(cnt)
  149. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  150. c.ServeJSON()
  151. return
  152. }
  153. // 列表 -
  154. func (c *TaskDataController) TaskDataClass_List() {
  155. // 验证登录 User_is, User_r
  156. _, User_is := lib.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  157. if !User_is {
  158. c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
  159. c.ServeJSON()
  160. return
  161. }
  162. T_task_id := c.GetString("T_task_id")
  163. Task_r, is := Task.Read_Task(T_task_id)
  164. if !is {
  165. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  166. c.ServeJSON()
  167. return
  168. }
  169. List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
  170. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: List}
  171. c.ServeJSON()
  172. return
  173. }
  174. // 添加-
  175. func (c *TaskDataController) TaskData_AddS() {
  176. // 验证登录 User_is, User_r
  177. user_r, User_is := lib.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  178. if !User_is {
  179. c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
  180. c.ServeJSON()
  181. return
  182. }
  183. T_task_id := c.GetString("T_task_id")
  184. Task_r, is := Task.Read_Task(T_task_id)
  185. if !is {
  186. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  187. c.ServeJSON()
  188. return
  189. }
  190. //T_sn|T_id|T_t|T_rh|T_time?
  191. T_Data := c.GetString("T_Data")
  192. if len(T_Data) < 5 {
  193. c.Data["json"] = lib.JSONS{Code: 201, Msg: "err T_Data!"}
  194. c.ServeJSON()
  195. return
  196. }
  197. T_Data_list := strings.Split(T_Data, "?")
  198. println(len(T_Data_list), "len(T_Data_list)")
  199. var T_Data_list_x = 0
  200. for _, v := range T_Data_list {
  201. // 2022-08-09 14:25:00|27.7|55.2
  202. if len(v) < 5 {
  203. println(v, "len(v) < 5")
  204. continue
  205. }
  206. v_list := strings.Split(v, "|")
  207. is = Task.Add_TaskData(Task_r.T_task_id, v_list[0], v_list[1], v_list[2], v_list[3], v_list[4])
  208. if is {
  209. T_Data_list_x += 1
  210. }
  211. }
  212. System.Add_UserLogs(user_r.T_uuid, "任务数据", "添加数据"+Task_r.T_name, Task_r.T_task_id+"结果:"+string(len(T_Data_list))+"/"+string(T_Data_list_x)+"|=> "+T_Data)
  213. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: strconv.Itoa(T_Data_list_x)}
  214. c.ServeJSON()
  215. return
  216. }
  217. // 添加-
  218. func (c *TaskDataController) TaskData_Add() {
  219. // 验证登录 User_is, User_r
  220. user_r, User_is := lib.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  221. if !User_is {
  222. c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
  223. c.ServeJSON()
  224. return
  225. }
  226. T_sn := c.GetString("T_sn")
  227. T_id, _ := c.GetInt("T_id")
  228. T_t, _ := c.GetFloat("T_t")
  229. T_rh, _ := c.GetFloat("T_rh")
  230. T_time := c.GetString("T_time")
  231. T_task_id := c.GetString("T_task_id")
  232. Task_r, is := Task.Read_Task(T_task_id)
  233. if !is {
  234. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  235. c.ServeJSON()
  236. return
  237. }
  238. is = Task.Add_TaskData(Task_r.T_task_id, T_sn, strconv.Itoa(T_id), fmt.Sprintf("%.2f", T_t), fmt.Sprintf("%.2f", T_rh), T_time)
  239. if !is {
  240. c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
  241. c.ServeJSON()
  242. return
  243. }
  244. System.Add_UserLogs(user_r.T_uuid, "任务数据", "添加数据"+Task_r.T_name, Task_r.T_task_id+"|"+T_sn+"|"+strconv.Itoa(T_id)+"|"+fmt.Sprintf("%.2f", T_t)+"|"+fmt.Sprintf("%.2f", T_rh)+T_time)
  245. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  246. c.ServeJSON()
  247. return
  248. }
  249. // 修改-
  250. func (c *TaskDataController) TaskData_Up() {
  251. // 验证登录 User_is, User_r
  252. user_r, User_is := lib.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  253. if !User_is {
  254. c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
  255. c.ServeJSON()
  256. return
  257. }
  258. Id, err := c.GetInt("Id")
  259. if err != nil {
  260. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  261. c.ServeJSON()
  262. return
  263. }
  264. T_t, err := c.GetFloat("T_t")
  265. if err != nil {
  266. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_t 错误!"}
  267. c.ServeJSON()
  268. return
  269. }
  270. T_rh, err := c.GetFloat("T_rh")
  271. if err != nil {
  272. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_rh 错误!"}
  273. c.ServeJSON()
  274. return
  275. }
  276. T_time := c.GetString("T_time")
  277. T_task_id := c.GetString("T_task_id")
  278. Task_r, is := Task.Read_Task(T_task_id)
  279. if !is {
  280. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  281. c.ServeJSON()
  282. return
  283. }
  284. is = Task.Up_TaskData(Task_r.T_task_id, strconv.Itoa(Id), fmt.Sprintf("%.2f", T_t), fmt.Sprintf("%.2f", T_rh), T_time)
  285. if !is {
  286. c.Data["json"] = lib.JSONS{Code: 301, Msg: "修改失败!"}
  287. c.ServeJSON()
  288. return
  289. }
  290. System.Add_UserLogs(user_r.T_uuid, "任务数据", "修改数据"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id)+"|"+fmt.Sprintf("%.2f", T_t)+"|"+fmt.Sprintf("%.2f", T_rh)+T_time)
  291. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  292. c.ServeJSON()
  293. return
  294. }
  295. // 删除-
  296. func (c *TaskDataController) TaskData_Del() {
  297. // 验证登录 User_is, User_r
  298. user_r, User_is := lib.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  299. if !User_is {
  300. c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
  301. c.ServeJSON()
  302. return
  303. }
  304. Id, err := c.GetInt("Id")
  305. if err != nil {
  306. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  307. c.ServeJSON()
  308. return
  309. }
  310. T_task_id := c.GetString("T_task_id")
  311. Task_r, is := Task.Read_Task(T_task_id)
  312. if !is {
  313. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  314. c.ServeJSON()
  315. return
  316. }
  317. is = Task.Del_TaskData(Task_r.T_task_id, strconv.Itoa(Id))
  318. if !is {
  319. c.Data["json"] = lib.JSONS{Code: 301, Msg: "删除失败!"}
  320. c.ServeJSON()
  321. return
  322. }
  323. System.Add_UserLogs(user_r.T_uuid, "任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
  324. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  325. c.ServeJSON()
  326. return
  327. }
  328. // 删除-
  329. func (c *TaskDataController) TaskData_Del_t_id() {
  330. // 验证登录 User_is, User_r
  331. user_r, User_is := lib.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  332. if !User_is {
  333. c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
  334. c.ServeJSON()
  335. return
  336. }
  337. Id, err := c.GetInt("Id")
  338. if err != nil {
  339. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  340. c.ServeJSON()
  341. return
  342. }
  343. T_task_id := c.GetString("T_task_id")
  344. Task_r, is := Task.Read_Task(T_task_id)
  345. if !is {
  346. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  347. c.ServeJSON()
  348. return
  349. }
  350. is = Task.Del_TaskData_t_id(Task_r.T_task_id, strconv.Itoa(Id))
  351. if !is {
  352. c.Data["json"] = lib.JSONS{Code: 301, Msg: "删除失败!"}
  353. c.ServeJSON()
  354. return
  355. }
  356. System.Add_UserLogs(user_r.T_uuid, "任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
  357. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  358. c.ServeJSON()
  359. return
  360. }
  361. // 列表 - 接口
  362. func (c *TaskDataController) Export_Data_Excel() {
  363. // 验证登录 User_is, User_r
  364. _, User_is := lib.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  365. if !User_is {
  366. c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
  367. c.ServeJSON()
  368. return
  369. }
  370. Time_start := c.GetString("Time_start")
  371. Time_end := c.GetString("Time_end")
  372. T_sn_str := c.GetString("T_sn_list") //865901058809339,865901058815849,865901058818991,865901058810568
  373. //T_id, err := c.GetInt("T_id")
  374. //if err != nil {
  375. // T_id = -1
  376. //
  377. //}
  378. T_task_id := c.GetString("T_task_id")
  379. Task_r, is := Task.Read_Task(T_task_id)
  380. if !is {
  381. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  382. c.ServeJSON()
  383. return
  384. }
  385. T_sn_list := strings.Split(T_sn_str, ",")
  386. DeviceSensor_data_list := []Task.TaskData_{}
  387. for _, v := range T_sn_list {
  388. DeviceSensor_data, _ := Task.Read_TaskData_ById_List(Task_r.T_task_id, v, -1, Time_start, Time_end, 1, 9999)
  389. DeviceSensor_data_list = append(DeviceSensor_data_list, DeviceSensor_data...)
  390. }
  391. f := excelize.NewFile() // 设置单元格的值
  392. // 这里设置表头
  393. f.SetCellValue("Sheet1", "A1", "编号")
  394. f.SetCellValue("Sheet1", "B1", "SN")
  395. f.SetCellValue("Sheet1", "C1", "温度℃")
  396. f.SetCellValue("Sheet1", "D1", "湿度%")
  397. f.SetCellValue("Sheet1", "E1", "记录时间")
  398. // 设置列宽
  399. f.SetColWidth("Sheet1", "A", "A", 7)
  400. f.SetColWidth("Sheet1", "B", "B", 20)
  401. f.SetColWidth("Sheet1", "C", "C", 10)
  402. f.SetColWidth("Sheet1", "D", "D", 10)
  403. f.SetColWidth("Sheet1", "E", "E", 22)
  404. line := 1
  405. // 循环写入数据
  406. for _, v := range DeviceSensor_data_list {
  407. line++
  408. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), v.T_id)
  409. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_sn)
  410. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), strconv.FormatFloat(float64(v.T_t), 'f', 1, 64))
  411. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), strconv.FormatFloat(float64(v.T_rh), 'f', 1, 64))
  412. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.T_time)
  413. }
  414. fmt.Println("DeviceSensor_data:", len(DeviceSensor_data_list))
  415. timeStr := time.Now().Format("20060102150405")
  416. // 保存文件
  417. if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
  418. fmt.Println(err)
  419. }
  420. if !lib.Pload_qiniu("ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx") {
  421. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  422. c.ServeJSON()
  423. return
  424. }
  425. //删除目录
  426. //err = os.Remove("ofile/" + timeStr + ".xlsx")
  427. //if err != nil {
  428. // fmt.Println(err)
  429. //}
  430. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: "https://bzdcoldverifyoss.baozhida.cn/" + "ofile/" + timeStr + ".xlsx"}
  431. c.ServeJSON()
  432. return
  433. }
  434. // 列表 - 接口
  435. func (c *TaskDataController) Export_Data_PDF() {
  436. // 验证登录 User_is, User_r
  437. _, User_is := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  438. if !User_is {
  439. c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
  440. c.ServeJSON()
  441. return
  442. }
  443. Time_start := c.GetString("Time_start")
  444. Time_end := c.GetString("Time_end")
  445. T_sn_str := c.GetString("T_sn_list") //865901058809339,865901058815849,865901058818991,865901058810568
  446. //T_id, err := c.GetInt("T_id")
  447. //if err != nil {
  448. // T_id = -1
  449. //
  450. //}
  451. T_task_id := c.GetString("T_task_id")
  452. Task_r, is := Task.Read_Task(T_task_id)
  453. if !is {
  454. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  455. c.ServeJSON()
  456. return
  457. }
  458. T_sn_list := strings.Split(T_sn_str, ",")
  459. DeviceSensor_data_list := []Task.TaskData_{}
  460. for _, v := range T_sn_list {
  461. DeviceSensor_data, _ := Task.Read_TaskData_ById_List(Task_r.T_task_id, v, -1, Time_start, Time_end, 1, 9999)
  462. DeviceSensor_data_list = append(DeviceSensor_data_list, DeviceSensor_data...)
  463. }
  464. //------
  465. var err error
  466. pdf := &gopdf.GoPdf{}
  467. pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4
  468. //err = GetFont(pdf, "LiberationSerif-Regular.ttf")
  469. //if err != nil {
  470. // log.Fatalln(err)
  471. //}
  472. //err = pdf.SetFont("Ubuntu-L", "", 14)
  473. //if err != nil {
  474. // log.Fatalln(err)
  475. //}
  476. err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf")
  477. if err != nil {
  478. c.Data["json"] = lib.JSONS{Code: 204, Msg: "ok!", Data: err}
  479. c.ServeJSON()
  480. return
  481. }
  482. err = pdf.SetFont("simsun", "", 24)
  483. if err != nil {
  484. c.Data["json"] = lib.JSONS{Code: 205, Msg: "ok!", Data: err}
  485. c.ServeJSON()
  486. return
  487. }
  488. pdf.SetGrayFill(0.5)
  489. pdf.SetMargins(0, 20, 0, 20)
  490. pdf.AddPage()
  491. //use path
  492. //pdf.Image("logo.png", 100, 50, &gopdf.Rect{W: 50, H: 50})
  493. textw, _ := pdf.MeasureTextWidth(Task_r.T_name)
  494. pdf.SetX((595 / 2) - (textw / 2))
  495. pdf.SetY(40)
  496. pdf.Text(Task_r.T_name)
  497. // 线
  498. pdf.SetLineWidth(2)
  499. pdf.SetLineType("dashed")
  500. pdf.Line(10, 60, 585, 60)
  501. err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf")
  502. if err != nil {
  503. c.Data["json"] = lib.JSONS{Code: 206, Msg: "ok!", Data: err}
  504. c.ServeJSON()
  505. return
  506. }
  507. err = pdf.SetFont("wts", "", 12)
  508. if err != nil {
  509. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  510. c.ServeJSON()
  511. return
  512. }
  513. t_ := Time_start + " / " + Time_end
  514. if len(Time_start) == 0 {
  515. t_ = "所有数据"
  516. }
  517. //fmt.Sprintf(" %.1f ", v.T_t)
  518. lib.RectFillColor(pdf, "提前数据时间段["+t_+"]", 14, 22, 80, 550, 40, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  519. lib.RectFillColor(pdf, "编号", 12, 22, 120, 80, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  520. lib.RectFillColor(pdf, "SN", 12, 92, 120, 150, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  521. lib.RectFillColor(pdf, "温度℃", 12, 242, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  522. lib.RectFillColor(pdf, "湿度%", 12, 342, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  523. //lib.RectFillColor(pdf, "温度范围", 12, 272, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  524. //lib.RectFillColor(pdf, "湿度范围", 12, 362, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  525. lib.RectFillColor(pdf, "记录时间", 12, 442, 120, 130, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  526. var y float64 = 140
  527. err = pdf.SetFont("wts", "", 10)
  528. if err != nil {
  529. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  530. c.ServeJSON()
  531. return
  532. }
  533. for _, v := range DeviceSensor_data_list {
  534. //text := fmt.Sprintf(" %d ", i+1)
  535. var textH float64 = 25 // if text height is 25px.
  536. pdf.SetNewY(y, textH)
  537. y = pdf.GetY()
  538. //pdf.SetX(x) // must after pdf.SetNewY() called.
  539. //err = pdf.Text(text)
  540. //if err != nil {
  541. // log.Fatalln(err)
  542. //}
  543. T_t := fmt.Sprintf(" %.1f ", v.T_t)
  544. T_rh := fmt.Sprintf(" %.1f ", v.T_rh)
  545. T_time := fmt.Sprintf("%s", v.T_time)
  546. lib.RectFillColor(pdf, strconv.Itoa(v.T_id), 10, 22, y, 80, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  547. lib.RectFillColor(pdf, v.T_sn, 10, 92, y, 150, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  548. lib.RectFillColor(pdf, T_t, 10, 242, y, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  549. lib.RectFillColor(pdf, T_rh, 10, 342, y, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  550. lib.RectFillColor(pdf, T_time, 10, 442, y, 130, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  551. y += 20
  552. }
  553. timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf"
  554. err = pdf.WritePdf(timeStr)
  555. if err != nil {
  556. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  557. c.ServeJSON()
  558. return
  559. }
  560. if !lib.Pload_qiniu(timeStr, timeStr) {
  561. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  562. c.ServeJSON()
  563. return
  564. }
  565. //删除目录
  566. err = os.Remove(timeStr)
  567. if err != nil {
  568. fmt.Println(err)
  569. }
  570. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: "https://bzdcoldverifyoss.baozhida.cn/" + timeStr}
  571. c.ServeJSON()
  572. return
  573. }
  574. // 列表 - 接口
  575. func (c *TaskDataController) Check() {
  576. // 验证登录 User_is, User_r
  577. _, User_is := lib.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  578. if !User_is {
  579. c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
  580. c.ServeJSON()
  581. return
  582. }
  583. T_task_id := c.GetString("T_task_id")
  584. Task_r, is := Task.Read_Task(T_task_id)
  585. if !is {
  586. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  587. c.ServeJSON()
  588. return
  589. }
  590. type R_JSONS struct {
  591. T_sn string // SN
  592. T_id int // 编号
  593. T_unm int // 数据量
  594. T_time_interval int64 // 时间间隔
  595. Time_start string // 开始
  596. Time_end string // 结束
  597. Result int // 200 OK, 201 可以补 , 202 不能补
  598. Result_str string // 提示内容
  599. Result_Time_start string // 2022-8-05 21:01
  600. Result_Time_defect int64 // 缺失时间间隔
  601. }
  602. var r_jsons []R_JSONS
  603. List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
  604. for _, v := range List {
  605. var r_json R_JSONS
  606. r_json.T_sn = v.T_sn
  607. r_json.T_id = v.T_id
  608. r_json.Result = 200
  609. DeviceSensor_data := Task.Read_TaskData_ById_List_(Task_r.T_task_id, v.T_sn, v.T_id)
  610. r_json.T_unm = len(DeviceSensor_data)
  611. if r_json.T_unm > 2 {
  612. r_json.Time_end = DeviceSensor_data[len(DeviceSensor_data)-1].T_time
  613. r_json.Time_start = DeviceSensor_data[0].T_time
  614. formatTime_a, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[0].T_time)
  615. formatTime_b, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[1].T_time)
  616. formatTime_x := formatTime_b.Unix() - formatTime_a.Unix()
  617. r_json.T_time_interval = formatTime_x
  618. println("formatTime_x:", v.T_id, v.T_sn, formatTime_x)
  619. if formatTime_x > 60*30 || formatTime_x < 60 {
  620. r_json.Result = 202
  621. r_json.Result_str = "数据异常(数据的第一个时间与第二个时间相差 " + strconv.FormatInt(formatTime_x, 10) + "秒),必须大于60秒,小于30分钟"
  622. r_jsons = append(r_jsons, r_json)
  623. continue
  624. }
  625. for data_i := 2; data_i < len(DeviceSensor_data); data_i++ {
  626. formatTime_a = formatTime_b
  627. formatTime_b, _ = time.Parse("2006-1-2 15:04", DeviceSensor_data[data_i].T_time)
  628. formatTime_ := formatTime_b.Unix() - formatTime_a.Unix()
  629. println("formatTime_x-:", formatTime_)
  630. if formatTime_ < formatTime_x {
  631. r_json.Result = 202
  632. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,间隔小于时间间隔,不能自动补充"
  633. break
  634. }
  635. if formatTime_x != formatTime_ {
  636. if formatTime_ > 60*30 {
  637. r_json.Result = 202
  638. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,相差时间大于30分钟,不能自动补充"
  639. break
  640. }
  641. r_json.Result = 201
  642. r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒"
  643. r_json.Result_Time_start = DeviceSensor_data[data_i-1].T_time
  644. r_json.Result_Time_defect = formatTime_
  645. println(r_json.Result_str)
  646. break
  647. }
  648. }
  649. } else {
  650. r_json.Result = 202
  651. r_json.Result_str = "数据量太少 必须大于 2条以上!"
  652. }
  653. r_jsons = append(r_jsons, r_json)
  654. }
  655. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  656. c.ServeJSON()
  657. return
  658. }