TaskData.go 22 KB

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