TaskData.go 22 KB

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