Browse Source

fix 1.API-活动列表优化 2.API-活动权限验证

hsun 3 years ago
parent
commit
c7659c121b

+ 69 - 39
controller/activity/activity.go

@@ -18,19 +18,20 @@ import (
 // @Param Authorization	header string true "Bearer 31a165baebe6dec616b1f8f3207b4273"
 // @Accept  json
 // @Product json
-// @Param activity_name query string false "活动名称"
-// @Param activity_type_name query string false "活动类别"
+// @Param title query string 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.ActivityItem
+// @failure 400 {string} string "活动获取失败"
 // @Router /activity/getPageList [get]
 func GetPageList(c *gin.Context) {
-	where, order := _handleListQuery(c)
-	page, limit := _handlePageParam(c)
+	page, _ := strconv.Atoi(c.Query("page"))
+	limit, _ := strconv.Atoi(c.Query("limit"))
+	condition, pars, order := _handleListQuery(c)
 	userInfo := user.GetInfoByClaims(c)
-	listData, err := activity.PageList(where, page, limit, order, userInfo)
+	listData, err := activity.PageList(condition, pars, page, limit, order, userInfo)
 	if err != nil {
 		response.Fail("活动获取失败", c)
 		return
@@ -38,16 +39,15 @@ func GetPageList(c *gin.Context) {
 	response.OkData("获取成功", listData, c)
 }
 
-func _handleListQuery(c *gin.Context) (map[string]interface{}, string) {
-	where := make(map[string]interface{})
-	where["is_delete ="] = 0
-	title := c.DefaultQuery("activity_name", "")
-	if title != "" {
-		where["activity_name like"] = "%" + c.Query("activity_name") + "%"
-	}
-	typeName := c.DefaultQuery("activity_type_name", "")
-	if typeName != "" {
-		where["activity_type_name like"] = "%" + c.Query("activity_type_name") + "%"
+func _handleListQuery(c *gin.Context) (string, []interface{}, string) {
+	condition := "is_delete = 0"
+	pars := make([]interface{}, 0)
+	// 活动类别/标题
+	reqTitle := c.DefaultQuery("title", "")
+	if reqTitle != "" {
+		condition += ` AND (activity_type_name LIKE ? OR activity_name LIKE ?)`
+		pars = append(pars, "%" + reqTitle + "%")
+		pars = append(pars, "%" + reqTitle + "%")
 	}
 	order := ""
 	reqState := c.DefaultQuery("active_state", "0")
@@ -65,28 +65,27 @@ func _handleListQuery(c *gin.Context) (map[string]interface{}, string) {
 		switch state {
 		case 1:
 			// 时间在本周内且未开始
-			where["start_time >="] = queryStart
-			where["end_time <"] = weekEnd
+			condition += ` AND start_time >= ?`
+			pars = append(pars, queryStart)
+			condition += ` AND end_time < ?`
+			pars = append(pars, weekEnd)
 		case 2:
-			where["start_time <="] = nowTime
-			where["end_time >"] = nowTime
+			condition += ` AND start_time <= ?`
+			pars = append(pars, nowTime)
+			condition += ` AND end_time > ?`
+			pars = append(pars, nowTime)
 		case 3:
-			where["end_time <"] = nowTime
-			order = "start_time desc"
+			condition += ` AND end_time < ?`
+			pars = append(pars, nowTime)
 		}
 	}
 	reqType := c.DefaultQuery("activity_type", "0")
 	if reqType != "0" {
 		activityType, _ := strconv.Atoi(reqType)
-		where["activity_type_id ="] = activityType
+		condition += ` AND activity_type_id = ?`
+		pars = append(pars, activityType)
 	}
-	return where, order
-}
-
-func _handlePageParam(c *gin.Context) (page, limit int) {
-	page, _ = strconv.Atoi(c.Query("page"))
-	limit, _ = strconv.Atoi(c.Query("limit"))
-	return
+	return condition, pars, order
 }
 
 // AddRemind 添加提醒
@@ -98,7 +97,8 @@ func _handlePageParam(c *gin.Context) (page, limit int) {
 // @Accept  json
 // @Product json
 // @Param activity_id query int true "活动ID"
-// @Success 200 ""
+// @Success 200 {string} string "操作成功"
+// @failure 400 {string} string "操作失败"
 // @Router /activity/addRemind [post]
 func AddRemind(c *gin.Context) {
 	reqActivityId := c.DefaultPostForm("activity_id", "0")
@@ -108,7 +108,12 @@ func AddRemind(c *gin.Context) {
 	}
 	activityId, _ := strconv.Atoi(reqActivityId)
 	userInfo := user.GetInfoByClaims(c)
-	err := activity.CreateRemind(activityId, userInfo)
+	ok, permissionCheckInfo, err := activity.CheckActivityPermission(userInfo, activityId)
+	if !ok {
+		response.AuthError(permissionCheckInfo, "暂无权限", c)
+		return
+	}
+	err = activity.CreateRemind(activityId, userInfo)
 	if err != nil {
 		response.Fail(err.Error(), c)
 		return
@@ -125,7 +130,8 @@ func AddRemind(c *gin.Context) {
 // @Accept  json
 // @Product json
 // @Param activity_id query int true "活动ID"
-// @Success 200 ""
+// @Success 200 {string} string "操作成功"
+// @failure 400 {string} string "操作失败"
 // @Router /activity/cancelRemind [post]
 func CancelRemind(c *gin.Context) {
 	reqActivityId := c.DefaultPostForm("activity_id", "0")
@@ -135,7 +141,12 @@ func CancelRemind(c *gin.Context) {
 	}
 	activityId, _ := strconv.Atoi(reqActivityId)
 	userInfo := user.GetInfoByClaims(c)
-	err := activity.CancelRemind(activityId, userInfo)
+	ok, permissionCheckInfo, err := activity.CheckActivityPermission(userInfo, activityId)
+	if !ok {
+		response.AuthError(permissionCheckInfo, "暂无权限", c)
+		return
+	}
+	err = activity.CancelRemind(activityId, userInfo)
 	if err != nil {
 		response.Fail(err.Error(), c)
 		return
@@ -152,7 +163,8 @@ func CancelRemind(c *gin.Context) {
 // @Accept  json
 // @Product json
 // @Param activity_id query int true "活动ID"
-// @Success 200 ""
+// @Success 200 {string} string "操作成功"
+// @failure 400 {string} string "操作失败"
 // @Router /activity/registerActivity [post]
 func RegisterActivity(c *gin.Context) {
 	reqActivityId := c.DefaultPostForm("activity_id", "0")
@@ -162,7 +174,12 @@ func RegisterActivity(c *gin.Context) {
 	}
 	activityId, _ := strconv.Atoi(reqActivityId)
 	userInfo := user.GetInfoByClaims(c)
-	err := activity.CreateRegister(activityId, userInfo)
+	ok, permissionCheckInfo, err := activity.CheckActivityPermission(userInfo, activityId)
+	if !ok {
+		response.AuthError(permissionCheckInfo, "暂无权限", c)
+		return
+	}
+	err = activity.CreateRegister(activityId, userInfo)
 	if err != nil {
 		response.Fail(err.Error(), c)
 		return
@@ -179,7 +196,8 @@ func RegisterActivity(c *gin.Context) {
 // @Accept  json
 // @Product json
 // @Param activity_id query int true "活动ID"
-// @Success 200 ""
+// @Success 200 {string} string "操作成功"
+// @failure 400 {string} string "操作失败"
 // @Router /activity/cancelRegister [post]
 func CancelRegister(c *gin.Context) {
 	reqActivityId := c.DefaultPostForm("activity_id", "0")
@@ -189,7 +207,12 @@ func CancelRegister(c *gin.Context) {
 	}
 	activityId, _ := strconv.Atoi(reqActivityId)
 	userInfo := user.GetInfoByClaims(c)
-	err := activity.CancelRegister(activityId, userInfo)
+	ok, permissionCheckInfo, err := activity.CheckActivityPermission(userInfo, activityId)
+	if !ok {
+		response.AuthError(permissionCheckInfo, "暂无权限", c)
+		return
+	}
+	err = activity.CancelRegister(activityId, userInfo)
 	if err != nil {
 		response.Fail(err.Error(), c)
 		return
@@ -206,7 +229,8 @@ func CancelRegister(c *gin.Context) {
 // @Accept  json
 // @Product json
 // @Param activity_id query int true "活动ID"
-// @Success 200 ""
+// @Success 200 {object} yb_activity.ActivityDetail
+// @failure 400 {string} string "获取失败"
 // @Router /activity/getActivityDetail [get]
 func GetActivityDetail(c *gin.Context) {
 	reqActivityId := c.DefaultQuery("activity_id", "0")
@@ -216,6 +240,11 @@ func GetActivityDetail(c *gin.Context) {
 	}
 	activityId, _ := strconv.Atoi(reqActivityId)
 	userInfo := user.GetInfoByClaims(c)
+	ok, permissionCheckInfo, err := activity.CheckActivityPermission(userInfo, activityId)
+	if !ok {
+		response.AuthError(permissionCheckInfo, "暂无权限", c)
+		return
+	}
 	data, err := activity.GetActivityDetail(activityId, int(userInfo.UserID))
 	if err != nil {
 		response.Fail("未找到记录", c)
@@ -233,7 +262,8 @@ func GetActivityDetail(c *gin.Context) {
 // @Accept  json
 // @Product json
 // @Param activity_id query int true "活动ID"
-// @Success 200 ""
+// @Success 200 {object} []yb_activity_voice.YbActivityVoice
+// @failure 400 {string} string "获取失败"
 // @Router /activity/getActivityVoices [get]
 func GetActivityVoices(c *gin.Context) {
 	reqActivityId := c.DefaultQuery("activity_id", "0")

+ 17 - 43
models/tables/yb_activity/query.go

@@ -1,9 +1,7 @@
 package yb_activity
 
 import (
-	"errors"
 	"hongze/hongze_yb/global"
-	"hongze/hongze_yb/utils"
 	"time"
 )
 
@@ -13,12 +11,12 @@ type ActivityItem struct {
 	ActivityTypeName    string    	`json:"activityTypeName"`	// 活动类型名称
 	StartTime           time.Time 	`json:"startTime"`			// 活动开始时间
 	EndTime             time.Time 	`json:"endTime"`			// 活动结束时间
-	WeekString			string		`json:"weekString"`			// 周几
 	Speaker             string    	`json:"speaker"`			// 主讲人
+	City                string		`json:"city"`				// 城市
+	WeekString			string		`json:"weekString"`			// 周几
 	HasRemind			int		  	`json:"hasRemind"`			// 是否已提醒
 	HasPlayBack			int		  	`json:"hasPlayBack"`		// 是否有回放
 	RegisterState		int		  	`json:"registerState"`		// 报名状态 0-取消报名 1-已报名
-	City                string		`json:"city"`				// 城市
 }
 
 type ActivityDetail struct {
@@ -37,54 +35,30 @@ type ActivityDetail struct {
 	RegisteredNum		int			`json:"registeredNum"`		// 已报名人数
 }
 
-// GetPageListByWhereMap 分页获取列表-关联录音、提醒和报名信息
-func GetPageListByWhereMap(where map[string]interface{}, page, limit int, order string, userId int) (activities []*ActivityItem, err error) {
-	condition, values, buildErr := utils.WhereBuild(where)
-	if buildErr != nil {
-		err = errors.New("系统异常,生成查询语句失败")
-		return
-	}
-	fields := []string{
-		"a.activity_id", "a.activity_name", "a.activity_type_name", "a.start_time", "a.end_time", "a.speaker", "a.city",
-		"b.activity_voice_id AS has_play_back", "c.id AS has_remind", "d.register_state",
-	}
+// GetPageListByWhere 分页获取活动列表
+func GetPageListByWhere(condition string, pars []interface{}, page, limit int, order string, userId int) (activities []ActivityItem, err error) {
+	fields := []string{"activity_id", "activity_name", "activity_type_name", "start_time", "end_time", "speaker", "city"}
 	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 = ? AND d.register_state = ?", userId, 1).
-		Where(condition, values...).
-		Order(queryOrder).
-		Group("activity_id").
-		Limit(limit).Offset((page - 1) * limit).
-		Scan(&activities).Error
+	err = global.DEFAULT_MYSQL.Model(YbActivity{}).Select(fields).Where(condition, pars...).Order(queryOrder).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
+// GetDetailById 根据主键获取详情
+func GetDetailById(activityId int) (activity *ActivityDetail, err error) {
+	fields := []string{
+		"activity_id", "activity_name", "activity_type_name", "start_time", "end_time", "speaker", "city",
+		"mainland_tel", "hong_kong_tel", "taiwan_tel", "america_tel", "singapore_tel", "participation_code",
+		"link_participants", "is_limit_people", "limit_people_num", "report_link", "address",
+	}
+	err = global.DEFAULT_MYSQL.Model(YbActivity{}).Select(fields).Where("activity_id", activityId).Scan(&activity).Error
 	return
 }
 
-// GetDetailByIdWithUserId 根据主键获取活动详情-userId关联信息
-func GetDetailByIdWithUserId(activityId, userId int) (detail *ActivityDetail, err error) {
-	fields := []string{
-		"a.activity_id", "a.activity_name", "a.activity_type_name", "a.start_time", "a.end_time", "a.speaker", "a.city",
-		"a.mainland_tel", "a.hong_kong_tel", "a.taiwan_tel", "a.america_tel", "a.singapore_tel", "a.participation_code",
-		"a.link_participants", "a.is_limit_people", "a.limit_people_num", "a.report_link", "a.address",
-		"b.id AS has_remind", "c.register_state",
-	}
-	err = global.DEFAULT_MYSQL.Table("yb_activity AS a").
-		Select(fields).
-		Joins("LEFT JOIN yb_activity_remind AS b ON a.activity_id = b.activity_id AND b.user_id = ?", userId).
-		Joins("LEFT JOIN yb_activity_register AS c ON a.activity_id = c.activity_id AND c.user_id = ? AND c.register_state = ?", userId, 1).
-		Where("a.activity_id", activityId).
-		Group("activity_id").
-		Scan(&detail).Error
+// GetOneById 根据主键获取活动
+func GetOneById(activityId int) (activity *YbActivity, err error) {
+	err = global.DEFAULT_MYSQL.Where("activity_id = ?", activityId).First(&activity).Error
 	return
 }

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

@@ -2,6 +2,13 @@ package yb_activity_register
 
 import "hongze/hongze_yb/global"
 
+type UserRegister struct {
+	ActivityRegisterID	int	`json:"activityRegisterId"`
+	UserId				int	`json:"userId"`
+	ActivityId			int	`json:"activityId"`
+	RegisterState		int	`json:"registerState"`
+}
+
 // 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 = ? AND register_state = ?", userId, activityId, 1).First(&register).Error
@@ -12,4 +19,11 @@ func RegisterExist(userId, activityId int) (register *YbActivityRegister, err er
 func CountRegistedNumByActivityId(activityId int) (count int64, err error) {
 	err = global.DEFAULT_MYSQL.Table("yb_activity_register").Where("activity_id = ? AND register_state = ?", activityId, 1).Count(&count).Error
 	return
+}
+
+// GetRegistersByUserIdAndActivityIds 根据用户ID和活动IDs获取报名信息
+func GetRegistersByUserIdAndActivityIds(userId int, activityIds []int) (registers []UserRegister, err error) {
+	fields := []string{"activity_register_id", "user_id", "activity_id", "register_state"}
+	err = global.DEFAULT_MYSQL.Model(YbActivityRegister{}).Select(fields).Where("user_id = ? AND register_state = ? AND activity_id IN (?)", userId, 1, activityIds).Scan(&registers).Error
+	return
 }

+ 30 - 30
models/tables/yb_activity_register/yb_activity_register.go

@@ -6,16 +6,16 @@ import (
 
 // 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
-	CompanyName   string    `gorm:"column:company_name;type:varchar(100);not null;default:''" json:"companyName"`                        // 客户名称
-	SellerName    string    `gorm:"column:seller_name;type:varchar(50);not null;default:''" json:"sellerName"`                           // 销售名称
-	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"`                                    // 用户手机号
-	RegisterState uint8     `gorm:"column:register_state;type:tinyint(4) unsigned;not null;default:0" json:"registerState"`              // 报名状态 0-取消报名 1-已报名
-	CreateTime    time.Time `gorm:"column:create_time;type:timestamp;not null;default:CURRENT_TIMESTAMP" json:"createTime"`              // 创建时间
+	ActivityRegisterID uint32    `gorm:"primaryKey;column:activity_register_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
+	CompanyName        string    `gorm:"column:company_name;type:varchar(100);not null;default:''" json:"companyName"`                        // 客户名称
+	SellerName         string    `gorm:"column:seller_name;type:varchar(50);not null;default:''" json:"sellerName"`                           // 销售名称
+	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"`                                    // 用户手机号
+	RegisterState      uint8     `gorm:"column:register_state;type:tinyint(4) unsigned;not null;default:0" json:"registerState"`              // 报名状态 0-取消报名 1-已报名
+	CreateTime         time.Time `gorm:"column:create_time;type:timestamp;not null;default:CURRENT_TIMESTAMP" json:"createTime"`              // 创建时间
 }
 
 // TableName get sql table name.获取数据库表名
@@ -25,25 +25,25 @@ func (m *YbActivityRegister) TableName() string {
 
 // YbActivityRegisterColumns get sql column name.获取数据库列名
 var YbActivityRegisterColumns = struct {
-	ID            string
-	ActivityID    string
-	UserID        string
-	CompanyID     string
-	CompanyName   string
-	SellerName    string
-	RealName      string
-	Mobile        string
-	RegisterState string
-	CreateTime    string
+	ActivityRegisterID string
+	ActivityID         string
+	UserID             string
+	CompanyID          string
+	CompanyName        string
+	SellerName         string
+	RealName           string
+	Mobile             string
+	RegisterState      string
+	CreateTime         string
 }{
-	ID:            "id",
-	ActivityID:    "activity_id",
-	UserID:        "user_id",
-	CompanyID:     "company_id",
-	CompanyName:   "company_name",
-	SellerName:    "seller_name",
-	RealName:      "real_name",
-	Mobile:        "mobile",
-	RegisterState: "register_state",
-	CreateTime:    "create_time",
+	ActivityRegisterID: "activity_register_id",
+	ActivityID:         "activity_id",
+	UserID:             "user_id",
+	CompanyID:          "company_id",
+	CompanyName:        "company_name",
+	SellerName:         "seller_name",
+	RealName:           "real_name",
+	Mobile:             "mobile",
+	RegisterState:      "register_state",
+	CreateTime:         "create_time",
 }

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

@@ -2,8 +2,21 @@ package yb_activity_remind
 
 import "hongze/hongze_yb/global"
 
+type UserRemind struct {
+	ActivityRemindID	int	`json:"activityRemindId"`
+	UserId				int	`json:"userId"`
+	ActivityId			int	`json:"activityId"`
+}
+
 // 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
+}
+
+// GetRemindsByUserIdAndActivityIds 根据用户ID和活动IDs获取提醒信息
+func GetRemindsByUserIdAndActivityIds(userId int, activityIds []int) (reminds []UserRemind, err error) {
+	fields := []string{"activity_remind_id", "user_id", "activity_id"}
+	err = global.DEFAULT_MYSQL.Model(YbActivityRemind{}).Select(fields).Where("user_id = ? AND activity_id IN (?)", userId, activityIds).Scan(&reminds).Error
+	return
 }

+ 21 - 19
models/tables/yb_activity_remind/yb_activity_remind.go

@@ -4,13 +4,13 @@ import "time"
 
 // YbActivityRemind 活动提醒表
 type YbActivityRemind struct {
-	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
-	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"`
+	ActivityRemindID uint32    `gorm:"primaryKey;column:activity_remind_id;type:int(11) unsigned;not null" json:"activityRemindId"`
+	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:timestamp;not null;default:CURRENT_TIMESTAMP" json:"createTime"`              // 创建时间
 }
 
 // TableName get sql table name.获取数据库表名
@@ -20,17 +20,19 @@ func (m *YbActivityRemind) TableName() string {
 
 // YbActivityRemindColumns get sql column name.获取数据库列名
 var YbActivityRemindColumns = struct {
-	ID         string
-	ActivityID string
-	UserID     string
-	CompanyID  string
-	RealName   string
-	Mobile     string
+	ActivityRemindID string
+	ActivityID       string
+	UserID           string
+	CompanyID        string
+	RealName         string
+	Mobile           string
+	CreateTime       string
 }{
-	ID:         "id",
-	ActivityID: "activity_id",
-	UserID:     "user_id",
-	CompanyID:  "company_id",
-	RealName:   "real_name",
-	Mobile:     "mobile",
+	ActivityRemindID: "activity_remind_id",
+	ActivityID:       "activity_id",
+	UserID:           "user_id",
+	CompanyID:        "company_id",
+	RealName:         "real_name",
+	Mobile:           "mobile",
+	CreateTime:       "create_time",
 }

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

@@ -6,4 +6,10 @@ import "hongze/hongze_yb/global"
 func GetVoicesByActivityId(activityId int) (voices []*YbActivityVoice, err error) {
 	err = global.DEFAULT_MYSQL.Table("yb_activity_voice").Where("activity_id", activityId).Scan(&voices).Error
 	return
+}
+
+// GetVoicesByActivityIds 根据活动IDs获取录音
+func GetVoicesByActivityIds(activityIds []int) (voices []*YbActivityVoice, err error) {
+	err = global.DEFAULT_MYSQL.Model(YbActivityVoice{}).Where("activity_id IN (?)", activityIds).Scan(&voices).Error
+	return
 }

+ 98 - 11
services/activity/activity.go

@@ -1,10 +1,13 @@
 package activity
 
 import (
-	"errors"
 	"fmt"
+	"gorm.io/gorm"
 	"hongze/hongze_yb/models/tables/yb_activity"
 	"hongze/hongze_yb/models/tables/yb_activity_register"
+	"hongze/hongze_yb/models/tables/yb_activity_remind"
+	"hongze/hongze_yb/models/tables/yb_activity_voice"
+	"hongze/hongze_yb/services/company"
 	"hongze/hongze_yb/services/user"
 	"log"
 )
@@ -12,15 +15,75 @@ import (
 var WeekDay = [7]string{"周日", "周一", "周二", "周三", "周四", "周五", "周六"}
 
 // PageList 活动分页列表
-func PageList(where map[string]interface{}, page, limit int, order string, userInfo user.UserInfo) (data []*yb_activity.ActivityItem, err error) {
-	data, err = yb_activity.GetPageListByWhereMap(where, page, limit, order, int(userInfo.UserID))
+func PageList(condition string, pars []interface{}, page, limit int, order string, userInfo user.UserInfo) (list []yb_activity.ActivityItem, err error) {
+	activities, err := yb_activity.GetPageListByWhere(condition, pars, page, limit, order, int(userInfo.UserID))
 	if err != nil {
-		fmt.Println("err:", err)
+		log.Print(err.Error())
 		return
 	}
-	if data != nil {
-		for _, item := range data {
-			item.WeekString = WeekDay[item.StartTime.Weekday()]
+	if activities != nil {
+		var activityIds []int
+		for _, item := range activities {
+			activityIds = append(activityIds, item.ActivityID)
+		}
+
+		// 录音
+		voices, queryErr := yb_activity_voice.GetVoicesByActivityIds(activityIds)
+		if queryErr != nil {
+			log.Print(queryErr.Error())
+			return
+		}
+		voiceMap := make(map[int]int, 0)
+		for _, voice := range voices{
+			voiceMap[int(voice.ActivityID)] = 1
+		}
+		fmt.Println("录音Map", voiceMap)
+		// 提醒
+		reminds, queryErr := yb_activity_remind.GetRemindsByUserIdAndActivityIds(int(userInfo.UserID), activityIds)
+		if queryErr != nil {
+			log.Print(queryErr.Error())
+			return
+		}
+		remindMap := make(map[int]int, 0)
+		for _, remind := range reminds{
+			remindMap[remind.ActivityId] = 1
+		}
+		// 报名
+		registers, queryErr := yb_activity_register.GetRegistersByUserIdAndActivityIds(int(userInfo.UserID), activityIds)
+		if queryErr != nil {
+			log.Print(queryErr.Error())
+			return
+		}
+		registerMap := make(map[int]int, 0)
+		for _, register := range registers{
+			if register.RegisterState == 1 {
+				registerMap[register.ActivityId] = 1
+			}
+		}
+
+		var temp yb_activity.ActivityItem
+		for _, activity := range activities {
+			temp = activity
+			temp.WeekString = WeekDay[activity.StartTime.Weekday()]
+			// 是否有回放
+			tempActivity := activity
+			fmt.Println("活动ID", tempActivity.ActivityID)
+			_, ok := voiceMap[tempActivity.ActivityID]
+			if ok {
+				fmt.Println("录音OK", ok)
+				temp.HasPlayBack = 1
+			}
+			// 是否有提醒
+			_, ok = remindMap[tempActivity.ActivityID]
+			if ok {
+				temp.HasRemind = 1
+			}
+			// 是否已报名
+			_, ok = registerMap[tempActivity.ActivityID]
+			if ok {
+				temp.RegisterState = 1
+			}
+			list = append(list, temp)
 		}
 	}
 	return
@@ -28,13 +91,13 @@ func PageList(where map[string]interface{}, page, limit int, order string, userI
 
 // GetActivityDetail 活动详情
 func GetActivityDetail(activityId, userId int) (detail *yb_activity.ActivityDetail, err error) {
-	detail, err = yb_activity.GetDetailByIdWithUserId(activityId, userId)
+	detail, err = yb_activity.GetDetailById(activityId)
 	if err != nil {
-		log.Print(err.Error())
-		return
+		if err == gorm.ErrRecordNotFound {
+			return
+		}
 	}
 	if detail == nil {
-		err = errors.New("记录不存在")
 		return
 	}
 	registeredNum, err := yb_activity_register.CountRegistedNumByActivityId(activityId)
@@ -44,5 +107,29 @@ func GetActivityDetail(activityId, userId int) (detail *yb_activity.ActivityDeta
 	}
 	detail.RegisteredNum = int(registeredNum)
 	detail.WeekString = WeekDay[detail.StartTime.Weekday()]
+	_, remindErr := yb_activity_remind.RemindExist(userId, activityId)
+	if remindErr != gorm.ErrRecordNotFound {
+		detail.HasRemind = 1
+	}
+	_, registerErr := yb_activity_register.RegisterExist(userId, activityId)
+	if registerErr != gorm.ErrRecordNotFound {
+		detail.RegisterState = 1
+	}
+	return
+}
+
+// 验证活动参与权限
+func CheckActivityPermission(userInfo user.UserInfo, activityId int) (ok bool, permissionCheckInfo company.PermissionCheckInfo, err error) {
+	companyId := userInfo.CompanyID
+	activity, err := yb_activity.GetOneById(activityId)
+	if err != nil {
+		if err == gorm.ErrRecordNotFound {
+			return
+		}
+	}
+	if activity == nil {
+		return
+	}
+	ok, permissionCheckInfo, err = company.CheckPermissionByFicc(companyId, activity.ChartPermissionID)
 	return
 }