query.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package yb_activity
  2. import (
  3. "errors"
  4. "hongze/hongze_yb/global"
  5. "hongze/hongze_yb/utils"
  6. "time"
  7. )
  8. type ActivityItem struct {
  9. ActivityID int `json:"activityId"`
  10. ActivityName string `json:"activityName"` // 活动名称
  11. ActivityTypeName string `json:"activityTypeName"` // 活动类型名称
  12. StartTime time.Time `json:"startTime"` // 活动开始时间
  13. EndTime time.Time `json:"endTime"` // 活动结束时间
  14. WeekString string `json:"weekString"` // 周几
  15. Speaker string `json:"speaker"` // 主讲人
  16. HasRemind int `json:"hasRemind"` // 是否已提醒
  17. HasPlayBack int `json:"hasPlayBack"` // 是否有回放
  18. RegisterState int `json:"registerState"` // 报名状态 0-取消报名 1-已报名
  19. City string `json:"city"` // 城市
  20. }
  21. type ActivityDetail struct {
  22. ActivityItem
  23. MainlandTel string `json:"mainlandTel"` // 大陆拨入
  24. HongKongTel string `json:"hongKongTel"` // 香港拨入
  25. TaiwanTel string `json:"taiwanTel"` // 台湾拨入
  26. AmericaTel string `json:"americaTel"` // 美国拨入
  27. SingaporeTel string `json:"singaporeTel"` // 新加坡拨入
  28. ParticipationCode string `json:"participationCode"` // 参会密码
  29. LinkParticipants string `json:"linkParticipants"` // 参会链接
  30. IsLimitPeople int8 `json:"isLimitPeople"` // 是否限制人数 1是,0否
  31. LimitPeopleNum int `json:"limitPeopleNum"` // 限制人数数量
  32. ReportLink string `json:"reportLink"` // 报告链接
  33. Address string `json:"address"` // 活动地址
  34. RegisteredNum int `json:"registeredNum"` // 已报名人数
  35. }
  36. // GetPageListByWhereMap 分页获取列表-关联录音、提醒和报名信息
  37. func GetPageListByWhereMap(where map[string]interface{}, page, limit int, order string, userId int) (activities []*ActivityItem, err error) {
  38. condition, values, buildErr := utils.WhereBuild(where)
  39. if buildErr != nil {
  40. err = errors.New("系统异常,生成查询语句失败")
  41. return
  42. }
  43. fields := []string{
  44. "a.activity_id", "a.activity_name", "a.activity_type_name", "a.start_time", "a.end_time", "a.speaker", "a.city",
  45. "b.activity_voice_id AS has_play_back", "c.id AS has_remind", "d.register_state",
  46. }
  47. queryOrder := "start_time asc"
  48. if order != "" {
  49. queryOrder = order
  50. }
  51. err = global.DEFAULT_MYSQL.Table("yb_activity AS a").
  52. Select(fields).
  53. Joins("LEFT JOIN yb_activity_voice AS b ON a.activity_id = b.activity_id").
  54. Joins("LEFT JOIN yb_activity_remind AS c ON a.activity_id = c.activity_id AND c.user_id = ?", userId).
  55. Joins("LEFT JOIN yb_activity_register AS d ON a.activity_id = d.activity_id AND d.user_id = ? AND d.register_state = ?", userId, 1).
  56. Where(condition, values...).
  57. Order(queryOrder).
  58. Group("activity_id").
  59. Limit(limit).Offset((page - 1) * limit).
  60. Scan(&activities).Error
  61. return
  62. }
  63. // GetOneById 根据主键获取活动
  64. func GetOneById(activityId int) (activity *YbActivity, err error) {
  65. err = global.DEFAULT_MYSQL.Where("activity_id = ?", activityId).First(&activity).Error
  66. return
  67. }
  68. // GetDetailByIdWithUserId 根据主键获取活动详情-userId关联信息
  69. func GetDetailByIdWithUserId(activityId, userId int) (detail *ActivityDetail, err error) {
  70. fields := []string{
  71. "a.activity_id", "a.activity_name", "a.activity_type_name", "a.start_time", "a.end_time", "a.speaker", "a.city",
  72. "a.mainland_tel", "a.hong_kong_tel", "a.taiwan_tel", "a.america_tel", "a.singapore_tel", "a.participation_code",
  73. "a.link_participants", "a.is_limit_people", "a.limit_people_num", "a.report_link", "a.address",
  74. "b.id AS has_remind", "c.register_state",
  75. }
  76. err = global.DEFAULT_MYSQL.Table("yb_activity AS a").
  77. Select(fields).
  78. Joins("LEFT JOIN yb_activity_remind AS b ON a.activity_id = b.activity_id AND b.user_id = ?", userId).
  79. Joins("LEFT JOIN yb_activity_register AS c ON a.activity_id = c.activity_id AND c.user_id = ? AND c.register_state = ?", userId, 1).
  80. Where("a.activity_id", activityId).
  81. Group("activity_id").
  82. Scan(&detail).Error
  83. return
  84. }