event.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package app
  2. import (
  3. "fmt"
  4. "github.com/sirupsen/logrus"
  5. "lcfns/global"
  6. "lcfns/model/app"
  7. "lcfns/model/app/request"
  8. "lcfns/model/app/response"
  9. )
  10. var picService = PictureService{}
  11. type EventService struct {
  12. }
  13. func (EventService) List(req request.Event) (events []response.Event, total int64, err error) {
  14. //SELECT id,event_type,event_code,start_time,handle_time
  15. //FROM `event` WHERE mac_address IN (SELECT c.mac_address FROM gateway g JOIN camera c ON g.id = c.gid WHERE g.uid = 1);
  16. //查找用户所有摄像头的mac_address:
  17. //SELECT c.mac_address FROM gateway g JOIN camera c ON g.id = c.gid WHERE g.uid = ?
  18. var macs []string
  19. sub := global.Db.Select("c.mac_address").
  20. Table("gateway g JOIN camera c ON g.id = c.gid").
  21. Where("g.uid = ?", req.UId).
  22. Find(&macs)
  23. //查询事件
  24. db := global.Db.Select("e.id,e.event_type,e.event_code,e.start_time,e.handle_time,g.gateway_name").
  25. Table("event e JOIN camera c ON e.mac_address = c.mac_address JOIN gateway g ON c.gid = g.id")
  26. if req.EventType > 0 && req.EventType <= 4 { //todo 未生效
  27. db.Where("e.event_type = ?", eMap[req.EventType])
  28. }
  29. if req.IsHandled != nil && *req.IsHandled {
  30. db.Where("NOT ISNULL(e.handle_time)")
  31. }
  32. fmt.Println("-------------------------------req.CreatedAt", req.CreatedAt)
  33. if req.CreatedAt != "" {
  34. db.Where("e.start_time > ?", req.CreatedAt)
  35. }
  36. if req.EndAt != "" {
  37. db.Where("e.start_time < ?", req.EndAt)
  38. }
  39. if req.GatewayName != "" {
  40. db.Where("g.gateway_name LIKE ?", "%"+req.GatewayName+"%")
  41. }
  42. db.Count(&total)
  43. if req.Order != "" {
  44. if req.Order == "1" {
  45. db.Order("e.start_time DESC")
  46. } else {
  47. db.Order("e.start_time ASC")
  48. }
  49. }
  50. err = db.Where("e.mac_address IN (?)", sub).
  51. Offset((req.Page - 1) * req.PageSize).
  52. Limit(req.PageSize).
  53. Find(&events).Debug().Error
  54. if err != nil {
  55. logrus.Error(err)
  56. return nil, 0, err
  57. }
  58. for i, v := range events {
  59. events[i].EventType = sMap[v.EventType]
  60. }
  61. return events, total, err
  62. }
  63. func (EventService) Create(event app.Event) error {
  64. return global.Db.Omit("handle_time").Create(&event).Debug().Error
  65. }
  66. func (EventService) Save(event *app.Event, pic *app.Picture, picData *app.PictureData) {
  67. err := global.Db.Omit("handle_time").Create(event).Error
  68. if err != nil {
  69. logrus.Error("事件保存失败", err)
  70. return
  71. }
  72. pic.EventId = event.ID
  73. picService.SaveEventPicture(pic, picData)
  74. }
  75. // 事件类型
  76. var eMap = map[uint]string{
  77. 1: "shelteralarm",
  78. 2: "regionEntrance",
  79. 3: "fielddetection",
  80. 4: "linedetection",
  81. }
  82. var sMap = map[string]string{
  83. "shelteralarm": "遮盖报警",
  84. "regionEntrance": "进入区域",
  85. "fielddetection": "区域入侵",
  86. "linedetection": "越界侦测",
  87. }