Warning.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775
  1. package controllers
  2. import (
  3. "Cold_Api/Nats/NatsServer"
  4. "Cold_Api/conf"
  5. "Cold_Api/controllers/lib"
  6. "Cold_Api/logs"
  7. "Cold_Api/models/Account"
  8. "Cold_Api/models/Device"
  9. "Cold_Api/models/System"
  10. "Cold_Api/models/Warning"
  11. "fmt"
  12. "github.com/robfig/cron/v3"
  13. "github.com/xuri/excelize/v2"
  14. "math"
  15. "os"
  16. "strconv"
  17. "time"
  18. )
  19. // 设备告警 ------------------------------------------
  20. // 告警列表
  21. func (c *DeviceController) DeviceWarning_List() {
  22. type R_JSONS struct {
  23. //必须的大写开头
  24. Data []Warning.Warning_R
  25. Num int64
  26. Page int
  27. Page_size int
  28. }
  29. var r_jsons R_JSONS
  30. page, _ := c.GetInt("page")
  31. if page < 1 {
  32. page = 1
  33. }
  34. page_z, _ := c.GetInt("page_z")
  35. if page_z < 1 {
  36. page_z = conf.Page_size
  37. }
  38. T_name := c.GetString("T_name")
  39. T_tp := c.GetString("T_tp")
  40. Time_start := c.GetString("Time_start")
  41. Time_end := c.GetString("Time_end")
  42. T_handle, _ := c.GetInt("T_handle")
  43. T_admin, _ := c.GetInt("T_admin")
  44. T_history, _ := c.GetInt("T_history")
  45. var tpList []string
  46. if len(T_tp) > 0 {
  47. tpList = lib.SplitStringIds(T_tp, "T")
  48. } else {
  49. power, _ := Account.Read_Power_ById(c.Admin_r.T_power)
  50. if power.T_warning != "*" {
  51. tpList = lib.SplitStringIds(power.T_warning, "W")
  52. }
  53. }
  54. bindSN, err := Account.Read_UserDevice_List(*c.Admin_r)
  55. if err != nil {
  56. c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询失败!"}
  57. c.ServeJSON()
  58. return
  59. }
  60. var T_year, T_month string
  61. if T_history == 1 {
  62. date, err := time.Parse("2006-01-02 15:04:05", Time_start)
  63. if err != nil {
  64. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误"}
  65. c.ServeJSON()
  66. return
  67. }
  68. T_year, T_month = date.Format("2006"), date.Format("01")
  69. }
  70. // 管理员界面
  71. if T_admin == 1 {
  72. if T_history == 1 {
  73. // 获取备份
  74. r_jsons.Data, r_jsons.Num = Warning.Read_Admin_Warning_Backups(c.Admin_r.T_pids, T_year, T_month, tpList, T_name, T_handle, Time_start, Time_end, page, page_z)
  75. } else {
  76. // 获取最新
  77. r_jsons.Data, r_jsons.Num = Warning.Read_Admin_Warning_List(c.Admin_r.T_pids, tpList, T_name, T_handle, Time_start, Time_end, page, page_z)
  78. }
  79. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  80. c.ServeJSON()
  81. return
  82. }
  83. // 公司报警界面
  84. if T_history == 1 {
  85. r_jsons.Data, r_jsons.Num = Warning.Read_Warning_Backups(c.T_pid, bindSN, T_year, T_month, tpList, T_name, T_handle, Time_start, Time_end, page, page_z)
  86. } else {
  87. // 获取最新
  88. r_jsons.Data, r_jsons.Num = Warning.Read_Warning_List(c.T_pid, bindSN, tpList, T_name, T_handle, Time_start, Time_end, page, page_z)
  89. }
  90. r_jsons.Page = page
  91. r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
  92. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  93. c.ServeJSON()
  94. return
  95. }
  96. func (c *DeviceController) CompanyWarning_List() {
  97. var r_jsons lib.R_JSONS
  98. page, _ := c.GetInt("page")
  99. if page < 1 {
  100. page = 1
  101. }
  102. page_z, _ := c.GetInt("page_z")
  103. if page_z < 1 {
  104. page_z = conf.Page_size
  105. }
  106. T_name := c.GetString("T_name")
  107. T_tp := c.GetString("T_tp")
  108. Time_start := c.GetString("Time_start")
  109. Time_end := c.GetString("Time_end")
  110. T_handle, _ := c.GetInt("T_handle")
  111. T_history, _ := c.GetInt("T_history")
  112. var tpList []string
  113. if len(T_tp) > 0 {
  114. tpList = lib.SplitStringIds(T_tp, "T")
  115. } else {
  116. power, _ := Account.Read_Power_ById(c.Admin_r.T_power)
  117. if power.T_warning != "*" {
  118. tpList = lib.SplitStringIds(power.T_warning, "W")
  119. }
  120. }
  121. Company_r, err := Account.Read_Company_ById(c.T_pid)
  122. if err != nil {
  123. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id Err!"}
  124. c.ServeJSON()
  125. return
  126. }
  127. T_pids := Account.ReadCompanyIds_T_path(Company_r.T_path)
  128. var T_year, T_month string
  129. if T_history == 1 {
  130. date, err := time.Parse("2006-01-02 15:04:05", Time_start)
  131. if err != nil {
  132. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误"}
  133. c.ServeJSON()
  134. return
  135. }
  136. T_year, T_month = date.Format("2006"), date.Format("01")
  137. }
  138. Account.Read_Company_All_Maps()
  139. if T_history == 1 {
  140. r_jsons.Data, r_jsons.Num = Warning.Read_Company_Warning_Backups(T_pids, T_year, T_month, tpList, T_name, T_handle, Time_start, Time_end, page, page_z)
  141. } else {
  142. // 获取最新
  143. r_jsons.Data, r_jsons.Num = Warning.Read_Company_Warning_List(T_pids, tpList, T_name, T_handle, Time_start, Time_end, page, page_z)
  144. }
  145. r_jsons.Page = page
  146. r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
  147. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  148. c.ServeJSON()
  149. return
  150. }
  151. // 查询告警
  152. func (c *DeviceController) DeviceWarning_Get() {
  153. id, _ := c.GetInt("T_id")
  154. T_history, _ := c.GetInt("T_history")
  155. T := Warning.Read_Warning_ById(int64(id))
  156. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Warning.WarningToWarning_R(T_history, T)}
  157. c.ServeJSON()
  158. return
  159. }
  160. // 编辑告警(处理告警)
  161. func (c *DeviceController) DeviceWarning_Post() {
  162. id, _ := c.GetInt("T_id")
  163. T_Text := c.GetString("T_Text")
  164. T_time := c.GetString("T_time")
  165. T_history, _ := c.GetInt("T_history")
  166. var T_year, T_month string
  167. var warning Warning.Warning
  168. Wtab := "warning"
  169. if T_history == 1 {
  170. date, err := time.Parse("2006-01-02 15:04:05", T_time)
  171. if err != nil {
  172. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误"}
  173. c.ServeJSON()
  174. return
  175. }
  176. T_year, T_month = date.Format("2006"), date.Format("01")
  177. Wtab += "_" + T_year + "_" + T_month
  178. warning, err = Warning.Read_Warning_ById_Backups(id, T_year, T_month)
  179. if err != nil {
  180. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  181. c.ServeJSON()
  182. return
  183. }
  184. warning.T_Text = T_Text
  185. warning.T_State = 2
  186. if is := Warning.Update_Warning_Backups(warning, T_year, T_month); !is {
  187. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  188. c.ServeJSON()
  189. return
  190. }
  191. } else {
  192. warning = Warning.Read_Warning_ById(int64(id))
  193. if warning.Id == 0 {
  194. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  195. c.ServeJSON()
  196. return
  197. }
  198. warning.T_Text = T_Text
  199. warning.T_State = 2
  200. if is := Warning.Update_Warning(warning, "T_Text", "T_State"); !is {
  201. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  202. c.ServeJSON()
  203. return
  204. }
  205. }
  206. System.Add_UserLogs(c.Admin_r.T_uuid, "设备管理", "报警处理操作", Wtab+":"+strconv.Itoa(id)+"->"+T_Text)
  207. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  208. c.ServeJSON()
  209. return
  210. }
  211. // 删除告警
  212. func (c *DeviceController) DeviceWarning_Del() {
  213. id, _ := c.GetInt("T_id")
  214. T_time := c.GetString("T_time")
  215. T_history, _ := c.GetInt("T_history")
  216. var T_year, T_month string
  217. var warning Warning.Warning
  218. Wtab := "warning"
  219. if T_history == 1 {
  220. date, err := time.Parse("2006-01-02 15:04:05", T_time)
  221. if err != nil {
  222. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误"}
  223. c.ServeJSON()
  224. return
  225. }
  226. T_year, T_month = date.Format("2006"), date.Format("01")
  227. Wtab += "_" + T_year + "_" + T_month
  228. warning, err = Warning.Read_Warning_ById_Backups(id, T_year, T_month)
  229. if err != nil {
  230. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  231. c.ServeJSON()
  232. return
  233. }
  234. warning.T_State = 0
  235. if is := Warning.Update_Warning_Backups(warning, T_year, T_month); !is {
  236. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  237. c.ServeJSON()
  238. return
  239. }
  240. } else {
  241. warning = Warning.Read_Warning_ById(int64(id))
  242. if warning.Id == 0 {
  243. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  244. c.ServeJSON()
  245. return
  246. }
  247. warning.T_State = 0
  248. if is := Warning.Update_Warning(warning, "T_Text", "T_State"); !is {
  249. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  250. c.ServeJSON()
  251. return
  252. }
  253. }
  254. System.Add_UserLogs(c.Admin_r.T_uuid, "设备管理", "报警删除操作", Wtab+":"+strconv.Itoa(id))
  255. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  256. c.ServeJSON()
  257. return
  258. }
  259. // 导出告警
  260. func (c *DeviceController) DeviceWarning_Data_Excel() {
  261. T_name := c.GetString("T_name")
  262. T_tp := c.GetString("T_tp")
  263. Time_start := c.GetString("Time_start")
  264. Time_end := c.GetString("Time_end")
  265. T_handle, _ := c.GetInt("T_handle")
  266. T_history, _ := c.GetInt("T_history")
  267. var tpList []string
  268. if len(T_tp) > 0 {
  269. tpList = lib.SplitStringIds(T_tp, "T")
  270. } else {
  271. power, _ := Account.Read_Power_ById(c.Admin_r.T_power)
  272. tpList = lib.SplitStringIds(power.T_warning, "W")
  273. }
  274. var T_year, T_month string
  275. if T_history == 1 {
  276. date, err := time.Parse("2006-01-02 15:04:05", Time_start)
  277. if err != nil {
  278. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误"}
  279. c.ServeJSON()
  280. return
  281. }
  282. T_year, T_month = date.Format("2006"), date.Format("01")
  283. }
  284. bindSN, err := Account.Read_UserDevice_List(*c.Admin_r)
  285. if err != nil {
  286. c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询失败!"}
  287. c.ServeJSON()
  288. return
  289. }
  290. var Device_data []Warning.Warning_R
  291. if T_history == 1 {
  292. // 获取备份
  293. Device_data, _ = Warning.Read_Warning_Backups(c.T_pid, bindSN, T_year, T_month, tpList, T_name, T_handle, Time_start, Time_end, 0, 9999)
  294. } else {
  295. // 获取最新
  296. Device_data, _ = Warning.Read_Warning_List(c.T_pid, bindSN, tpList, T_name, T_handle, Time_start, Time_end, 0, 9999)
  297. }
  298. f := excelize.NewFile() // 设置单元格的值
  299. // 这里设置表头ÒÒ
  300. f.SetCellValue("Sheet1", "A1", "报警类型")
  301. f.SetCellValue("Sheet1", "B1", "Sn")
  302. f.SetCellValue("Sheet1", "C1", "设备名称")
  303. f.SetCellValue("Sheet1", "D1", "传感器")
  304. f.SetCellValue("Sheet1", "E1", "报警内容")
  305. f.SetCellValue("Sheet1", "F1", "记录时间")
  306. f.SetCellValue("Sheet1", "G1", "处理")
  307. f.SetCellValue("Sheet1", "H1", "处理时间")
  308. // 设置列宽
  309. f.SetColWidth("Sheet1", "A", "A", 20)
  310. f.SetColWidth("Sheet1", "B", "B", 25)
  311. f.SetColWidth("Sheet1", "C", "C", 30)
  312. f.SetColWidth("Sheet1", "D", "D", 30)
  313. f.SetColWidth("Sheet1", "G", "E", 30)
  314. f.SetColWidth("Sheet1", "H", "F", 15)
  315. f.SetColWidth("Sheet1", "I", "G", 30)
  316. f.SetColWidth("Sheet1", "J", "H", 15)
  317. line := 1
  318. // 循环写入数据
  319. for _, v := range Device_data {
  320. line++
  321. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), Warning.Read_WarningType_Get(v.T_tp))
  322. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), fmt.Sprintf("%s[%d]", v.T_sn, v.T_id))
  323. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_D_name)
  324. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_DS_name)
  325. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.T_Remark)
  326. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), v.T_Ut)
  327. f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_Text)
  328. f.SetCellValue("Sheet1", fmt.Sprintf("H%d", line), v.CreateTime)
  329. }
  330. timeStr := time.Now().Format("20060102150405")
  331. // 保存文件
  332. if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
  333. fmt.Println(err)
  334. }
  335. url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx")
  336. if !is {
  337. c.Data["json"] = lib.JSONS{Code: 202, Msg: "oss!"}
  338. c.ServeJSON()
  339. return
  340. }
  341. //删除文件
  342. err = os.Remove("ofile/" + timeStr + ".xlsx")
  343. if err != nil {
  344. fmt.Println(err)
  345. }
  346. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
  347. c.ServeJSON()
  348. return
  349. }
  350. // 公司管理 - 导出告警
  351. func (c *DeviceController) CompanyWarning_Data_Excel() {
  352. T_name := c.GetString("T_name")
  353. T_tp := c.GetString("T_tp")
  354. Time_start := c.GetString("Time_start")
  355. Time_end := c.GetString("Time_end")
  356. T_handle, _ := c.GetInt("T_handle")
  357. T_history, _ := c.GetInt("T_history")
  358. var tpList []string
  359. if len(T_tp) > 0 {
  360. tpList = lib.SplitStringIds(T_tp, "T")
  361. } else {
  362. power, _ := Account.Read_Power_ById(c.Admin_r.T_power)
  363. if power.T_warning != "*" {
  364. tpList = lib.SplitStringIds(power.T_warning, "W")
  365. }
  366. }
  367. Account.Read_Company_All_Maps()
  368. Company_r, err := Account.Read_Company_ById(c.T_pid)
  369. if err != nil {
  370. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id Err!"}
  371. c.ServeJSON()
  372. return
  373. }
  374. T_pids := Account.ReadCompanyIds_T_path(Company_r.T_path)
  375. var T_year, T_month string
  376. if T_history == 1 {
  377. date, err := time.Parse("2006-01-02 15:04:05", Time_start)
  378. if err != nil {
  379. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误"}
  380. c.ServeJSON()
  381. return
  382. }
  383. T_year, T_month = date.Format("2006"), date.Format("01")
  384. }
  385. var Device_data []Warning.CompanyWarning_R
  386. if T_history == 1 {
  387. // 获取备份
  388. Device_data, _ = Warning.Read_Company_Warning_Backups(T_pids, T_year, T_month, tpList, T_name, T_handle, Time_start, Time_end, 0, 9999)
  389. } else {
  390. // 获取最新
  391. Device_data, _ = Warning.Read_Company_Warning_List(T_pids, tpList, T_name, T_handle, Time_start, Time_end, 0, 9999)
  392. }
  393. f := excelize.NewFile() // 设置单元格的值
  394. // 这里设置表头
  395. f.SetCellValue("Sheet1", "A1", "报警类型")
  396. f.SetCellValue("Sheet1", "A1", "公司名称")
  397. f.SetCellValue("Sheet1", "B1", "Sn")
  398. f.SetCellValue("Sheet1", "C1", "设备名称")
  399. f.SetCellValue("Sheet1", "D1", "传感器")
  400. f.SetCellValue("Sheet1", "E1", "报警内容")
  401. f.SetCellValue("Sheet1", "F1", "记录时间")
  402. f.SetCellValue("Sheet1", "G1", "处理")
  403. f.SetCellValue("Sheet1", "H1", "处理时间")
  404. // 设置列宽
  405. f.SetColWidth("Sheet1", "A", "A", 20)
  406. f.SetColWidth("Sheet1", "B", "B", 40)
  407. f.SetColWidth("Sheet1", "C", "C", 25)
  408. f.SetColWidth("Sheet1", "D", "D", 30)
  409. f.SetColWidth("Sheet1", "E", "E", 30)
  410. f.SetColWidth("Sheet1", "F", "F", 30)
  411. f.SetColWidth("Sheet1", "J", "J", 15)
  412. f.SetColWidth("Sheet1", "H", "H", 30)
  413. f.SetColWidth("Sheet1", "I", "I", 15)
  414. line := 1
  415. // 循环写入数据
  416. for _, v := range Device_data {
  417. line++
  418. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), Warning.Read_WarningType_Get(v.T_tp))
  419. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), fmt.Sprintf("%s", v.T_pid_name))
  420. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), fmt.Sprintf("%s[%d]", v.T_sn, v.T_id))
  421. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_D_name)
  422. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.T_DS_name)
  423. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), v.T_Remark)
  424. f.SetCellValue("Sheet1", fmt.Sprintf("J%d", line), v.T_Ut)
  425. f.SetCellValue("Sheet1", fmt.Sprintf("H%d", line), v.T_Text)
  426. f.SetCellValue("Sheet1", fmt.Sprintf("I%d", line), v.CreateTime)
  427. }
  428. timeStr := time.Now().Format("20060102150405")
  429. // 保存文件
  430. if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
  431. fmt.Println(err)
  432. }
  433. url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx")
  434. if !is {
  435. c.Data["json"] = lib.JSONS{Code: 202, Msg: "oss!"}
  436. c.ServeJSON()
  437. return
  438. }
  439. //删除文件
  440. err = os.Remove("ofile/" + timeStr + ".xlsx")
  441. if err != nil {
  442. fmt.Println(err)
  443. }
  444. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
  445. c.ServeJSON()
  446. return
  447. }
  448. // 告警提示列表
  449. func (c *DeviceController) DeviceWarningList_T_Tips() {
  450. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Warning.Read_WarningType_All_T_Notice_mechanism()}
  451. c.ServeJSON()
  452. return
  453. }
  454. // 告警类型列表
  455. func (c *DeviceController) WarningType_List_All() {
  456. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Warning.Read_WarningType_All()}
  457. c.ServeJSON()
  458. return
  459. }
  460. // 告警类型列表 - 权限关联列表
  461. func (c *DeviceController) WarningType_Power_List_All() {
  462. power, err := Account.Read_Power_ById(c.Admin_r.T_power)
  463. if err != nil {
  464. c.Data["json"] = lib.JSONS{Code: 200, Msg: "获取菜单失败"}
  465. c.ServeJSON()
  466. return
  467. }
  468. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Warning.Read_WarningType_Power_All(power.T_warning)}
  469. c.ServeJSON()
  470. return
  471. }
  472. // 通过传感器类型获取报警列表
  473. func (c *DeviceController) Read_Warning_List_By_DS_T_type() {
  474. var r_jsons lib.R_JSONS
  475. page, _ := c.GetInt("page")
  476. if page < 1 {
  477. page = 1
  478. }
  479. page_z, _ := c.GetInt("page_z")
  480. if page_z < 1 {
  481. page_z = conf.Page_size
  482. }
  483. T_type, _ := c.GetInt("T_type")
  484. T_name := c.GetString("T_name")
  485. bindSN, err := Account.Read_UserDevice_List(*c.Admin_r)
  486. if err != nil {
  487. c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询失败!"}
  488. c.ServeJSON()
  489. return
  490. }
  491. r_jsons.Data, r_jsons.Num = Warning.Read_Warning_List_By_DS_T_type(c.T_pid, bindSN, T_type, T_name, page, page_z)
  492. r_jsons.Page = page
  493. r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
  494. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  495. c.ServeJSON()
  496. return
  497. }
  498. func (c *DeviceController) Read_WarningSend_List() {
  499. var r_jsons lib.R_JSONS
  500. page, _ := c.GetInt("page")
  501. if page < 1 {
  502. page = 1
  503. }
  504. page_z, _ := c.GetInt("page_z")
  505. if page_z < 1 {
  506. page_z = conf.Page_size
  507. }
  508. T_ntype, _ := c.GetInt("T_ntype")
  509. r_jsons.Data, r_jsons.Num = Warning.Read_WarningSand_List(c.T_pid, T_ntype, page, page_z)
  510. r_jsons.Page = page
  511. r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
  512. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  513. c.ServeJSON()
  514. return
  515. }
  516. func (c *DeviceController) Read_WarningRate_List() {
  517. page, _ := c.GetInt("page")
  518. if page < 1 {
  519. page = 1
  520. }
  521. page_z, _ := c.GetInt("page_z")
  522. if page_z < 1 {
  523. page_z = conf.Page_size
  524. }
  525. T_uuid := c.GetString("T_uuid")
  526. T_year, _ := c.GetInt("T_year")
  527. T_month, _ := c.GetInt("T_month")
  528. var startTime, endTime string
  529. now := time.Now()
  530. var month time.Month
  531. // 默认本月
  532. if T_year == 0 {
  533. T_year = now.Year()
  534. }
  535. if T_month == 0 {
  536. month = now.Month()
  537. } else {
  538. month = time.Month(T_month)
  539. }
  540. T_type := Warning.WarningRateDay
  541. if T_month == 0 {
  542. T_type = Warning.WarningRateMonth
  543. }
  544. if T_type == Warning.WarningRateDay {
  545. startTime = time.Date(T_year, month, 1, 0, 0, 0, 0, time.Local).Format("2006-01-02")
  546. endTime = time.Date(T_year, month+1, 0, 0, 0, 0, 0, time.Local).Format("2006-01-02")
  547. }
  548. // 默认本年
  549. if T_type == Warning.WarningRateMonth {
  550. startTime = time.Date(T_year, 1, 1, 0, 0, 0, 0, time.Local).Format("2006-01")
  551. endTime = time.Date(T_year, 12, 31, 0, 0, 0, 0, time.Local).Format("2006-01")
  552. }
  553. if len(T_uuid) == 0 {
  554. T_uuid = c.Admin_r.T_uuid
  555. }
  556. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Warning.Read_WarningRate_List(T_uuid, T_type, startTime, endTime)}
  557. c.ServeJSON()
  558. return
  559. }
  560. func (c *DeviceController) Read_WarningHandle_List() {
  561. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Warning.Read_WarningHandle_List()}
  562. c.ServeJSON()
  563. return
  564. }
  565. func Cron_WarningRate() {
  566. //创建一个定时任务对象
  567. c := cron.New(cron.WithSeconds())
  568. //给对象增加定时任务
  569. // @daily 每日运行一次
  570. //c.AddFunc("0 */1 * * * ?", Cron_WarningRateDay_Add)
  571. //c.AddFunc("0 */1 * * * ?", Cron_WarningRateMonth_Add)
  572. c.AddFunc("@daily", Cron_WarningRateDay_Add)
  573. c.AddFunc("@monthly", Cron_WarningRateMonth_Add)
  574. //启动定时任务
  575. c.Start()
  576. defer c.Stop()
  577. //查询语句,阻塞,让main函数不退出,保持程序运行
  578. select {}
  579. }
  580. // 保存每天的设备报警率
  581. func Cron_WarningRateDay_Add() {
  582. T_date := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  583. logs.Info("开始统计" + T_date + "设备报警率")
  584. // 获取管理员用户列表
  585. adminList := Account.Read_Admin_List_All()
  586. // 获取排除的pid及其子id
  587. //Exclude_Pids := Get_Exclude_Pids()
  588. // 获取内部用户关联的pid
  589. for _, admin := range adminList {
  590. // 内部用户已绑定公司,* 绑定所有公司
  591. if len(admin.T_pids) == 0 || admin.T_pids == "*" {
  592. continue
  593. }
  594. // 获取排除后的pid
  595. T_pids := lib.SplitStringToIntIds(admin.T_pids, "P")
  596. if len(T_pids) == 0 {
  597. continue
  598. }
  599. pids := Account.ReadCompanyWarningIds_T_pids(T_pids)
  600. if len(pids) == 0 {
  601. continue
  602. }
  603. // 获取探头数量
  604. dsCnt := Device.Read_DeviceSensorCount_ByT_pids(pids)
  605. // 获取当天报警数量
  606. warningCount := Warning.Read_WarningCount_byDay(pids)
  607. T_rate, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(warningCount)/float64(dsCnt)), 64) // 保留2位小数
  608. // 保存设备报警率
  609. warningRate := Warning.WarningRate{
  610. T_uuid: admin.T_uuid,
  611. T_date: T_date,
  612. T_type: Warning.WarningRateDay,
  613. T_device_num: dsCnt,
  614. T_warning_num: warningCount,
  615. T_rate: float32(T_rate),
  616. }
  617. Warning.Add_WarningRate(warningRate)
  618. }
  619. }
  620. // 保存每月的设备报警率
  621. func Cron_WarningRateMonth_Add() {
  622. now := time.Now()
  623. // fixme 测试
  624. //now := time.Now().AddDate(0, 1, 0)
  625. T_date := now.AddDate(0, -1, 0).Format("2006-01")
  626. firstOfMonth := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, time.Local)
  627. startTime := firstOfMonth.AddDate(0, -1, 0).Format("2006-01-02") // 上月第一天
  628. endTime := firstOfMonth.AddDate(0, 0, -1).Format("2006-01-02") // 上月最后一天
  629. logs.Info("开始统计" + T_date + "设备报警率")
  630. logs.Info("开始时间" + startTime)
  631. logs.Info("结束时间" + endTime)
  632. rateAvgList := Warning.Read_WarningRateAvg_Month(startTime, endTime)
  633. // 获取内部用户关联的pid
  634. for _, rate := range rateAvgList {
  635. T_rate, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(rate.T_warning_num)/float64(rate.T_device_num)), 64) // 保留2位小数
  636. // 保存设备报警率
  637. warningRate := Warning.WarningRate{
  638. T_uuid: rate.T_uuid,
  639. T_date: T_date,
  640. T_type: Warning.WarningRateMonth,
  641. T_device_num: rate.T_device_num,
  642. T_warning_num: rate.T_warning_num,
  643. T_rate: float32(T_rate),
  644. }
  645. Warning.Add_WarningRate(warningRate)
  646. }
  647. }
  648. // 获取排除的pids
  649. func Get_Exclude_Pids() map[int]struct{} {
  650. ColdExcludePidList := lib.SplitStringToIntIds(conf.WarningRateExcludePid, ",")
  651. // 获取排除的pid
  652. ExcludeList := Account.ReadCompanyIds_T_pids(ColdExcludePidList)
  653. ExcludeListMap := make(map[int]struct{})
  654. for _, v := range ExcludeList {
  655. ExcludeListMap[v] = struct{}{}
  656. }
  657. return ExcludeListMap
  658. }
  659. // 获取用户排除后的pids
  660. func Get_AfterExclude_Pids(excludePids map[int]struct{}, adminPids string) []int {
  661. var list []int
  662. T_pids := lib.SplitStringToIntIds(adminPids, "P")
  663. userPids := Account.ReadCompanyIds_T_pids(T_pids)
  664. if len(T_pids) == 0 {
  665. return userPids
  666. }
  667. for _, v := range userPids {
  668. if _, ok := excludePids[v]; ok {
  669. continue
  670. }
  671. list = append(list, v)
  672. }
  673. return list
  674. }