activity_register.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package activity
  2. import (
  3. "errors"
  4. "gorm.io/gorm"
  5. company2 "hongze/hongze_yb/models/tables/company"
  6. "hongze/hongze_yb/models/tables/company_product"
  7. "hongze/hongze_yb/models/tables/yb_activity"
  8. "hongze/hongze_yb/models/tables/yb_activity_register"
  9. "hongze/hongze_yb/services/user"
  10. "log"
  11. "time"
  12. )
  13. type RegisterCheckInfo struct {
  14. Specific int `json:"specific" description:"是否指定返回"`
  15. Msg string `json:"msg" description:"提示信息"`
  16. Type string `json:"type" description:"校验失败,需要让前端处理的类型,枚举值:full"`
  17. }
  18. // CreateRegister 活动报名
  19. func CreateRegister(activityId int, userInfo user.UserInfo) (err error, registerCheck RegisterCheckInfo) {
  20. userId := int(userInfo.UserID)
  21. ok, msg, registerCheck := checkRegisterOk(userId, activityId)
  22. if !ok {
  23. err = errors.New(msg)
  24. return
  25. }
  26. // 客户名称
  27. company, err := company2.GetByCompanyId(userInfo.CompanyID)
  28. if err != nil {
  29. log.Print(err.Error())
  30. err = errors.New("报名失败")
  31. return
  32. }
  33. companyName := ""
  34. if company != nil {
  35. companyName = company.CompanyName
  36. }
  37. // 销售名称
  38. companyProduct, err := company_product.GetByCompany2ProductId(int64(userInfo.CompanyID), 1)
  39. if err != nil {
  40. log.Print(err.Error())
  41. err = errors.New("报名失败")
  42. return
  43. }
  44. sellerName := ""
  45. if companyProduct != nil {
  46. sellerName = companyProduct.SellerName
  47. }
  48. // 新增报名信息
  49. registerInfo := &yb_activity_register.YbActivityRegister{
  50. ActivityID: uint32(activityId),
  51. UserID: uint64(userId),
  52. CompanyID: uint64(userInfo.CompanyID),
  53. CompanyName: companyName,
  54. SellerName: sellerName,
  55. RealName: userInfo.RealName,
  56. Mobile: userInfo.Mobile,
  57. RegisterState: 1,
  58. CreateTime: time.Now(),
  59. }
  60. err = registerInfo.Create()
  61. if err != nil {
  62. log.Print(err.Error())
  63. err = errors.New("报名失败")
  64. }
  65. return
  66. }
  67. // checkRegisterOk 验证是否可以报名
  68. func checkRegisterOk(userId, activityId int) (ok bool, msg string, registerCheck RegisterCheckInfo) {
  69. activityInfo, err := yb_activity.GetOneById(activityId)
  70. if err == gorm.ErrRecordNotFound {
  71. msg = "活动信息有误"
  72. return
  73. }
  74. registerInfo, err := yb_activity_register.RegisterExist(userId, activityId)
  75. if err != nil && err != gorm.ErrRecordNotFound {
  76. log.Print(err.Error())
  77. msg = "报名失败"
  78. return
  79. }
  80. if registerInfo != nil && registerInfo.RegisterState == 1 {
  81. msg = "请勿重复报名"
  82. return
  83. }
  84. // 验证可报名类型
  85. activityTypeIds, _ := GetTypeIdsByPid(3)
  86. activityTypeIds = append(activityTypeIds, 3)
  87. registerOk := false
  88. for _, typeId := range activityTypeIds {
  89. if activityInfo.ActivityTypeID == typeId {
  90. registerOk = true
  91. break
  92. }
  93. }
  94. if !registerOk {
  95. msg = "仅线下沙龙可报名"
  96. return
  97. }
  98. if activityInfo.IsLimitPeople == 1 {
  99. limitNum := activityInfo.LimitPeopleNum
  100. registedNum, err := yb_activity_register.CountRegistedNumByActivityId(activityId)
  101. if err != nil {
  102. log.Print(err.Error())
  103. msg = "报名失败"
  104. return
  105. }
  106. if int(registedNum) >= limitNum {
  107. msg = "此活动报名人数已满,请留意下期活动"
  108. registerCheck = RegisterCheckInfo{
  109. Specific: 1,
  110. Msg: msg,
  111. Type: "full",
  112. }
  113. return
  114. }
  115. }
  116. ok = true
  117. return
  118. }
  119. // CancelRegister 取消报名
  120. func CancelRegister(activityId int, userInfo user.UserInfo) (err error) {
  121. userId := int(userInfo.UserID)
  122. _, err = yb_activity.GetOneById(activityId)
  123. if err == gorm.ErrRecordNotFound {
  124. err = errors.New("活动信息有误")
  125. return
  126. }
  127. _, err = yb_activity_register.RegisterExist(userId, activityId)
  128. if err == gorm.ErrRecordNotFound {
  129. err = errors.New("报名信息有误")
  130. return
  131. }
  132. err = yb_activity_register.ModifyRegisterState(userId, activityId, 0)
  133. if err != nil {
  134. log.Print(err.Error())
  135. err = errors.New("取消报名失败")
  136. return
  137. }
  138. return
  139. }