activity.go 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. package activity
  2. import (
  3. "fmt"
  4. "gorm.io/gorm"
  5. "hongze/hongze_yb/models/response/purchase"
  6. "hongze/hongze_yb/models/tables/company_product"
  7. "hongze/hongze_yb/models/tables/yb_activity"
  8. "hongze/hongze_yb/models/tables/yb_activity_permission"
  9. "hongze/hongze_yb/models/tables/yb_activity_register"
  10. "hongze/hongze_yb/models/tables/yb_activity_remind"
  11. "hongze/hongze_yb/models/tables/yb_activity_voice"
  12. "hongze/hongze_yb/services/company"
  13. "hongze/hongze_yb/services/user"
  14. "hongze/hongze_yb/utils"
  15. "log"
  16. "strings"
  17. "time"
  18. )
  19. // ActivityList 活动列表
  20. type ActivityList struct {
  21. yb_activity.ActivityItem // 活动信息
  22. VoiceList []*yb_activity_voice.YbActivityVoice // 音频列表
  23. }
  24. // PageList 活动分页列表
  25. func PageList(condition string, pars []interface{}, page, limit int, order string, userInfo user.UserInfo) (list []ActivityList, err error) {
  26. activities, err := yb_activity.GetPageListByWhere(condition, pars, page, limit, order, int(userInfo.UserID))
  27. if err != nil {
  28. log.Print(err.Error())
  29. return
  30. }
  31. if activities != nil {
  32. var activityIds []int
  33. for _, item := range activities {
  34. activityIds = append(activityIds, item.ActivityID)
  35. }
  36. // 录音
  37. voices, queryErr := yb_activity_voice.GetVoicesByActivityIds(activityIds)
  38. if queryErr != nil {
  39. log.Print(queryErr.Error())
  40. return
  41. }
  42. // 提醒
  43. reminds, queryErr := yb_activity_remind.GetRemindsByUserIdAndActivityIds(int(userInfo.UserID), activityIds)
  44. if queryErr != nil {
  45. log.Print(queryErr.Error())
  46. return
  47. }
  48. remindMap := make(map[int]int, 0)
  49. for _, remind := range reminds {
  50. remindMap[remind.ActivityId] = 1
  51. }
  52. // 报名
  53. registers, queryErr := yb_activity_register.GetRegistersByUserIdAndActivityIds(int(userInfo.UserID), activityIds)
  54. if queryErr != nil {
  55. log.Print(queryErr.Error())
  56. return
  57. }
  58. registerMap := make(map[int]int, 0)
  59. for _, register := range registers {
  60. if register.RegisterState == 1 {
  61. registerMap[register.ActivityId] = 1
  62. }
  63. }
  64. var temp ActivityList
  65. for _, activity := range activities {
  66. temp.ActivityItem = activity
  67. temp.WeekString = utils.StrDateTimeToWeek(activity.StartTime.Weekday().String())
  68. temp.ActivityState = getActivityStateByTime(activity.StartTime, activity.EndTime)
  69. // 音频列表
  70. var voiceMap []*yb_activity_voice.YbActivityVoice
  71. for _, voice := range voices {
  72. if temp.ActivityID == int(voice.ActivityID) {
  73. voiceMap = append(voiceMap, voice)
  74. temp.HasPlayBack = 1 // 有回放
  75. }
  76. }
  77. temp.VoiceList = voiceMap
  78. // 是否有提醒
  79. _, ok := remindMap[temp.ActivityID]
  80. if ok {
  81. temp.HasRemind = 1
  82. }
  83. // 是否已报名
  84. _, ok = registerMap[temp.ActivityID]
  85. if ok {
  86. temp.RegisterState = 1
  87. }
  88. list = append(list, temp)
  89. }
  90. }
  91. return
  92. }
  93. // getActivityStateByTime 根据时间生成活动枚举值
  94. func getActivityStateByTime(startTime, endTime time.Time) (state int) {
  95. nowTime := time.Now().Format(utils.FormatDateTime)
  96. timeNow, _ := time.ParseInLocation(utils.FormatDateTime, nowTime, time.Local)
  97. if timeNow.Before(endTime) && timeNow.After(startTime) {
  98. // 进行中
  99. state = 2
  100. } else if timeNow.After(endTime) {
  101. // 已结束
  102. state = 3
  103. } else if timeNow.Before(startTime) {
  104. // 未开始
  105. state = 1
  106. }
  107. return
  108. }
  109. // GetActivityDetail 活动详情
  110. func GetActivityDetail(activityId, userId int) (detail *yb_activity.ActivityDetail, err error) {
  111. detail, err = yb_activity.GetDetailById(activityId)
  112. if err != nil {
  113. if err == gorm.ErrRecordNotFound {
  114. return
  115. }
  116. }
  117. if detail == nil {
  118. return
  119. }
  120. registeredNum, err := yb_activity_register.CountRegistedNumByActivityId(activityId)
  121. if err != nil {
  122. log.Print(err.Error())
  123. return
  124. }
  125. detail.RegisteredNum = int(registeredNum)
  126. detail.WeekString = utils.StrDateTimeToWeek(detail.StartTime.Weekday().String())
  127. detail.ActivityState = getActivityStateByTime(detail.StartTime, detail.EndTime)
  128. _, remindErr := yb_activity_remind.RemindExist(userId, activityId)
  129. if remindErr != gorm.ErrRecordNotFound {
  130. detail.HasRemind = 1
  131. }
  132. _, registerErr := yb_activity_register.RegisterExist(userId, activityId)
  133. if registerErr != gorm.ErrRecordNotFound {
  134. detail.RegisterState = 1
  135. }
  136. return
  137. }
  138. // CheckActivityPermission 验证用户的活动参与权限
  139. func CheckActivityPermission(userInfo user.UserInfo, activityId int) (ok bool, permissionCheckInfo company.PermissionCheckInfo, err error) {
  140. companyId := userInfo.CompanyID
  141. activity, err := yb_activity.GetOneById(activityId)
  142. if err != nil {
  143. if err == gorm.ErrRecordNotFound {
  144. return
  145. }
  146. }
  147. if activity == nil {
  148. return
  149. }
  150. // 查询活动权限集合
  151. permissions, err := yb_activity_permission.GetPermissionsByActivityId(activityId)
  152. if err != nil {
  153. return
  154. }
  155. var permissionIds []int
  156. for _, item := range permissions {
  157. pid := int(item.PermissionID)
  158. permissionIds = append(permissionIds, pid)
  159. }
  160. ok, permissionCheckInfo, err = company.CheckPermissionByPermissionIdList2Ficc(companyId, int(userInfo.UserID), permissionIds)
  161. return
  162. }
  163. // GetUserAuthActivityIds 获取用户有权限参与的活动Ids
  164. func GetUserAuthActivityIds(userInfo user.UserInfo) (acrivityIds []int, err error) {
  165. productId := 1
  166. // 查询用户产品状态是否正常
  167. companyProduct, err := company_product.GetByCompany2ProductId(userInfo.CompanyID, int64(productId))
  168. if err != nil {
  169. return
  170. }
  171. statusMatch := "正式,试用,永续"
  172. if !strings.Contains(statusMatch, companyProduct.Status) || companyProduct.IsSuspend == 1 {
  173. acrivityIds = append(acrivityIds, 0)
  174. return
  175. }
  176. // 获取用户有效权限
  177. validPermissionIdList, err := company.GetValidPermissionIdListByCompany2ProductId(userInfo.CompanyID, int64(productId))
  178. if err != nil {
  179. return
  180. }
  181. // 获取用户权限可参与的活动ID
  182. permissions, err := yb_activity_permission.GetPermissionsByPermissionIds(validPermissionIdList)
  183. if err != nil {
  184. return
  185. }
  186. for _, v := range permissions {
  187. acrivityIds = append(acrivityIds, int(v.ActivityID))
  188. }
  189. return
  190. }
  191. // GetLatestActivity 从用户有权限参与的活动中,筛选出最新的活动
  192. func GetLatestActivity(permissionIds []int) (purchaseItem *purchase.PurchaseListItem, err error) {
  193. // 获取用户权限可参与的活动ID
  194. var artivityIds []int
  195. permissions, err := yb_activity_permission.GetPermissionsByPermissionIds(permissionIds)
  196. if err != nil {
  197. return
  198. }
  199. for _, v := range permissions {
  200. artivityIds = append(artivityIds, int(v.ActivityID))
  201. }
  202. activityItem, err := yb_activity.GetLatestByIds(artivityIds)
  203. if err != nil {
  204. return
  205. }
  206. purchaseItem = new(purchase.PurchaseListItem)
  207. if activityItem.ActivityID > 0 {
  208. purchaseItem.ActivityId = activityItem.ActivityID
  209. purchaseItem.Title = activityItem.ActivityName
  210. purchaseItem.Content = fmt.Sprintf("主讲:%s", activityItem.Speaker)
  211. purchaseItem.Time = activityItem.ModifyTime
  212. }
  213. return
  214. }
  215. // GetList 从用户有权限参与的活动中,筛选出最新的活动
  216. func GetPurchaseList(permissionIds []int, offset, pageLimit int) (list []*purchase.Detail, err error) {
  217. // 获取用户权限可参与的活动ID
  218. var artivityIds []int
  219. permissions, err := yb_activity_permission.GetPermissionsByPermissionIds(permissionIds)
  220. if err != nil {
  221. return
  222. }
  223. for _, v := range permissions {
  224. artivityIds = append(artivityIds, int(v.ActivityID))
  225. }
  226. activityList, err := yb_activity.GetListByIds(artivityIds, offset, pageLimit)
  227. if err != nil {
  228. return
  229. }
  230. var WeekDayMap = map[string]string{
  231. "Monday": "周一",
  232. "Tuesday": "周二",
  233. "Wednesday": "周三",
  234. "Thursday": "周四",
  235. "Friday": "周五",
  236. "Saturday": "周六",
  237. "Sunday": "周日",
  238. }
  239. for _, item := range activityList {
  240. temp := new(purchase.Detail)
  241. temp.ActivityId = item.ActivityID
  242. temp.Title = fmt.Sprintf("主讲:%s", item.Speaker)
  243. // 时间处理
  244. activityDate := item.StartTime.Format("2006-01-02")
  245. activityStart := item.StartTime.Format("15:04")
  246. activityEnd := item.EndTime.Format("15:04")
  247. activityWeek := item.StartTime.Weekday().String()
  248. weekStr := WeekDayMap[activityWeek]
  249. timeStr := activityDate + " " + activityStart + "-" + activityEnd + " " + weekStr
  250. temp.Content = fmt.Sprintf("活动时间:%s", timeStr)
  251. temp.Time = item.ModifyTime
  252. temp.TopName = item.ActivityName
  253. list = append(list, temp)
  254. }
  255. return
  256. }