Browse Source

1.API-调整活动报名 2.API-活动详情 3.API-活动录音列表

hsun 3 years ago
parent
commit
d287c81b96

+ 17 - 4
controller/activity/activity.go

@@ -24,7 +24,7 @@ import (
 // @Param activity_type query int false "活动类型 1-线上会议 3-线下沙龙"
 // @Param page query int false "当前页码"
 // @Param limit query int false "每页数量"
-// @Success 200 {object} []yb_activity.ActivityList
+// @Success 200 {object} []yb_activity.ActivityItem
 // @Router /activity/getPageList [get]
 func GetPageList(c *gin.Context) {
 	where, order := _handleListQuery(c)
@@ -214,7 +214,14 @@ func GetActivityDetail(c *gin.Context) {
 		response.Fail("参数异常", c)
 		return
 	}
-	response.OkData("获取成功", "", c)
+	activityId, _ := strconv.Atoi(reqActivityId)
+	userInfo := user.GetInfoByClaims(c)
+	data, err := activity.GetActivityDetail(activityId, int(userInfo.UserID))
+	if err != nil {
+		response.Fail("未找到记录", c)
+		return
+	}
+	response.OkData("获取成功", data, c)
 }
 
 // GetActivityVoices 获取活动录音
@@ -234,5 +241,11 @@ func GetActivityVoices(c *gin.Context) {
 		response.Fail("参数异常", c)
 		return
 	}
-	response.OkData("获取成功", "", c)
-}
+	activityId, _ := strconv.Atoi(reqActivityId)
+	listData, err := activity.GetVoicesByActivity(activityId)
+	if err != nil {
+		response.Fail("录音获取失败", c)
+		return
+	}
+	response.OkData("获取成功", listData, c)
+}

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

@@ -7,32 +7,46 @@ import (
 	"time"
 )
 
-type ActivityList 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"`
+type ActivityItem struct {
+	ActivityID          int       	`json:"activityId"`
+	ActivityName        string    	`json:"activityName"`		// 活动名称
+	ActivityTypeName    string    	`json:"activityTypeName"`	// 活动类型名称
+	StartTime           time.Time 	`json:"startTime"`			// 活动开始时间
+	EndTime             time.Time 	`json:"endTime"`			// 活动结束时间
+	WeekString			string		`json:"weekString"`			// 周几
+	Speaker             string    	`json:"speaker"`			// 主讲人
+	HasRemind			int		  	`json:"hasRemind"`			// 是否已提醒
+	HasPlayBack			int		  	`json:"hasPlayBack"`		// 是否有回放
+	RegisterState		int		  	`json:"registerState"`		// 报名状态 0-取消报名 1-已报名
+	City                string		`json:"city"`				// 城市
 }
 
 type ActivityDetail struct {
-	
+	ActivityItem
+	MainlandTel			string		`json:"mainlandTel"`		// 大陆拨入
+	HongKongTel         string		`json:"hongKongTel"`		// 香港拨入
+	TaiwanTel           string		`json:"taiwanTel"`			// 台湾拨入
+	AmericaTel          string		`json:"americaTel"`			// 美国拨入
+	SingaporeTel        string		`json:"singaporeTel"`		// 新加坡拨入
+	ParticipationCode   string		`json:"participationCode"`	// 参会密码
+	LinkParticipants    string		`json:"linkParticipants"`	// 参会链接
+	IsLimitPeople       int8		`json:"isLimitPeople"`		// 是否限制人数 1是,0否
+	LimitPeopleNum      int			`json:"limitPeopleNum"`		// 限制人数数量
+	ReportLink          string		`json:"reportLink"`			// 报告链接
+	Address             string		`json:"address"`			// 活动地址
+	RegisteredNum		int			`json:"registeredNum"`		// 已报名人数
 }
 
 // GetPageListByWhereMap 分页获取列表-关联录音、提醒和报名信息
-func GetPageListByWhereMap(where map[string]interface{}, page, limit int, order string, userId int) (activities []*ActivityList, err error) {
+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",
-		"b.activity_voice_id AS has_play_back", "c.id AS has_remind", "d.id AS registered",
+		"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",
 	}
 	queryOrder := "start_time asc"
 	if order != "" {
@@ -42,7 +56,7 @@ func GetPageListByWhereMap(where map[string]interface{}, page, limit int, order
 		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).
+		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").
@@ -57,6 +71,20 @@ func GetOneById(activityId int) (activity *YbActivity, err error) {
 	return
 }
 
-func GetDetailById()  {
-	
+// 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
+	return
 }

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

@@ -4,12 +4,12 @@ import "hongze/hongze_yb/global"
 
 // 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
+	err = global.DEFAULT_MYSQL.Table("yb_activity_register").Where("user_id = ? AND activity_id = ? AND register_state = ?", userId, activityId, 1).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
+	err = global.DEFAULT_MYSQL.Table("yb_activity_register").Where("activity_id = ? AND register_state = ?", activityId, 1).Count(&count).Error
 	return
 }

+ 11 - 0
models/tables/yb_activity_register/update.go

@@ -0,0 +1,11 @@
+package yb_activity_register
+
+import "hongze/hongze_yb/global"
+
+// ModifyRegisterState 更新报名状态
+func ModifyRegisterState(userId, activityId, state int) (err error) {
+	err = global.DEFAULT_MYSQL.Model(YbActivityRegister{}).Select("RegisterState").Where("user_id = ? AND activity_id = ?", userId, activityId).Updates(YbActivityRegister{
+		RegisterState: uint8(state),
+	}).Error
+	return
+}

+ 34 - 21
models/tables/yb_activity_register/yb_activity_register.go

@@ -1,16 +1,21 @@
 package yb_activity_register
 
-import "time"
+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"`
+	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"`              // 创建时间
 }
 
 // TableName get sql table name.获取数据库表名
@@ -20,17 +25,25 @@ func (m *YbActivityRegister) TableName() string {
 
 // YbActivityRegisterColumns get sql column name.获取数据库列名
 var YbActivityRegisterColumns = struct {
-	ID         string
-	ActivityID string
-	UserID     string
-	CompanyID  string
-	RealName   string
-	Mobile     string
+	ID            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",
-	RealName:   "real_name",
-	Mobile:     "mobile",
-}
+	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",
+}

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

@@ -1,5 +1,9 @@
 package yb_activity_voice
 
-func GetVoicesByActivityId()  {
-	
+import "hongze/hongze_yb/global"
+
+// GetVoicesByActivityId 根据活动ID获取录音
+func GetVoicesByActivityId(activityId int) (voices []*YbActivityVoice, err error) {
+	err = global.DEFAULT_MYSQL.Table("yb_activity_voice").Where("activity_id", activityId).Scan(&voices).Error
+	return
 }

+ 32 - 1
services/activity/activity.go

@@ -1,17 +1,48 @@
 package activity
 
 import (
+	"errors"
 	"fmt"
 	"hongze/hongze_yb/models/tables/yb_activity"
+	"hongze/hongze_yb/models/tables/yb_activity_register"
 	"hongze/hongze_yb/services/user"
+	"log"
 )
 
+var WeekDay = [7]string{"周日", "周一", "周二", "周三", "周四", "周五", "周六"}
+
 // PageList 活动分页列表
-func PageList(where map[string]interface{}, page, limit int, order string, userInfo user.UserInfo) (data []*yb_activity.ActivityList, err error) {
+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))
 	if err != nil {
 		fmt.Println("err:", err)
 		return
 	}
+	if data != nil {
+		for _, item := range data {
+			item.WeekString = WeekDay[item.StartTime.Weekday()]
+		}
+	}
+	return
+}
+
+// GetActivityDetail 活动详情
+func GetActivityDetail(activityId, userId int) (detail *yb_activity.ActivityDetail, err error) {
+	detail, err = yb_activity.GetDetailByIdWithUserId(activityId, userId)
+	if err != nil {
+		log.Print(err.Error())
+		return
+	}
+	if detail == nil {
+		err = errors.New("记录不存在")
+		return
+	}
+	registeredNum, err := yb_activity_register.CountRegistedNumByActivityId(activityId)
+	if err != nil {
+		log.Print(err.Error())
+		return
+	}
+	detail.RegisteredNum = int(registeredNum)
+	detail.WeekString = WeekDay[detail.StartTime.Weekday()]
 	return
 }

+ 43 - 10
services/activity/activity_register.go

@@ -3,6 +3,8 @@ package activity
 import (
 	"errors"
 	"gorm.io/gorm"
+	company2 "hongze/hongze_yb/models/tables/company"
+	"hongze/hongze_yb/models/tables/company_product"
 	"hongze/hongze_yb/models/tables/yb_activity"
 	"hongze/hongze_yb/models/tables/yb_activity_register"
 	"hongze/hongze_yb/services/user"
@@ -18,14 +20,39 @@ func CreateRegister(activityId int, userInfo user.UserInfo) (err error) {
 		err = errors.New(msg)
 		return
 	}
+	// 客户名称
+	company, err := company2.GetByCompanyId(userInfo.CompanyID)
+	if err != nil {
+		log.Print(err.Error())
+		err = errors.New("报名失败")
+		return
+	}
+	companyName := ""
+	if company != nil {
+		companyName = company.CompanyName
+	}
+	// 销售名称
+	companyProduct, err := company_product.GetByCompany2ProductId(int64(userInfo.CompanyID), 1)
+	if err != nil {
+		log.Print(err.Error())
+		err = errors.New("报名失败")
+		return
+	}
+	sellerName := ""
+	if companyProduct != nil {
+		sellerName = companyProduct.SellerName
+	}
 	// 新增报名信息
 	registerInfo := &yb_activity_register.YbActivityRegister{
-		ActivityID: uint32(activityId),
-		UserID:     uint64(userId),
-		CompanyID:  uint64(userInfo.CompanyID),
-		RealName:   userInfo.RealName,
-		Mobile:     userInfo.Mobile,
-		CreateTime: time.Now(),
+		ActivityID: 	uint32(activityId),
+		UserID:     	uint64(userId),
+		CompanyID:  	uint64(userInfo.CompanyID),
+		CompanyName: 	companyName,
+		SellerName: 	sellerName,
+		RealName:   	userInfo.RealName,
+		Mobile:     	userInfo.Mobile,
+		RegisterState:	1,
+		CreateTime:		time.Now(),
 	}
 	err = registerInfo.Create()
 	if err != nil {
@@ -42,8 +69,13 @@ func checkRegisterOk(userId, activityId int) (ok bool, msg string) {
 		msg = "活动信息有误"
 		return
 	}
-	_, err = yb_activity_register.RegisterExist(userId, activityId)
-	if err != gorm.ErrRecordNotFound {
+	registerInfo, err := yb_activity_register.RegisterExist(userId, activityId)
+	if err != nil && err != gorm.ErrRecordNotFound {
+		log.Print(err.Error())
+		msg = "报名失败"
+		return
+	}
+	if registerInfo != nil && registerInfo.RegisterState == 1 {
 		msg = "请勿重复报名"
 		return
 	}
@@ -63,6 +95,7 @@ func checkRegisterOk(userId, activityId int) (ok bool, msg string) {
 			return
 		}
 	}
+	ok = true
 	return
 }
 
@@ -74,12 +107,12 @@ func CancelRegister(activityId int, userInfo user.UserInfo) (err error) {
 		err = errors.New("活动信息有误")
 		return
 	}
-	registerInfo, err := yb_activity_register.RegisterExist(userId, activityId)
+	_, err = yb_activity_register.RegisterExist(userId, activityId)
 	if err == gorm.ErrRecordNotFound {
 		err = errors.New("报名信息有误")
 		return
 	}
-	err = yb_activity_register.Delete(registerInfo)
+	err = yb_activity_register.ModifyRegisterState(userId, activityId, 0)
 	if err != nil {
 		log.Print(err.Error())
 		err = errors.New("取消报名失败")

+ 16 - 0
services/activity/activity_voice.go

@@ -0,0 +1,16 @@
+package activity
+
+import (
+	"hongze/hongze_yb/models/tables/yb_activity_voice"
+	"log"
+)
+
+// GetVoicesByActivity 获取活动录音列表
+func GetVoicesByActivity(activityId int) (data []*yb_activity_voice.YbActivityVoice, err error) {
+	data, err = yb_activity_voice.GetVoicesByActivityId(activityId)
+	if err != nil {
+		log.Print(err.Error())
+		return
+	}
+	return
+}