TaskData.go 24 KB

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