Browse Source

1.api-完善活动列表 2.api-取消提醒 3.api-取消报名

hsun 3 years ago
parent
commit
1787e090e8

+ 129 - 13
controller/activity/activity.go

@@ -5,7 +5,9 @@ import (
 	"hongze/hongze_yb/controller/response"
 	"hongze/hongze_yb/services/activity"
 	"hongze/hongze_yb/services/user"
+	"hongze/hongze_yb/utils"
 	"strconv"
+	"time"
 )
 
 // GetPageList 活动列表
@@ -18,17 +20,17 @@ import (
 // @Product json
 // @Param activity_name query string false "活动名称"
 // @Param activity_type_name query string false "活动类别"
-// @Param active_state query int false "活动状态 1-未开始 2-进行中 3-已结束"
+// @Param active_state query int false "活动状态 1-本周预告 2-进行中 3-已结束"
 // @Param activity_type query int false "活动类型 1-线上会议 3-线下沙龙"
 // @Param page query int false "当前页码"
 // @Param limit query int false "每页数量"
 // @Success 200 {object} []yb_activity.QueryActivity
 // @Router /activity/getPageList [get]
 func GetPageList(c *gin.Context) {
-	where := _handleListQuery(c)
+	where, order := _handleListQuery(c)
 	page, limit := _handlePageParam(c)
 	userInfo := user.GetUserInfoByStruct(c)
-	listData, err := activity.PageList(where, page, limit, userInfo)
+	listData, err := activity.PageList(where, page, limit, order, userInfo)
 	if err != nil {
 		response.Fail("活动获取失败", c)
 		return
@@ -36,7 +38,7 @@ func GetPageList(c *gin.Context) {
 	response.OkData("获取成功", listData, c)
 }
 
-func _handleListQuery(c *gin.Context) map[string]interface{} {
+func _handleListQuery(c *gin.Context) (map[string]interface{}, string) {
 	where := make(map[string]interface{})
 	where["is_delete ="] = 0
 	title := c.DefaultQuery("activity_name", "")
@@ -47,17 +49,38 @@ func _handleListQuery(c *gin.Context) map[string]interface{} {
 	if typeName != "" {
 		where["activity_type_name like"] = "%" + c.Query("activity_type_name") + "%"
 	}
+	order := ""
 	reqState := c.DefaultQuery("active_state", "0")
 	if reqState != "0" {
 		state, _ := strconv.Atoi(reqState)
-		where["active_state ="] = state
+		nowTime := time.Now().Format("2006-01-02 15:04:05")
+		weekStart := utils.GetNowWeekMonday()
+		weekEnd := utils.GetNowWeekLastDay()
+		// 比对本周开始时间和当前时间
+		timeNow, _ := time.Parse("2006-01-02 15:04:05", nowTime)
+		queryStart := timeNow
+		if timeNow.Before(weekStart) {
+			queryStart = weekStart
+		}
+		switch state {
+		case 1:
+			// 时间在本周内且未开始
+			where["start_time >="] = queryStart
+			where["end_time <"] = weekEnd
+		case 2:
+			where["start_time <="] = nowTime
+			where["end_time >"] = nowTime
+		case 3:
+			where["end_time <"] = nowTime
+			order = "start_time desc"
+		}
 	}
 	reqType := c.DefaultQuery("activity_type", "0")
 	if reqType != "0" {
 		activityType, _ := strconv.Atoi(reqType)
 		where["activity_type_id ="] = activityType
 	}
-	return where
+	return where, order
 }
 
 func _handlePageParam(c *gin.Context) (page, limit int) {
@@ -77,22 +100,48 @@ func _handlePageParam(c *gin.Context) (page, limit int) {
 // @Param activity_id query int true "活动ID"
 // @Success 200 ""
 // @Router /activity/addRemind [post]
-func AddRemind(c *gin.Context)  {
+func AddRemind(c *gin.Context) {
 	reqActivityId := c.DefaultPostForm("activity_id", "0")
 	if reqActivityId == "0" {
-		response.Fail("参数有误: activity_id", c)
+		response.Fail("参数异常", c)
 		return
 	}
 	activityId, _ := strconv.Atoi(reqActivityId)
 	userInfo := user.GetUserInfoByStruct(c)
-	_, err := activity.CreateRemind(activityId, userInfo)
+	err := activity.CreateRemind(activityId, userInfo)
 	if err != nil {
-		response.Fail("加入提醒失败", c)
+		response.Fail(err.Error(), c)
 		return
 	}
 	response.OkData("操作成功", "", c)
 }
 
+// CancelRemind 取消提醒
+// @Tags 活动模块
+// @Summary  取消提醒
+// @Description 取消提醒
+// @Security ApiKeyAuth
+// @Param Authorization	header string true "Bearer 31a165baebe6dec616b1f8f3207b4273"
+// @Accept  json
+// @Product json
+// @Param activity_id query int true "活动ID"
+// @Success 200 ""
+// @Router /activity/cancelRemind [post]
+func CancelRemind(c *gin.Context) {
+	reqActivityId := c.DefaultPostForm("activity_id", "0")
+	if reqActivityId == "0" {
+		response.Fail("参数异常", c)
+		return
+	}
+	activityId, _ := strconv.Atoi(reqActivityId)
+	userInfo := user.GetUserInfoByStruct(c)
+	err := activity.CancelRemind(activityId, userInfo)
+	if err != nil {
+		response.Fail(err.Error(), c)
+		return
+	}
+	response.OkData("操作成功", "", c)
+}
 
 // RegisterActivity 报名活动
 // @Tags 活动模块
@@ -108,15 +157,82 @@ func AddRemind(c *gin.Context)  {
 func RegisterActivity(c *gin.Context)  {
 	reqActivityId := c.DefaultPostForm("activity_id", "0")
 	if reqActivityId == "0" {
-		response.Fail("参数有误: activity_id", c)
+		response.Fail("参数异常", c)
 		return
 	}
 	activityId, _ := strconv.Atoi(reqActivityId)
 	userInfo := user.GetUserInfoByStruct(c)
-	_, err := activity.CreateRegister(activityId, userInfo)
+	err := activity.CreateRegister(activityId, userInfo)
 	if err != nil {
-		response.Fail("报名失败", c)
+		response.Fail(err.Error(), c)
 		return
 	}
 	response.OkData("操作成功", "", c)
+}
+
+// CancelRegister 取消报名
+// @Tags 活动模块
+// @Summary  取消报名
+// @Description 取消报名
+// @Security ApiKeyAuth
+// @Param Authorization	header string true "Bearer 31a165baebe6dec616b1f8f3207b4273"
+// @Accept  json
+// @Product json
+// @Param activity_id query int true "活动ID"
+// @Success 200 ""
+// @Router /activity/cancelRegister [post]
+func CancelRegister(c *gin.Context) {
+	reqActivityId := c.DefaultPostForm("activity_id", "0")
+	if reqActivityId == "0" {
+		response.Fail("参数异常", c)
+		return
+	}
+	activityId, _ := strconv.Atoi(reqActivityId)
+	userInfo := user.GetUserInfoByStruct(c)
+	err := activity.CancelRegister(activityId, userInfo)
+	if err != nil {
+		response.Fail(err.Error(), c)
+		return
+	}
+	response.OkData("操作成功", "", c)
+}
+
+// GetActivityDetail 获取活动详情
+// @Tags 活动模块
+// @Summary  获取活动详情
+// @Description 获取活动详情
+// @Security ApiKeyAuth
+// @Param Authorization	header string true "Bearer 31a165baebe6dec616b1f8f3207b4273"
+// @Accept  json
+// @Product json
+// @Param activity_id query int true "活动ID"
+// @Success 200 ""
+// @Router /activity/getActivityDetail [get]
+func GetActivityDetail(c *gin.Context) {
+	reqActivityId := c.DefaultQuery("activity_id", "0")
+	if reqActivityId == "0" {
+		response.Fail("参数异常", c)
+		return
+	}
+	response.OkData("获取成功", "", c)
+}
+
+// GetActivityVoices 获取活动录音
+// @Tags 活动模块
+// @Summary  获取活动录音
+// @Description 获取活动录音
+// @Security ApiKeyAuth
+// @Param Authorization	header string true "Bearer 31a165baebe6dec616b1f8f3207b4273"
+// @Accept  json
+// @Product json
+// @Param activity_id query int true "活动ID"
+// @Success 200 ""
+// @Router /activity/getActivityVoices [get]
+func GetActivityVoices(c *gin.Context)  {
+	reqActivityId := c.DefaultQuery("activity_id", "0")
+	if reqActivityId == "0" {
+		response.Fail("参数异常", c)
+		return
+	}
+	response.OkData("获取成功", "", c)
 }

+ 23 - 4
models/tables/yb_activity/query.go

@@ -7,7 +7,7 @@ import (
 	"time"
 )
 
-type QueryActivity struct {
+type ActivityList struct {
 	ActivityID          int       `json:"activityId"`
 	ActivityName        string    `json:"activityName"`
 	ActivityTypeName    string    `json:"activityTypeName"`
@@ -19,7 +19,12 @@ type QueryActivity struct {
 	Registered			int		  `json:"registered"`
 }
 
-func GetPageListByWhereMap(where map[string]interface{}, page, limit, userId int) (activities []*QueryActivity, err error) {
+type ActivityDetail struct {
+	
+}
+
+// GetPageListByWhereMap 分页获取列表-关联录音、提醒和报名信息
+func GetPageListByWhereMap(where map[string]interface{}, page, limit int, order string, userId int) (activities []*ActivityList, err error) {
 	condition, values, buildErr := utils.WhereBuild(where)
 	if buildErr != nil {
 		err = errors.New("系统异常,生成查询语句失败")
@@ -29,15 +34,29 @@ func GetPageListByWhereMap(where map[string]interface{}, page, limit, userId int
 		"a.activity_id", "a.activity_name", "a.activity_type_name", "a.start_time", "a.end_time", "a.speaker",
 		"b.activity_voice_id AS has_play_back", "c.id AS has_remind", "d.id AS registered",
 	}
+	queryOrder := "start_time asc"
+	if order != "" {
+		queryOrder = order
+	}
 	err = global.DEFAULT_MYSQL.Table("yb_activity AS a").
 		Select(fields).
 		Joins("LEFT JOIN yb_activity_voice AS b ON a.activity_id = b.activity_id").
 		Joins("LEFT JOIN yb_activity_remind AS c ON a.activity_id = c.activity_id AND c.user_id = ?", userId).
 		Joins("LEFT JOIN yb_activity_register AS d ON a.activity_id = d.activity_id AND d.user_id = ?", userId).
 		Where(condition, values...).
-		Order("a.start_time asc").
-		Group("a.activity_id").
+		Order(queryOrder).
+		Group("activity_id").
 		Limit(limit).Offset((page - 1) * limit).
 		Scan(&activities).Error
 	return
+}
+
+// GetOneById 根据主键获取活动
+func GetOneById(activityId int) (activity *YbActivity, err error) {
+	err = global.DEFAULT_MYSQL.Where("activity_id = ?", activityId).First(&activity).Error
+	return
+}
+
+func GetDetailById()  {
+	
 }

+ 8 - 0
models/tables/yb_activity_register/delete.go

@@ -0,0 +1,8 @@
+package yb_activity_register
+
+import "hongze/hongze_yb/global"
+
+func Delete(register *YbActivityRegister) (err error) {
+	err = global.DEFAULT_MYSQL.Delete(&register).Error
+	return
+}

+ 9 - 2
models/tables/yb_activity_register/query.go

@@ -2,7 +2,14 @@ package yb_activity_register
 
 import "hongze/hongze_yb/global"
 
-func RegisterExist(userId, activityId int) (err error) {
-	err = global.DEFAULT_MYSQL.Table("yb_activity_register").Where("user_id = ? AND activity_id = ?", userId, activityId).First(&YbActivityRegister{}).Error
+// RegisterExist 根据用户ID和活动ID获取报名信息
+func RegisterExist(userId, activityId int) (register *YbActivityRegister, err error) {
+	err = global.DEFAULT_MYSQL.Table("yb_activity_register").Where("user_id = ? AND activity_id = ?", userId, activityId).First(&register).Error
+	return
+}
+
+// CountRegistedNumByActivityId 根据活动ID获取报名人数
+func CountRegistedNumByActivityId(activityId int) (count int64, err error) {
+	err = global.DEFAULT_MYSQL.Table("yb_activity_register").Where("activity_id = ?", activityId).Count(&count).Error
 	return
 }

+ 8 - 0
models/tables/yb_activity_remind/delete.go

@@ -0,0 +1,8 @@
+package yb_activity_remind
+
+import "hongze/hongze_yb/global"
+
+func Delete(remind *YbActivityRemind) (err error) {
+	err = global.DEFAULT_MYSQL.Delete(&remind).Error
+	return
+}

+ 3 - 2
models/tables/yb_activity_remind/query.go

@@ -2,7 +2,8 @@ package yb_activity_remind
 
 import "hongze/hongze_yb/global"
 
-func RemindExist(userId, activityId int) (err error) {
-	err = global.DEFAULT_MYSQL.Table("yb_activity_remind").Where("user_id = ? AND activity_id = ?", userId, activityId).First(&YbActivityRemind{}).Error
+// RemindExist 根据用户ID和活动ID获取提醒信息
+func RemindExist(userId, activityId int) (remind *YbActivityRemind, err error) {
+	err = global.DEFAULT_MYSQL.Table("yb_activity_remind").Where("user_id = ? AND activity_id = ?", userId, activityId).First(&remind).Error
 	return
 }

+ 1 - 1
models/tables/yb_activity_remind/yb_activity_remind.go

@@ -4,7 +4,7 @@ import "time"
 
 // YbActivityRemind 活动提醒表
 type YbActivityRemind struct {
-	ID         uint32 `gorm:"primaryKey;column:id;type:int(11) unsigned;not null" json:"-"`
+	ID         uint32 `gorm:"primaryKey;column:id;type:int(11) unsigned;not null" json:"id"`
 	ActivityID uint32 `gorm:"index:inx_activity_id;column:activity_id;type:int(11) unsigned;not null;default:0" json:"activityId"` // 活动ID
 	UserID     uint64 `gorm:"index:inx_user_id;column:user_id;type:bigint(20) unsigned;not null;default:0" json:"userId"`          // 微信用户表ID
 	CompanyID  uint64 `gorm:"column:company_id;type:bigint(20) unsigned;not null;default:0" json:"companyId"`                      // 用户ID

+ 5 - 0
models/tables/yb_activity_voice/query.go

@@ -0,0 +1,5 @@
+package yb_activity_voice
+
+func GetVoicesByActivityId()  {
+	
+}

+ 4 - 0
routers/activity.go

@@ -11,7 +11,11 @@ func InitActivity(r *gin.Engine) {
 
 	{
 		rGroup.GET("/getPageList", activity.GetPageList)
+		rGroup.GET("/getActivityDetail", activity.GetActivityDetail)
+		rGroup.GET("/getActivityVoices", activity.GetActivityVoices)
 		rGroup.POST("/addRemind", activity.AddRemind)
+		rGroup.POST("/cancelRemind", activity.CancelRemind)
 		rGroup.POST("/registerActivity", activity.RegisterActivity)
+		rGroup.POST("/cancelRegister", activity.CancelRegister)
 	}
 }

+ 3 - 2
services/activity/activity.go

@@ -6,8 +6,9 @@ import (
 	"hongze/hongze_yb/services/user"
 )
 
-func PageList(where map[string]interface{}, page, limit int, userInfo *user.UserInfo) (data []*yb_activity.QueryActivity, err error) {
-	data, err = yb_activity.GetPageListByWhereMap(where, page, limit, int(userInfo.UserID))
+// PageList 活动分页列表
+func PageList(where map[string]interface{}, page, limit int, order string, userInfo *user.UserInfo) (data []*yb_activity.ActivityList, err error) {
+	data, err = yb_activity.GetPageListByWhereMap(where, page, limit, order, int(userInfo.UserID))
 	if err != nil {
 		fmt.Println("err:", err)
 		return

+ 65 - 6
services/activity/activity_register.go

@@ -3,21 +3,23 @@ package activity
 import (
 	"errors"
 	"gorm.io/gorm"
+	"hongze/hongze_yb/models/tables/yb_activity"
 	"hongze/hongze_yb/models/tables/yb_activity_register"
 	"hongze/hongze_yb/services/user"
+	"log"
 	"time"
 )
 
-func CreateRegister(activityId int, userInfo *user.UserInfo) (registerInfo *yb_activity_register.YbActivityRegister, err error) {
-	// 是否已报名
+// CreateRegister 活动报名
+func CreateRegister(activityId int, userInfo *user.UserInfo) (err error) {
 	userId := int(userInfo.UserID)
-	err = yb_activity_register.RegisterExist(userId, activityId)
-	if err != gorm.ErrRecordNotFound {
-		err = errors.New("您已报名该活动")
+	ok, msg := checkRegisterOk(userId, activityId)
+	if !ok {
+		err = errors.New(msg)
 		return
 	}
 	// 新增报名信息
-	registerInfo = &yb_activity_register.YbActivityRegister{
+	registerInfo := &yb_activity_register.YbActivityRegister{
 		ActivityID:	uint32(activityId),
 		UserID: uint64(userId),
 		CompanyID: uint64(userInfo.CompanyID),
@@ -26,5 +28,62 @@ func CreateRegister(activityId int, userInfo *user.UserInfo) (registerInfo *yb_a
 		CreateTime: time.Now(),
 	}
 	err = registerInfo.Create()
+	if err != nil {
+		log.Print(err.Error())
+		err = errors.New("报名失败")
+	}
+	return
+}
+
+// checkRegisterOk 验证是否可以报名
+func checkRegisterOk(userId, activityId int) (ok bool, msg string) {
+	activity, err := yb_activity.GetOneById(activityId)
+	if err == gorm.ErrRecordNotFound {
+		msg = "活动信息有误"
+		return
+	}
+	_, err = yb_activity_register.RegisterExist(userId, activityId)
+	if err != gorm.ErrRecordNotFound {
+		msg = "请勿重复报名"
+		return
+	}
+	if activity.ActivityTypeID != 3 {
+		msg = "仅线下沙龙可报名"
+	}
+	if activity.IsLimitPeople == 1 {
+		limitNum := activity.LimitPeopleNum
+		registedNum, err := yb_activity_register.CountRegistedNumByActivityId(activityId)
+		if err != nil {
+			log.Print(err.Error())
+			msg = "报名失败"
+			return
+		}
+		if int(registedNum) >= limitNum {
+			msg = "此活动报名人数已满,请留意下期活动"
+			return
+		}
+	}
+	return
+}
+
+// CancelRegister 取消报名
+func CancelRegister(activityId int, userInfo *user.UserInfo) (err error) {
+	userId := int(userInfo.UserID)
+	_, err = yb_activity.GetOneById(activityId)
+	if err == gorm.ErrRecordNotFound {
+		err = errors.New("活动信息有误")
+		return
+	}
+	registerInfo, err := yb_activity_register.RegisterExist(userId, activityId)
+	if err == gorm.ErrRecordNotFound {
+		err = errors.New("报名信息有误")
+		return
+	}
+	err = yb_activity_register.Delete(registerInfo)
+	if err != nil {
+		log.Print(err.Error())
+		err = errors.New("取消报名失败")
+		return
+	}
 	return
 }

+ 62 - 7
services/activity/activity_remind.go

@@ -3,21 +3,22 @@ package activity
 import (
 	"errors"
 	"gorm.io/gorm"
+	"hongze/hongze_yb/models/tables/yb_activity"
 	"hongze/hongze_yb/models/tables/yb_activity_remind"
 	"hongze/hongze_yb/services/user"
+	"log"
 	"time"
 )
 
-func CreateRemind(activityId int, userInfo *user.UserInfo) (remindInfo *yb_activity_remind.YbActivityRemind, err error) {
-	// 是否已有提醒
+// CreateRemind 新增提醒
+func CreateRemind(activityId int, userInfo *user.UserInfo) (err error) {
 	userId := int(userInfo.UserID)
-	err = yb_activity_remind.RemindExist(userId, activityId)
-	if err != gorm.ErrRecordNotFound {
-		err = errors.New("该活动已有提醒")
+	ok, msg := checkRemindOk(userId, activityId)
+	if !ok {
+		err = errors.New(msg)
 		return
 	}
-	// 新增提醒
-	remindInfo = &yb_activity_remind.YbActivityRemind{
+	remindInfo := &yb_activity_remind.YbActivityRemind{
 		ActivityID:	uint32(activityId),
 		UserID: uint64(userId),
 		CompanyID: uint64(userInfo.CompanyID),
@@ -26,5 +27,59 @@ func CreateRemind(activityId int, userInfo *user.UserInfo) (remindInfo *yb_activ
 		CreateTime: time.Now(),
 	}
 	err = remindInfo.Create()
+	if err != nil {
+		log.Print(err)
+		err = errors.New("设置提醒失败")
+	}
+	return
+}
+
+// checkRemindOk 验证是否可以新增提醒
+func checkRemindOk(userId, activityId int) (ok bool, msg string) {
+	activity, err := yb_activity.GetOneById(activityId)
+	if err == gorm.ErrRecordNotFound {
+		msg = "活动信息有误"
+		return
+	}
+	_, err = yb_activity_remind.RemindExist(userId, activityId)
+	if err != gorm.ErrRecordNotFound {
+		msg = "请勿重复设置提醒"
+		return
+	}
+	// 活动时间
+	nowUtime := time.Now().Unix()
+	endUtime := activity.EndTime.Unix()
+	if nowUtime > endUtime {
+		msg = "活动已结束"
+		return
+	}
+	nowUtime += 60 * 15
+	startUtime := activity.StartTime.Unix()
+	if nowUtime > startUtime {
+		msg = "活动开始前十五分钟内无法设置会议提醒"
+		return
+	}
+	ok = true
+	return
+}
+
+// CancelRemind 取消提醒
+func CancelRemind(activityId int, userInfo *user.UserInfo) (err error) {
+	userId := int(userInfo.UserID)
+	_, err = yb_activity.GetOneById(activityId)
+	if err == gorm.ErrRecordNotFound {
+		err = errors.New("活动信息有误")
+		return
+	}
+	remindInfo, err := yb_activity_remind.RemindExist(userId, activityId)
+	if err == gorm.ErrRecordNotFound {
+		err = errors.New("提醒信息有误")
+		return
+	}
+	err = yb_activity_remind.Delete(remindInfo)
+	if err != nil {
+		log.Print(err.Error())
+		err = errors.New("取消提醒失败")
+	}
 	return
 }