activity.go 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. package activity
  2. import (
  3. "gorm.io/gorm"
  4. "hongze/hongze_yb/models/tables/company_product"
  5. "hongze/hongze_yb/models/tables/yb_activity"
  6. "hongze/hongze_yb/models/tables/yb_activity_permission"
  7. "hongze/hongze_yb/models/tables/yb_activity_register"
  8. "hongze/hongze_yb/models/tables/yb_activity_remind"
  9. "hongze/hongze_yb/models/tables/yb_activity_voice"
  10. "hongze/hongze_yb/services/company"
  11. "hongze/hongze_yb/services/user"
  12. "hongze/hongze_yb/utils"
  13. "log"
  14. "strings"
  15. "time"
  16. )
  17. // ActivityList 活动列表
  18. type ActivityList struct {
  19. yb_activity.ActivityItem // 活动信息
  20. VoiceList []*yb_activity_voice.YbActivityVoice // 音频列表
  21. }
  22. // PageList 活动分页列表
  23. func PageList(condition string, pars []interface{}, page, limit int, order string, userInfo user.UserInfo) (list []ActivityList, err error) {
  24. activities, err := yb_activity.GetPageListByWhere(condition, pars, page, limit, order, int(userInfo.UserID))
  25. if err != nil {
  26. log.Print(err.Error())
  27. return
  28. }
  29. if activities != nil {
  30. var activityIds []int
  31. for _, item := range activities {
  32. activityIds = append(activityIds, item.ActivityID)
  33. }
  34. // 录音
  35. voices, queryErr := yb_activity_voice.GetVoicesByActivityIds(activityIds)
  36. if queryErr != nil {
  37. log.Print(queryErr.Error())
  38. return
  39. }
  40. // 提醒
  41. reminds, queryErr := yb_activity_remind.GetRemindsByUserIdAndActivityIds(int(userInfo.UserID), activityIds)
  42. if queryErr != nil {
  43. log.Print(queryErr.Error())
  44. return
  45. }
  46. remindMap := make(map[int]int, 0)
  47. for _, remind := range reminds {
  48. remindMap[remind.ActivityId] = 1
  49. }
  50. // 报名
  51. registers, queryErr := yb_activity_register.GetRegistersByUserIdAndActivityIds(int(userInfo.UserID), activityIds)
  52. if queryErr != nil {
  53. log.Print(queryErr.Error())
  54. return
  55. }
  56. registerMap := make(map[int]int, 0)
  57. for _, register := range registers {
  58. if register.RegisterState == 1 {
  59. registerMap[register.ActivityId] = 1
  60. }
  61. }
  62. var temp ActivityList
  63. for _, activity := range activities {
  64. temp.ActivityItem = activity
  65. temp.WeekString = utils.StrDateTimeToWeek(activity.StartTime.Weekday().String())
  66. temp.ActivityState = getActivityStateByTime(activity.StartTime, activity.EndTime)
  67. // 音频列表
  68. var voiceMap []*yb_activity_voice.YbActivityVoice
  69. for _, voice := range voices {
  70. if temp.ActivityID == int(voice.ActivityID) {
  71. voiceMap = append(voiceMap, voice)
  72. temp.HasPlayBack = 1 // 有回放
  73. }
  74. }
  75. temp.VoiceList = voiceMap
  76. // 是否有提醒
  77. _, ok := remindMap[temp.ActivityID]
  78. if ok {
  79. temp.HasRemind = 1
  80. }
  81. // 是否已报名
  82. _, ok = registerMap[temp.ActivityID]
  83. if ok {
  84. temp.RegisterState = 1
  85. }
  86. list = append(list, temp)
  87. }
  88. }
  89. return
  90. }
  91. // getActivityStateByTime 根据时间生成活动枚举值
  92. func getActivityStateByTime(startTime, endTime time.Time) (state int) {
  93. nowTime := time.Now().Format(utils.FormatDateTime)
  94. timeNow, _ := time.ParseInLocation(utils.FormatDateTime, nowTime, time.Local)
  95. if timeNow.Before(endTime) && timeNow.After(startTime) {
  96. // 进行中
  97. state = 2
  98. } else if timeNow.After(endTime) {
  99. // 已结束
  100. state = 3
  101. } else if timeNow.Before(startTime) {
  102. // 未开始
  103. state = 1
  104. }
  105. return
  106. }
  107. // GetActivityDetail 活动详情
  108. func GetActivityDetail(activityId, userId int) (detail *yb_activity.ActivityDetail, err error) {
  109. detail, err = yb_activity.GetDetailById(activityId)
  110. if err != nil {
  111. if err == gorm.ErrRecordNotFound {
  112. return
  113. }
  114. }
  115. if detail == nil {
  116. return
  117. }
  118. registeredNum, err := yb_activity_register.CountRegistedNumByActivityId(activityId)
  119. if err != nil {
  120. log.Print(err.Error())
  121. return
  122. }
  123. detail.RegisteredNum = int(registeredNum)
  124. detail.WeekString = utils.StrDateTimeToWeek(detail.StartTime.Weekday().String())
  125. detail.ActivityState = getActivityStateByTime(detail.StartTime, detail.EndTime)
  126. _, remindErr := yb_activity_remind.RemindExist(userId, activityId)
  127. if remindErr != gorm.ErrRecordNotFound {
  128. detail.HasRemind = 1
  129. }
  130. _, registerErr := yb_activity_register.RegisterExist(userId, activityId)
  131. if registerErr != gorm.ErrRecordNotFound {
  132. detail.RegisterState = 1
  133. }
  134. return
  135. }
  136. // CheckActivityPermission 验证用户的活动参与权限
  137. func CheckActivityPermission(userInfo user.UserInfo, activityId int) (ok bool, permissionCheckInfo company.PermissionCheckInfo, err error) {
  138. companyId := userInfo.CompanyID
  139. activity, err := yb_activity.GetOneById(activityId)
  140. if err != nil {
  141. if err == gorm.ErrRecordNotFound {
  142. return
  143. }
  144. }
  145. if activity == nil {
  146. return
  147. }
  148. // 查询活动权限集合
  149. permissions, err := yb_activity_permission.GetPermissionsByActivityId(activityId)
  150. if err != nil {
  151. return
  152. }
  153. var permissionIds []int
  154. for _, item := range permissions {
  155. pid := int(item.PermissionID)
  156. permissionIds = append(permissionIds, pid)
  157. }
  158. ok, permissionCheckInfo, err = company.CheckPermissionByPermissionIdList2Ficc(companyId, int(userInfo.UserID), permissionIds)
  159. return
  160. }
  161. // GetUserAuthActivityIds 获取用户有权限参与的活动Ids
  162. func GetUserAuthActivityIds(userInfo user.UserInfo) (acrivityIds []int, err error) {
  163. productId := 1
  164. // 查询用户产品状态是否正常
  165. companyProduct, err := company_product.GetByCompany2ProductId(userInfo.CompanyID, int64(productId))
  166. if err != nil {
  167. return
  168. }
  169. statusMatch := "正式,试用,永续"
  170. if !strings.Contains(statusMatch, companyProduct.Status) || companyProduct.IsSuspend == 1 {
  171. acrivityIds = append(acrivityIds, 0)
  172. return
  173. }
  174. // 获取用户有效权限
  175. validPermissionIdList, err := company.GetValidPermissionIdListByCompany2ProductId(userInfo.CompanyID, int64(productId))
  176. if err != nil {
  177. return
  178. }
  179. // 获取用户权限可参与的活动ID
  180. permissions, err := yb_activity_permission.GetPermissionsByPermissionIds(validPermissionIdList)
  181. if err != nil {
  182. return
  183. }
  184. for _, v := range permissions {
  185. acrivityIds = append(acrivityIds, int(v.ActivityID))
  186. }
  187. return
  188. }