Warning.go 22 KB

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