Warning.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821
  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. date := warning.T_Ut
  219. T_year, T_month = date.Format("2006"), date.Format("01")
  220. Wtab += "_" + T_year + "_" + T_month
  221. warningBackups, err := Warning.Read_Warning_ById_Backups(id, T_year, T_month)
  222. if err != nil && err.Error() != "<QuerySeter> no row found" {
  223. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  224. c.ServeJSON()
  225. return
  226. }
  227. if warningBackups.Id > 0 {
  228. warningBackups.T_Text = T_Text
  229. warningBackups.T_State = 2
  230. if is := Warning.Update_Warning_Backups(warningBackups, T_year, T_month); !is {
  231. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  232. c.ServeJSON()
  233. return
  234. }
  235. }
  236. }
  237. // 删除报警列表统计的缓存
  238. Warning.Redis_WarningCount_DelK(c.T_pid)
  239. Warning.Redis_WarningCount_DelK(c.Admin_r.Id)
  240. System.Add_UserLogs(c.Admin_r.T_uuid, "设备管理", "报警处理操作", Wtab+":"+strconv.Itoa(id)+"->"+T_Text)
  241. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  242. c.ServeJSON()
  243. return
  244. }
  245. // 删除告警
  246. func (c *DeviceController) DeviceWarning_Del() {
  247. id, _ := c.GetInt("T_id")
  248. T_time := c.GetString("T_time")
  249. T_history, _ := c.GetInt("T_history")
  250. var T_year, T_month string
  251. var warning Warning.Warning
  252. Wtab := "warning"
  253. if T_history == 1 {
  254. date, err := time.Parse("2006-01-02 15:04:05", T_time)
  255. if err != nil {
  256. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误"}
  257. c.ServeJSON()
  258. return
  259. }
  260. T_year, T_month = date.Format("2006"), date.Format("01")
  261. Wtab += "_" + T_year + "_" + T_month
  262. warning, err = Warning.Read_Warning_ById_Backups(id, T_year, T_month)
  263. if err != nil {
  264. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  265. c.ServeJSON()
  266. return
  267. }
  268. warning.T_State = 0
  269. if is := Warning.Update_Warning_Backups(warning, T_year, T_month); !is {
  270. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  271. c.ServeJSON()
  272. return
  273. }
  274. } else {
  275. warning = Warning.Read_Warning_ById(int64(id))
  276. if warning.Id == 0 {
  277. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  278. c.ServeJSON()
  279. return
  280. }
  281. warning.T_State = 0
  282. if is := Warning.Update_Warning(warning, "T_Text", "T_State"); !is {
  283. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  284. c.ServeJSON()
  285. return
  286. }
  287. }
  288. // 删除报警列表统计的缓存
  289. Warning.Redis_WarningCount_DelK(c.T_pid)
  290. Warning.Redis_WarningCount_DelK(c.Admin_r.Id)
  291. System.Add_UserLogs(c.Admin_r.T_uuid, "设备管理", "报警删除操作", Wtab+":"+strconv.Itoa(id))
  292. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  293. c.ServeJSON()
  294. return
  295. }
  296. // 导出告警
  297. func (c *DeviceController) DeviceWarning_Data_Excel() {
  298. T_name := c.GetString("T_name")
  299. T_tp := c.GetString("T_tp")
  300. Time_start := c.GetString("Time_start")
  301. Time_end := c.GetString("Time_end")
  302. T_handle, _ := c.GetInt("T_handle")
  303. T_admin, _ := c.GetInt("T_admin")
  304. T_history, _ := c.GetInt("T_history")
  305. tpCount := Warning.Read_WarningType_Count()
  306. var tpList []string
  307. if len(T_tp) > 0 {
  308. tpList = lib.SplitStringIds(T_tp, "T")
  309. if len(tpList) == int(tpCount) {
  310. // 类型全选,替换为空,不进行查询筛选(查询全部)
  311. tpList = []string{}
  312. }
  313. } else {
  314. power, _ := Account.Read_Power_ById(c.Admin_r.T_power)
  315. if power.T_warning != "*" {
  316. tpList = lib.SplitStringIds(power.T_warning, "W")
  317. }
  318. }
  319. 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)
  320. bindSN, err := Account.Read_UserDevice_List(*c.Admin_r)
  321. if err != nil {
  322. c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询失败!"}
  323. c.ServeJSON()
  324. return
  325. }
  326. var T_year, T_month string
  327. if T_history == 1 {
  328. date, err := time.Parse("2006-01-02 15:04:05", Time_start)
  329. if err != nil {
  330. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误"}
  331. c.ServeJSON()
  332. return
  333. }
  334. T_year, T_month = date.Format("2006"), date.Format("01")
  335. }
  336. var Device_data []Warning.Warning_R
  337. // 管理员界面
  338. if T_admin == 1 {
  339. if T_history == 1 {
  340. // 获取备份
  341. Device_data, _ = Warning.Read_Admin_Warning_Backups(*c.Admin_r, T_year, T_month, tpList, T_name, T_handle, Time_start, Time_end, 0, 9999, countRedisKey)
  342. } else {
  343. // 获取最新
  344. Device_data, _ = Warning.Read_Admin_Warning_List(*c.Admin_r, tpList, T_name, T_handle, Time_start, Time_end, 0, 9999, countRedisKey)
  345. }
  346. }
  347. if T_history == 1 {
  348. // 获取备份
  349. 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)
  350. } else {
  351. // 获取最新
  352. Device_data, _ = Warning.Read_Warning_List(c.T_pid, bindSN, tpList, T_name, T_handle, Time_start, Time_end, 0, 9999, countRedisKey)
  353. }
  354. f := excelize.NewFile() // 设置单元格的值
  355. // 这里设置表头ÒÒ
  356. f.SetCellValue("Sheet1", "A1", "报警类型")
  357. f.SetCellValue("Sheet1", "B1", "Sn")
  358. f.SetCellValue("Sheet1", "C1", "设备名称")
  359. f.SetCellValue("Sheet1", "D1", "传感器")
  360. f.SetCellValue("Sheet1", "E1", "报警内容")
  361. f.SetCellValue("Sheet1", "F1", "记录时间")
  362. f.SetCellValue("Sheet1", "G1", "处理")
  363. f.SetCellValue("Sheet1", "H1", "处理时间")
  364. // 设置列宽
  365. f.SetColWidth("Sheet1", "A", "A", 20)
  366. f.SetColWidth("Sheet1", "B", "B", 25)
  367. f.SetColWidth("Sheet1", "C", "C", 30)
  368. f.SetColWidth("Sheet1", "D", "D", 30)
  369. f.SetColWidth("Sheet1", "G", "E", 30)
  370. f.SetColWidth("Sheet1", "H", "F", 15)
  371. f.SetColWidth("Sheet1", "I", "G", 30)
  372. f.SetColWidth("Sheet1", "J", "H", 15)
  373. line := 1
  374. // 循环写入数据
  375. for _, v := range Device_data {
  376. line++
  377. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), Warning.Read_WarningType_Get(v.T_tp))
  378. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), fmt.Sprintf("%s[%d]", v.T_sn, v.T_id))
  379. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_D_name)
  380. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_DS_name)
  381. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.T_Remark)
  382. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), v.T_Ut)
  383. f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_Text)
  384. f.SetCellValue("Sheet1", fmt.Sprintf("H%d", line), v.CreateTime)
  385. }
  386. timeStr := time.Now().Format("20060102150405")
  387. // 保存文件
  388. if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
  389. fmt.Println(err)
  390. }
  391. url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx")
  392. if !is {
  393. c.Data["json"] = lib.JSONS{Code: 202, Msg: "oss!"}
  394. c.ServeJSON()
  395. return
  396. }
  397. //删除文件
  398. err = os.Remove("ofile/" + timeStr + ".xlsx")
  399. if err != nil {
  400. fmt.Println(err)
  401. }
  402. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
  403. c.ServeJSON()
  404. return
  405. }
  406. // 公司管理 - 导出告警
  407. func (c *DeviceController) CompanyWarning_Data_Excel() {
  408. T_name := c.GetString("T_name")
  409. T_tp := c.GetString("T_tp")
  410. Time_start := c.GetString("Time_start")
  411. Time_end := c.GetString("Time_end")
  412. T_handle, _ := c.GetInt("T_handle")
  413. T_history, _ := c.GetInt("T_history")
  414. tpCount := Warning.Read_WarningType_Count()
  415. var tpList []string
  416. if len(T_tp) > 0 {
  417. tpList = lib.SplitStringIds(T_tp, "T")
  418. if len(tpList) == int(tpCount) {
  419. // 类型全选,替换为空,不进行查询筛选(查询全部)
  420. tpList = []string{}
  421. }
  422. } else {
  423. power, _ := Account.Read_Power_ById(c.Admin_r.T_power)
  424. if power.T_warning != "*" {
  425. tpList = lib.SplitStringIds(power.T_warning, "W")
  426. }
  427. }
  428. 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)
  429. Account.Read_Company_All_Maps()
  430. Company_r, err := Account.Read_Company_ById(c.T_pid)
  431. if err != nil {
  432. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id Err!"}
  433. c.ServeJSON()
  434. return
  435. }
  436. T_pids := Account.ReadCompanyIds_T_path(Company_r.T_path)
  437. var T_year, T_month string
  438. if T_history == 1 {
  439. date, err := time.Parse("2006-01-02 15:04:05", Time_start)
  440. if err != nil {
  441. c.Data["json"] = lib.JSONS{Code: 202, Msg: "时间格式错误"}
  442. c.ServeJSON()
  443. return
  444. }
  445. T_year, T_month = date.Format("2006"), date.Format("01")
  446. }
  447. var Device_data []Warning.CompanyWarning_R
  448. if T_history == 1 {
  449. // 获取备份
  450. 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)
  451. } else {
  452. // 获取最新
  453. Device_data, _ = Warning.Read_Company_Warning_List(T_pids, tpList, T_name, T_handle, Time_start, Time_end, 0, 9999, c.T_pid, countRedisKey)
  454. }
  455. f := excelize.NewFile() // 设置单元格的值
  456. // 这里设置表头
  457. f.SetCellValue("Sheet1", "A1", "报警类型")
  458. f.SetCellValue("Sheet1", "A1", "公司名称")
  459. f.SetCellValue("Sheet1", "B1", "Sn")
  460. f.SetCellValue("Sheet1", "C1", "设备名称")
  461. f.SetCellValue("Sheet1", "D1", "传感器")
  462. f.SetCellValue("Sheet1", "E1", "报警内容")
  463. f.SetCellValue("Sheet1", "F1", "记录时间")
  464. f.SetCellValue("Sheet1", "G1", "处理")
  465. f.SetCellValue("Sheet1", "H1", "处理时间")
  466. // 设置列宽
  467. f.SetColWidth("Sheet1", "A", "A", 20)
  468. f.SetColWidth("Sheet1", "B", "B", 40)
  469. f.SetColWidth("Sheet1", "C", "C", 25)
  470. f.SetColWidth("Sheet1", "D", "D", 30)
  471. f.SetColWidth("Sheet1", "E", "E", 30)
  472. f.SetColWidth("Sheet1", "F", "F", 30)
  473. f.SetColWidth("Sheet1", "J", "J", 15)
  474. f.SetColWidth("Sheet1", "H", "H", 30)
  475. f.SetColWidth("Sheet1", "I", "I", 15)
  476. line := 1
  477. // 循环写入数据
  478. for _, v := range Device_data {
  479. line++
  480. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), Warning.Read_WarningType_Get(v.T_tp))
  481. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), fmt.Sprintf("%s", v.T_pid_name))
  482. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), fmt.Sprintf("%s[%d]", v.T_sn, v.T_id))
  483. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_D_name)
  484. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.T_DS_name)
  485. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), v.T_Remark)
  486. f.SetCellValue("Sheet1", fmt.Sprintf("J%d", line), v.T_Ut)
  487. f.SetCellValue("Sheet1", fmt.Sprintf("H%d", line), v.T_Text)
  488. f.SetCellValue("Sheet1", fmt.Sprintf("I%d", line), v.CreateTime)
  489. }
  490. timeStr := time.Now().Format("20060102150405")
  491. // 保存文件
  492. if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
  493. fmt.Println(err)
  494. }
  495. url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx")
  496. if !is {
  497. c.Data["json"] = lib.JSONS{Code: 202, Msg: "oss!"}
  498. c.ServeJSON()
  499. return
  500. }
  501. //删除文件
  502. err = os.Remove("ofile/" + timeStr + ".xlsx")
  503. if err != nil {
  504. fmt.Println(err)
  505. }
  506. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
  507. c.ServeJSON()
  508. return
  509. }
  510. // 告警提示列表
  511. func (c *DeviceController) DeviceWarningList_T_Tips() {
  512. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Warning.Read_WarningType_All_T_Notice_mechanism()}
  513. c.ServeJSON()
  514. return
  515. }
  516. // 告警类型列表
  517. func (c *DeviceController) WarningType_List_All() {
  518. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Warning.Read_WarningType_All()}
  519. c.ServeJSON()
  520. return
  521. }
  522. // 告警类型列表 - 权限关联列表
  523. func (c *DeviceController) WarningType_Power_List_All() {
  524. power, err := Account.Read_Power_ById(c.Admin_r.T_power)
  525. if err != nil {
  526. c.Data["json"] = lib.JSONS{Code: 200, Msg: "获取菜单失败"}
  527. c.ServeJSON()
  528. return
  529. }
  530. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Warning.Read_WarningType_Power_All(power.T_warning)}
  531. c.ServeJSON()
  532. return
  533. }
  534. // 通过传感器类型获取报警列表
  535. func (c *DeviceController) Read_Warning_List_By_DS_T_type() {
  536. var r_jsons lib.R_JSONS
  537. page, _ := c.GetInt("page")
  538. if page < 1 {
  539. page = 1
  540. }
  541. page_z, _ := c.GetInt("page_z")
  542. if page_z < 1 {
  543. page_z = conf.Page_size
  544. }
  545. T_type, _ := c.GetInt("T_type")
  546. T_name := c.GetString("T_name")
  547. bindSN, err := Account.Read_UserDevice_List(*c.Admin_r)
  548. if err != nil {
  549. c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询失败!"}
  550. c.ServeJSON()
  551. return
  552. }
  553. var T_pids []int
  554. if c.Admin_r.T_pid > 0 {
  555. // 查询公司
  556. Company_r, err := Account.Read_Company_ById(c.Admin_r.T_pid)
  557. if err != nil {
  558. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id Err!"}
  559. c.ServeJSON()
  560. return
  561. }
  562. // 查询公司下面所有子公司id
  563. T_pids = Account.ReadCompanyIds_T_path(Company_r.T_path)
  564. }
  565. countRedisKey := fmt.Sprintf("Company_Warning_Count_By_DS_T_type_%d_%s_%d_%d", c.T_pid, T_name, T_type, c.Admin_r.T_pid)
  566. r_jsons.Data, r_jsons.Num = Warning.Read_Warning_List_By_DS_T_type(c.Admin_r, c.T_pid, bindSN, T_pids, T_type, T_name, page, page_z, countRedisKey)
  567. r_jsons.Page = page
  568. r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
  569. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  570. c.ServeJSON()
  571. return
  572. }
  573. func (c *DeviceController) Read_WarningSend_List() {
  574. var r_jsons lib.R_JSONS
  575. page, _ := c.GetInt("page")
  576. if page < 1 {
  577. page = 1
  578. }
  579. page_z, _ := c.GetInt("page_z")
  580. if page_z < 1 {
  581. page_z = conf.Page_size
  582. }
  583. T_ntype, _ := c.GetInt("T_ntype")
  584. r_jsons.Data, r_jsons.Num = Warning.Read_WarningSand_List(c.T_pid, T_ntype, page, page_z)
  585. r_jsons.Page = page
  586. r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
  587. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  588. c.ServeJSON()
  589. return
  590. }
  591. func (c *DeviceController) Read_WarningRate_List() {
  592. page, _ := c.GetInt("page")
  593. if page < 1 {
  594. page = 1
  595. }
  596. page_z, _ := c.GetInt("page_z")
  597. if page_z < 1 {
  598. page_z = conf.Page_size
  599. }
  600. T_uuid := c.GetString("T_uuid")
  601. T_year, _ := c.GetInt("T_year")
  602. T_month, _ := c.GetInt("T_month")
  603. var startTime, endTime string
  604. now := time.Now()
  605. var month time.Month
  606. // 默认本月
  607. if T_year == 0 {
  608. T_year = now.Year()
  609. }
  610. if T_month == 0 {
  611. month = now.Month()
  612. } else {
  613. month = time.Month(T_month)
  614. }
  615. T_type := Warning.WarningRateDay
  616. if T_month == 0 {
  617. T_type = Warning.WarningRateMonth
  618. }
  619. if T_type == Warning.WarningRateDay {
  620. startTime = time.Date(T_year, month, 1, 0, 0, 0, 0, time.Local).Format("2006-01-02")
  621. endTime = time.Date(T_year, month+1, 0, 0, 0, 0, 0, time.Local).Format("2006-01-02")
  622. }
  623. // 默认本年
  624. if T_type == Warning.WarningRateMonth {
  625. startTime = time.Date(T_year, 1, 1, 0, 0, 0, 0, time.Local).Format("2006-01")
  626. endTime = time.Date(T_year, 12, 31, 0, 0, 0, 0, time.Local).Format("2006-01")
  627. }
  628. if len(T_uuid) == 0 {
  629. T_uuid = c.Admin_r.T_uuid
  630. }
  631. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Warning.Read_WarningRate_List(T_uuid, T_type, startTime, endTime)}
  632. c.ServeJSON()
  633. return
  634. }
  635. func (c *DeviceController) Read_WarningHandle_List() {
  636. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Warning.Read_WarningHandle_List()}
  637. c.ServeJSON()
  638. return
  639. }
  640. func Cron_WarningRate() {
  641. //创建一个定时任务对象
  642. c := cron.New(cron.WithSeconds())
  643. //给对象增加定时任务
  644. // @daily 每日运行一次
  645. //c.AddFunc("0 */1 * * * ?", Cron_WarningRateDay_Add)
  646. //c.AddFunc("0 */1 * * * ?", Cron_WarningRateMonth_Add)
  647. c.AddFunc("@daily", Cron_WarningRateDay_Add)
  648. c.AddFunc("@monthly", Cron_WarningRateMonth_Add)
  649. //启动定时任务
  650. c.Start()
  651. defer c.Stop()
  652. //查询语句,阻塞,让main函数不退出,保持程序运行
  653. select {}
  654. }
  655. // 保存每天的设备报警率
  656. func Cron_WarningRateDay_Add() {
  657. T_date := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  658. logs.Info("开始统计" + T_date + "设备报警率")
  659. // 获取管理员用户列表
  660. adminList := Account.Read_Admin_List_All()
  661. // 获取内部用户关联的pid
  662. for _, admin := range adminList {
  663. // 内部用户已绑定公司,* 绑定所有公司
  664. if len(admin.T_pids) == 0 || admin.T_pids == "*" {
  665. continue
  666. }
  667. // 获取排除后的pid
  668. T_pids := lib.SplitStringToIntIds(admin.T_pids, "P")
  669. if len(T_pids) == 0 {
  670. continue
  671. }
  672. pids := Account.ReadCompanyWarningIds_T_pids(T_pids)
  673. if len(pids) == 0 {
  674. continue
  675. }
  676. // 获取探头数量
  677. dsCnt := Device.Read_DeviceSensorCount_ByT_pids(pids)
  678. // 获取当天报警数量
  679. warningCount := Warning.Read_WarningCount_byDay(pids)
  680. T_rate, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(warningCount)/float64(dsCnt)), 64) // 保留2位小数
  681. // 保存设备报警率
  682. warningRate := Warning.WarningRate{
  683. T_uuid: admin.T_uuid,
  684. T_date: T_date,
  685. T_type: Warning.WarningRateDay,
  686. T_device_num: dsCnt,
  687. T_warning_num: warningCount,
  688. T_rate: float32(T_rate),
  689. }
  690. Warning.Add_WarningRate(warningRate)
  691. }
  692. }
  693. // 保存每月的设备报警率
  694. func Cron_WarningRateMonth_Add() {
  695. now := time.Now()
  696. // fixme 测试
  697. //now := time.Now().AddDate(0, 1, 0)
  698. T_date := now.AddDate(0, -1, 0).Format("2006-01")
  699. firstOfMonth := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, time.Local)
  700. startTime := firstOfMonth.AddDate(0, -1, 0).Format("2006-01-02") // 上月第一天
  701. endTime := firstOfMonth.AddDate(0, 0, -1).Format("2006-01-02") // 上月最后一天
  702. logs.Info("开始统计" + T_date + "设备报警率")
  703. logs.Info("开始时间" + startTime)
  704. logs.Info("结束时间" + endTime)
  705. rateAvgList := Warning.Read_WarningRateAvg_Month(startTime, endTime)
  706. // 获取内部用户关联的pid
  707. for _, rate := range rateAvgList {
  708. T_rate, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(rate.T_warning_num)/float64(rate.T_device_num)), 64) // 保留2位小数
  709. // 保存设备报警率
  710. warningRate := Warning.WarningRate{
  711. T_uuid: rate.T_uuid,
  712. T_date: T_date,
  713. T_type: Warning.WarningRateMonth,
  714. T_device_num: rate.T_device_num,
  715. T_warning_num: rate.T_warning_num,
  716. T_rate: float32(T_rate),
  717. }
  718. Warning.Add_WarningRate(warningRate)
  719. }
  720. }