Browse Source

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

hsun 3 years ago
parent
commit
baac8d9a6a

+ 71 - 14
controller/activity/activity.go

@@ -4,16 +4,10 @@ import (
 	"github.com/gin-gonic/gin"
 	"hongze/hongze_yb/controller/response"
 	"hongze/hongze_yb/services/activity"
+	"hongze/hongze_yb/services/user"
 	"strconv"
 )
 
-/**
- * @method	GetPageList
- * @desc	获取活动分页列表
- * @param	*gin.Context
- * @return	json
- */
-
 // GetPageList 活动列表
 // @Tags 活动模块
 // @Summary  活动列表
@@ -24,15 +18,17 @@ import (
 // @Product json
 // @Param activity_name query string false "活动名称"
 // @Param activity_type_name query string false "活动类别"
-// @Param active_state query int false "活动状态"
+// @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.YbActivity
+// @Success 200 {object} []yb_activity.QueryActivity
 // @Router /activity/getPageList [get]
 func GetPageList(c *gin.Context) {
 	where := _handleListQuery(c)
 	page, limit := _handlePageParam(c)
-	listData, err := activity.PageList(where, page, limit)
+	userInfo := user.GetUserInfoByStruct(c)
+	listData, err := activity.PageList(where, page, limit, userInfo)
 	if err != nil {
 		response.Fail("活动获取失败", c)
 		return
@@ -42,6 +38,7 @@ func GetPageList(c *gin.Context) {
 
 func _handleListQuery(c *gin.Context) map[string]interface{} {
 	where := make(map[string]interface{})
+	where["is_delete ="] = 0
 	title := c.DefaultQuery("activity_name", "")
 	if title != "" {
 		where["activity_name like"] = "%" + c.Query("activity_name") + "%"
@@ -50,16 +47,76 @@ func _handleListQuery(c *gin.Context) map[string]interface{} {
 	if typeName != "" {
 		where["activity_type_name like"] = "%" + c.Query("activity_type_name") + "%"
 	}
-	requestState := c.DefaultQuery("active_state", "0")
-	if requestState != "" {
-		state, _ := strconv.Atoi(requestState)
+	reqState := c.DefaultQuery("active_state", "0")
+	if reqState != "0" {
+		state, _ := strconv.Atoi(reqState)
 		where["active_state ="] = state
 	}
+	reqType := c.DefaultQuery("activity_type", "0")
+	if reqType != "0" {
+		activityType, _ := strconv.Atoi(reqType)
+		where["activity_type_id ="] = activityType
+	}
 	return where
 }
 
-func _handlePageParam(c *gin.Context) (page int, limit int) {
+func _handlePageParam(c *gin.Context) (page, limit int) {
 	page, _ = strconv.Atoi(c.Query("page"))
 	limit, _ = strconv.Atoi(c.Query("limit"))
 	return
 }
+
+// AddRemind 添加提醒
+// @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/addRemind [post]
+func AddRemind(c *gin.Context)  {
+	reqActivityId := c.DefaultPostForm("activity_id", "0")
+	if reqActivityId == "0" {
+		response.Fail("参数有误: activity_id", c)
+		return
+	}
+	activityId, _ := strconv.Atoi(reqActivityId)
+	userInfo := user.GetUserInfoByStruct(c)
+	_, err := activity.CreateRemind(activityId, userInfo)
+	if err != nil {
+		response.Fail("加入提醒失败", c)
+		return
+	}
+	response.OkData("操作成功", "", c)
+}
+
+
+// RegisterActivity 报名活动
+// @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/registerActivity [post]
+func RegisterActivity(c *gin.Context)  {
+	reqActivityId := c.DefaultPostForm("activity_id", "0")
+	if reqActivityId == "0" {
+		response.Fail("参数有误: activity_id", c)
+		return
+	}
+	activityId, _ := strconv.Atoi(reqActivityId)
+	userInfo := user.GetUserInfoByStruct(c)
+	_, err := activity.CreateRegister(activityId, userInfo)
+	if err != nil {
+		response.Fail("报名失败", c)
+		return
+	}
+	response.OkData("操作成功", "", c)
+}

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

@@ -6,7 +6,7 @@ import (
 
 // WxUser 联系人表
 type WxUser struct {
-	UserID              uint64    `gorm:"primaryKey;column:user_id;type:bigint(20) unsigned;not null" json:"-"` // 用户id
+	UserID              uint64    `gorm:"primaryKey;column:user_id;type:bigint(20) unsigned;not null" json:"userId"` // 用户id
 	OpenID              string    `gorm:"index:open_id;column:open_id;type:varchar(32)" json:"openId"`          // open_id
 	UnionID             string    `gorm:"column:union_id;type:varchar(64)" json:"unionId"`
 	Subscribe           int8      `gorm:"column:subscribe;type:tinyint(1)" json:"subscribe"`                                                 // 是否关注

+ 28 - 2
models/tables/yb_activity/query.go

@@ -4,14 +4,40 @@ import (
 	"errors"
 	"hongze/hongze_yb/global"
 	"hongze/hongze_yb/utils"
+	"time"
 )
 
-func GetPageListByWhereMap(where map[string]interface{}, page int, limit int) (activities []*YbActivity, err error) {
+type QueryActivity struct {
+	ActivityID          int       `json:"activityId"`
+	ActivityName        string    `json:"activityName"`
+	ActivityTypeName    string    `json:"activityTypeName"`
+	StartTime           time.Time `json:"startTime"`
+	EndTime             time.Time `json:"endTime"`
+	Speaker             string    `json:"speaker"`
+	HasRemind			int		  `json:"hasRemind"`
+	HasPlayBack			int		  `json:"hasPlayBack"`
+	Registered			int		  `json:"registered"`
+}
+
+func GetPageListByWhereMap(where map[string]interface{}, page, limit, userId int) (activities []*QueryActivity, err error) {
 	condition, values, buildErr := utils.WhereBuild(where)
 	if buildErr != nil {
 		err = errors.New("系统异常,生成查询语句失败")
 		return
 	}
-	err = global.DEFAULT_MYSQL.Where(condition, values...).Limit(limit).Offset((page - 1) * limit).Find(&activities).Error
+	fields := []string{
+		"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",
+	}
+	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").
+		Limit(limit).Offset((page - 1) * limit).
+		Scan(&activities).Error
 	return
 }

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

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

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

@@ -0,0 +1,8 @@
+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
+	return
+}

+ 36 - 0
models/tables/yb_activity_register/yb_activity_register.go

@@ -0,0 +1,36 @@
+package yb_activity_register
+
+import "time"
+
+// YbActivityRegister 活动报名表
+type YbActivityRegister struct {
+	ID         uint32 `gorm:"primaryKey;column:id;type:int(11) unsigned;not null" json:"-"`
+	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
+	RealName   string `gorm:"column:real_name;type:varchar(32);not null;default:''" json:"realName"`                               // 用户实际名称
+	Mobile     string `gorm:"column:mobile;type:varchar(32);not null;default:''" json:"mobile"`                                    // 用户手机号
+	CreateTime time.Time `gorm:"column:create_time;type:datetime;default:CURRENT_TIMESTAMP" json:"createTime"`
+}
+
+// TableName get sql table name.获取数据库表名
+func (m *YbActivityRegister) TableName() string {
+	return "yb_activity_register"
+}
+
+// YbActivityRegisterColumns get sql column name.获取数据库列名
+var YbActivityRegisterColumns = struct {
+	ID         string
+	ActivityID string
+	UserID     string
+	CompanyID  string
+	RealName   string
+	Mobile     string
+}{
+	ID:         "id",
+	ActivityID: "activity_id",
+	UserID:     "user_id",
+	CompanyID:  "company_id",
+	RealName:   "real_name",
+	Mobile:     "mobile",
+}

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

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

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

@@ -0,0 +1,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
+	return
+}

+ 36 - 0
models/tables/yb_activity_remind/yb_activity_remind.go

@@ -0,0 +1,36 @@
+package yb_activity_remind
+
+import "time"
+
+// YbActivityRemind 活动提醒表
+type YbActivityRemind struct {
+	ID         uint32 `gorm:"primaryKey;column:id;type:int(11) unsigned;not null" json:"-"`
+	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
+	RealName   string `gorm:"column:real_name;type:varchar(32);not null;default:''" json:"realName"`                               // 用户实际名称
+	Mobile     string `gorm:"column:mobile;type:varchar(32);not null;default:''" json:"mobile"`                                    // 用户手机号
+	CreateTime time.Time `gorm:"column:create_time;type:datetime;default:CURRENT_TIMESTAMP" json:"createTime"`
+}
+
+// TableName get sql table name.获取数据库表名
+func (m *YbActivityRemind) TableName() string {
+	return "yb_activity_remind"
+}
+
+// YbActivityRemindColumns get sql column name.获取数据库列名
+var YbActivityRemindColumns = struct {
+	ID         string
+	ActivityID string
+	UserID     string
+	CompanyID  string
+	RealName   string
+	Mobile     string
+}{
+	ID:         "id",
+	ActivityID: "activity_id",
+	UserID:     "user_id",
+	CompanyID:  "company_id",
+	RealName:   "real_name",
+	Mobile:     "mobile",
+}

+ 2 - 0
routers/activity.go

@@ -11,5 +11,7 @@ func InitActivity(r *gin.Engine) {
 
 	{
 		rGroup.GET("/getPageList", activity.GetPageList)
+		rGroup.POST("/addRemind", activity.AddRemind)
+		rGroup.POST("/registerActivity", activity.RegisterActivity)
 	}
 }

+ 3 - 2
services/activity/activity.go

@@ -3,10 +3,11 @@ package activity
 import (
 	"fmt"
 	"hongze/hongze_yb/models/tables/yb_activity"
+	"hongze/hongze_yb/services/user"
 )
 
-func PageList(where map[string]interface{}, page int, limit int) (data []*yb_activity.YbActivity, err error) {
-	data, err = yb_activity.GetPageListByWhereMap(where, page, limit)
+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))
 	if err != nil {
 		fmt.Println("err:", err)
 		return

+ 30 - 0
services/activity/activity_register.go

@@ -0,0 +1,30 @@
+package activity
+
+import (
+	"errors"
+	"gorm.io/gorm"
+	"hongze/hongze_yb/models/tables/yb_activity_register"
+	"hongze/hongze_yb/services/user"
+	"time"
+)
+
+func CreateRegister(activityId int, userInfo *user.UserInfo) (registerInfo *yb_activity_register.YbActivityRegister, err error) {
+	// 是否已报名
+	userId := int(userInfo.UserID)
+	err = yb_activity_register.RegisterExist(userId, activityId)
+	if err != gorm.ErrRecordNotFound {
+		err = errors.New("您已报名该活动")
+		return
+	}
+	// 新增报名信息
+	registerInfo = &yb_activity_register.YbActivityRegister{
+		ActivityID:	uint32(activityId),
+		UserID: uint64(userId),
+		CompanyID: uint64(userInfo.CompanyID),
+		RealName: userInfo.RealName,
+		Mobile: userInfo.Mobile,
+		CreateTime: time.Now(),
+	}
+	err = registerInfo.Create()
+	return
+}

+ 30 - 0
services/activity/activity_remind.go

@@ -0,0 +1,30 @@
+package activity
+
+import (
+	"errors"
+	"gorm.io/gorm"
+	"hongze/hongze_yb/models/tables/yb_activity_remind"
+	"hongze/hongze_yb/services/user"
+	"time"
+)
+
+func CreateRemind(activityId int, userInfo *user.UserInfo) (remindInfo *yb_activity_remind.YbActivityRemind, err error) {
+	// 是否已有提醒
+	userId := int(userInfo.UserID)
+	err = yb_activity_remind.RemindExist(userId, activityId)
+	if err != gorm.ErrRecordNotFound {
+		err = errors.New("该活动已有提醒")
+		return
+	}
+	// 新增提醒
+	remindInfo = &yb_activity_remind.YbActivityRemind{
+		ActivityID:	uint32(activityId),
+		UserID: uint64(userId),
+		CompanyID: uint64(userInfo.CompanyID),
+		RealName: userInfo.RealName,
+		Mobile: userInfo.Mobile,
+		CreateTime: time.Now(),
+	}
+	err = remindInfo.Create()
+	return
+}

+ 8 - 0
services/user/user.go

@@ -305,3 +305,11 @@ func GetInfoByClaims(c *gin.Context) (userInfo *UserInfo) {
 	userInfo = claims.(*UserInfo)
 	return
 }
+
+// GetUserInfoByStruct 用户信息struct
+func GetUserInfoByStruct(c *gin.Context) (userInfo *UserInfo) {
+	wxUser, _ := c.Get("userInfo")
+	wxUserJson, _ := json.Marshal(wxUser)
+	_ = json.Unmarshal(wxUserJson, &userInfo)
+	return
+}