TaskData.go 22 KB

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