TaskData.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. package controllers
  2. import (
  3. "bzd_server/conf"
  4. "bzd_server/lib"
  5. "bzd_server/logs"
  6. "bzd_server/models/System"
  7. "bzd_server/models/Task"
  8. "fmt"
  9. beego "github.com/beego/beego/v2/server/web"
  10. "github.com/xuri/excelize/v2"
  11. "math"
  12. "os"
  13. "strconv"
  14. "strings"
  15. "time"
  16. )
  17. type TaskDataController struct {
  18. beego.Controller
  19. }
  20. // 列表 -
  21. func (c *TaskDataController) TaskData_List() {
  22. var r_jsons lib.R_JSONS
  23. page, _ := c.GetInt("page")
  24. if page < 1 {
  25. page = 1
  26. }
  27. page_z, _ := c.GetInt("page_z")
  28. if page_z < 1 {
  29. page_z = conf.Page_size
  30. }
  31. Time_start := c.GetString("Time_start")
  32. Time_end := c.GetString("Time_end")
  33. T_sn := c.GetString("T_sn")
  34. T_id, err := c.GetInt("T_id")
  35. if err != nil {
  36. T_id = -1
  37. }
  38. T_task_id := c.GetString("T_task_id")
  39. Task_r, is := Task.Read_Task(T_task_id)
  40. if !is {
  41. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  42. c.ServeJSON()
  43. return
  44. }
  45. var cnt int64
  46. List, cnt := Task.Read_TaskData_ById_List(Task_r.T_task_id, T_sn, T_id, Time_start, Time_end, page, page_z)
  47. page_size := math.Ceil(float64(cnt) / float64(page_z))
  48. r_jsons.List = List
  49. r_jsons.Page = page
  50. r_jsons.Page_size = int(page_size)
  51. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  52. r_jsons.Num = int(cnt)
  53. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  54. c.ServeJSON()
  55. return
  56. }
  57. // 列表 -
  58. func (c *TaskDataController) TaskDataClass_List() {
  59. T_task_id := c.GetString("T_task_id")
  60. Task_r, is := Task.Read_Task(T_task_id)
  61. if !is {
  62. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  63. c.ServeJSON()
  64. return
  65. }
  66. List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
  67. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: List}
  68. c.ServeJSON()
  69. return
  70. }
  71. // 添加-
  72. func (c *TaskDataController) TaskData_AddS() {
  73. // 获取登录用户的uuid
  74. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  75. T_task_id := c.GetString("T_task_id")
  76. Task_r, is := Task.Read_Task(T_task_id)
  77. if !is {
  78. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  79. c.ServeJSON()
  80. return
  81. }
  82. //T_sn|T_id|T_t|T_rh|T_time?
  83. T_Data := c.GetString("T_Data")
  84. if len(T_Data) < 5 {
  85. c.Data["json"] = lib.JSONS{Code: 201, Msg: "err T_Data!"}
  86. c.ServeJSON()
  87. return
  88. }
  89. T_Data_list := strings.Split(T_Data, "?")
  90. println(len(T_Data_list), "len(T_Data_list)")
  91. var T_Data_list_x = 0
  92. for _, v := range T_Data_list {
  93. // 2022-08-09 14:25:00|27.7|55.2
  94. if len(v) < 5 {
  95. println(v, "len(v) < 5")
  96. continue
  97. }
  98. v_list := strings.Split(v, "|")
  99. is = Task.Add_TaskData(Task_r.T_task_id, v_list[0], v_list[1], v_list[2], v_list[3], v_list[4])
  100. if is {
  101. T_Data_list_x += 1
  102. }
  103. }
  104. System.Add_UserLogs_T(T_uuid, "任务数据", "添加数据"+Task_r.T_name, Task_r.T_task_id+"结果:"+string(len(T_Data_list))+"/"+string(T_Data_list_x)+"|=> "+T_Data)
  105. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: strconv.Itoa(T_Data_list_x)}
  106. c.ServeJSON()
  107. return
  108. }
  109. // 添加-
  110. func (c *TaskDataController) TaskData_Add() {
  111. // 获取登录用户的uuid
  112. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  113. T_sn := c.GetString("T_sn")
  114. T_id, _ := c.GetInt("T_id")
  115. T_t, _ := c.GetFloat("T_t")
  116. T_rh, _ := c.GetFloat("T_rh")
  117. T_time := c.GetString("T_time")
  118. T_task_id := c.GetString("T_task_id")
  119. Task_r, is := Task.Read_Task(T_task_id)
  120. if !is {
  121. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  122. c.ServeJSON()
  123. return
  124. }
  125. 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)
  126. if !is {
  127. c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
  128. c.ServeJSON()
  129. return
  130. }
  131. System.Add_UserLogs_T(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)
  132. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  133. c.ServeJSON()
  134. return
  135. }
  136. // 修改-
  137. func (c *TaskDataController) TaskData_Up() {
  138. // 获取登录用户的uuid
  139. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  140. Id, err := c.GetInt("Id")
  141. if err != nil {
  142. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  143. c.ServeJSON()
  144. return
  145. }
  146. T_t, err := c.GetFloat("T_t")
  147. if err != nil {
  148. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_t 错误!"}
  149. c.ServeJSON()
  150. return
  151. }
  152. T_rh, err := c.GetFloat("T_rh")
  153. if err != nil {
  154. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_rh 错误!"}
  155. c.ServeJSON()
  156. return
  157. }
  158. T_time := c.GetString("T_time")
  159. T_task_id := c.GetString("T_task_id")
  160. Task_r, is := Task.Read_Task(T_task_id)
  161. if !is {
  162. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  163. c.ServeJSON()
  164. return
  165. }
  166. is = Task.Up_TaskData(Task_r.T_task_id, strconv.Itoa(Id), fmt.Sprintf("%.2f", T_t), fmt.Sprintf("%.2f", T_rh), T_time)
  167. if !is {
  168. c.Data["json"] = lib.JSONS{Code: 301, Msg: "修改失败!"}
  169. c.ServeJSON()
  170. return
  171. }
  172. System.Add_UserLogs_T(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)
  173. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  174. c.ServeJSON()
  175. return
  176. }
  177. // 删除-
  178. func (c *TaskDataController) TaskData_Del() {
  179. // 获取登录用户的uuid
  180. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  181. Id, err := c.GetInt("Id")
  182. if err != nil {
  183. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  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. is = Task.Del_TaskData(Task_r.T_task_id, strconv.Itoa(Id))
  195. if !is {
  196. c.Data["json"] = lib.JSONS{Code: 301, Msg: "删除失败!"}
  197. c.ServeJSON()
  198. return
  199. }
  200. System.Add_UserLogs_T(T_uuid, "任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
  201. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  202. c.ServeJSON()
  203. return
  204. }
  205. // 删除-
  206. func (c *TaskDataController) TaskData_Del_t_id() {
  207. // 获取登录用户的uuid
  208. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  209. Id, err := c.GetInt("Id")
  210. if err != nil {
  211. c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
  212. c.ServeJSON()
  213. return
  214. }
  215. T_task_id := c.GetString("T_task_id")
  216. Task_r, is := Task.Read_Task(T_task_id)
  217. if !is {
  218. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  219. c.ServeJSON()
  220. return
  221. }
  222. is = Task.Del_TaskData_t_id(Task_r.T_task_id, strconv.Itoa(Id))
  223. if !is {
  224. c.Data["json"] = lib.JSONS{Code: 301, Msg: "删除失败!"}
  225. c.ServeJSON()
  226. return
  227. }
  228. System.Add_UserLogs_T(T_uuid, "任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
  229. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  230. c.ServeJSON()
  231. return
  232. }
  233. // 列表 - 接口
  234. func (c *TaskDataController) Export_Data_Excel() {
  235. Time_start := c.GetString("Time_start")
  236. Time_end := c.GetString("Time_end")
  237. T_sn_str := c.GetString("T_sn_list") //865901058809339,865901058815849,865901058818991,865901058810568
  238. //T_id, err := c.GetInt("T_id")
  239. //if err != nil {
  240. // T_id = -1
  241. //
  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: 201, Msg: "T_task_id 错误!"}
  247. c.ServeJSON()
  248. return
  249. }
  250. T_sn_list := strings.Split(T_sn_str, ",")
  251. DeviceSensor_data_list := []Task.TaskData_{}
  252. for _, v := range T_sn_list {
  253. DeviceSensor_data, _ := Task.Read_TaskData_ById_List(Task_r.T_task_id, v, -1, Time_start, Time_end, 1, 9999)
  254. DeviceSensor_data_list = append(DeviceSensor_data_list, DeviceSensor_data...)
  255. }
  256. f := excelize.NewFile() // 设置单元格的值
  257. // 这里设置表头
  258. f.SetCellValue("Sheet1", "A1", "编号")
  259. f.SetCellValue("Sheet1", "B1", "SN")
  260. f.SetCellValue("Sheet1", "C1", "温度℃")
  261. f.SetCellValue("Sheet1", "D1", "湿度%")
  262. f.SetCellValue("Sheet1", "E1", "记录时间")
  263. // 设置列宽
  264. f.SetColWidth("Sheet1", "A", "A", 7)
  265. f.SetColWidth("Sheet1", "B", "B", 20)
  266. f.SetColWidth("Sheet1", "C", "C", 10)
  267. f.SetColWidth("Sheet1", "D", "D", 10)
  268. f.SetColWidth("Sheet1", "E", "E", 22)
  269. line := 1
  270. // 循环写入数据
  271. for _, v := range DeviceSensor_data_list {
  272. line++
  273. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), v.T_id)
  274. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_sn)
  275. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), strconv.FormatFloat(float64(v.T_t), 'f', 1, 64))
  276. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), strconv.FormatFloat(float64(v.T_rh), 'f', 1, 64))
  277. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.T_time)
  278. }
  279. fmt.Println("DeviceSensor_data:", len(DeviceSensor_data_list))
  280. timeStr := time.Now().Format("20060102150405")
  281. // 保存文件
  282. if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
  283. fmt.Println(err)
  284. }
  285. if !lib.Pload_qiniu("ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx") {
  286. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  287. c.ServeJSON()
  288. return
  289. }
  290. //删除目录
  291. //err = os.Remove("ofile/" + timeStr + ".xlsx")
  292. //if err != nil {
  293. // fmt.Println(err)
  294. //}
  295. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: "https://bzdcoldverifyoss.baozhida.cn/" + "ofile/" + timeStr + ".xlsx"}
  296. c.ServeJSON()
  297. return
  298. }
  299. // 打包数据本地数据
  300. func (c *TaskDataController) TaskData_Import_TaskData() {
  301. // 获取登录用户的uuid
  302. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  303. T_task_id := c.GetString("T_task_id")
  304. _, is := Task.Read_Task(T_task_id)
  305. if !is {
  306. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_task_id 错误!"}
  307. c.ServeJSON()
  308. return
  309. }
  310. sql_file := fmt.Sprintf("%sZ_TaskData_%s.sql", conf.Sql_Temp_Path, T_task_id)
  311. org, err := Task.Dump_TaskData(T_task_id, conf.MysqlServer2_Username, conf.MysqlServer2_Password, conf.MysqlServer2_UrlPort, conf.MysqlServer2_Database, sql_file)
  312. if err != nil {
  313. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Z_TaskData_" + T_task_id + "线上数据导出失败!"}
  314. c.ServeJSON()
  315. return
  316. }
  317. System.Add_UserLogs_T(T_uuid, "任务数据-打包本地数据", "导出线上数据Z_TaskData_"+T_task_id, org)
  318. i := 0
  319. flag := false
  320. Task.CREATE_TaskData(conf.Local_AliasName, T_task_id)
  321. for i < 10 {
  322. Task.Truncate_TaskData(conf.Local_AliasName, T_task_id)
  323. org, err := Task.Insert_TaskData(conf.MysqlServer_Username, conf.MysqlServer_Password, conf.MysqlServer_UrlPort, conf.MysqlServer_Database, sql_file)
  324. if err != nil {
  325. logs.Println("任务数据-打包本地数据", "线下导入数据Z_TaskData_"+T_task_id, err.Error())
  326. } else {
  327. if Task.Check_TaskData_Num(T_task_id) {
  328. System.Add_UserLogs_T(T_uuid, "任务数据-打包本地数据", "线下导入数据Z_TaskData_"+T_task_id, org)
  329. flag = true
  330. break
  331. }
  332. }
  333. i++
  334. }
  335. // 重试10次后仍然没有成功导入数据
  336. if !flag {
  337. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Z_TaskData_" + T_task_id + "线下导入数据失败!"}
  338. c.ServeJSON()
  339. return
  340. }
  341. //删除导出的sql文件
  342. _ = os.Remove(sql_file)
  343. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  344. c.ServeJSON()
  345. }
  346. // 更新线上数据
  347. func (c *TaskDataController) TaskData_Up_TaskData() {
  348. // 获取登录用户的uuid
  349. T_uuid, _ := lib.GetAdminT_Uuid(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  350. T_task_id := c.GetString("T_task_id")
  351. Task_r, is := Task.Read_Task(T_task_id)
  352. if !is {
  353. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
  354. c.ServeJSON()
  355. return
  356. }
  357. sql_file := fmt.Sprintf("%sZ_TaskData_%s.sql", conf.Sql_Temp_Path, T_task_id)
  358. org, err := Task.Dump_TaskData(T_task_id, conf.MysqlServer_Username, conf.MysqlServer_Password, conf.MysqlServer_UrlPort, conf.MysqlServer_Database, sql_file)
  359. if err != nil {
  360. logs.Println(T_uuid, "任务数据-更新线上数据", "导出线下数据Z_TaskData_"+T_task_id, err.Error())
  361. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Z_TaskData_" + T_task_id + "线下数据导出失败!"}
  362. c.ServeJSON()
  363. return
  364. }
  365. System.Add_UserLogs_T(T_uuid, "任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, org)
  366. i := 0
  367. flag := false
  368. for i < 10 {
  369. Task.Truncate_TaskData(conf.Server_AliasName, T_task_id)
  370. org, err = Task.Insert_TaskData(conf.MysqlServer2_Username, conf.MysqlServer2_Password, conf.MysqlServer2_UrlPort, conf.MysqlServer2_Database, sql_file)
  371. if err != nil {
  372. logs.Println(T_uuid, "任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, err.Error())
  373. } else {
  374. if Task.Check_TaskData_Num(T_task_id) {
  375. System.Add_UserLogs_T(T_uuid, "任务数据-更新线上数据", "线上导入数据Z_TaskData_"+T_task_id, org)
  376. flag = true
  377. break
  378. }
  379. }
  380. i++
  381. }
  382. // 重试10次后仍然没有成功导入数据
  383. if !flag {
  384. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Z_TaskData_" + T_task_id + "线上导入数据失败!"}
  385. c.ServeJSON()
  386. return
  387. }
  388. //删除导出的sql文件
  389. _ = os.Remove(sql_file)
  390. // 提交后将当前任务 报告编写 标志为 1
  391. Task_r.T_delivery_state = 1
  392. if !Task.Update_Task(Task_r, "T_delivery_state") {
  393. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  394. c.ServeJSON()
  395. return
  396. }
  397. // 向线上用户日志表写入数据
  398. System.Add_UserLogs_T(T_uuid, "任务", "修改", Task_r)
  399. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  400. c.ServeJSON()
  401. }