TaskData.go 24 KB

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