You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
4.9 KiB
189 lines
4.9 KiB
package activity_service
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/ouxuanserver/osmanthuswine/src/core"
|
|
"hudongzhuanjia/models"
|
|
"hudongzhuanjia/utils/define"
|
|
)
|
|
|
|
func GetActivitiesByCustomerId(cid int64) ([]*models.Activity, error) {
|
|
// 登陆限制
|
|
// 获取用户拥有的activity
|
|
activities := make([]*models.Activity, 0)
|
|
err := core.GetXormAuto().Where("is_delete=0 and customer_id=?", cid).
|
|
Desc("created_at").Find(&activities)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
// customer -> activity -> activity module service -> module service history -> module service
|
|
// customer -> activity -> 某次具体的活动(已经启动了的)
|
|
aids := make([]int64, 0)
|
|
for _, activity := range activities {
|
|
aids = append(aids, activity.Id)
|
|
}
|
|
|
|
areaStores := make([]*models.AreaStore, 0)
|
|
err = core.GetXormAuto().Where("is_delete=0").In("activity_id", aids).Find(&areaStores)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for j := range activities {
|
|
for i := range areaStores {
|
|
if areaStores[i].ActivityId == activities[j].Id {
|
|
activities[j].AreaStores = append(activities[j].AreaStores, areaStores[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
services := make([]*models.ActivityModuleService, 0)
|
|
err = core.GetXormAuto().Where("is_delete=0 and service_module_status=?", "开启").
|
|
In("activity_id", aids).Find(&services)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
hids := make([]int64, 0)
|
|
for _, service := range services {
|
|
hids = append(hids, service.ServiceModuleHistoryId)
|
|
}
|
|
|
|
histories := make([]*models.ModuleServiceHistory, 0)
|
|
err = core.GetXormAuto().Where("is_delete=0").In("id", hids).Find(&histories)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for j := range services {
|
|
for i := range histories {
|
|
if histories[i].Id == services[j].ServiceModuleHistoryId {
|
|
services[j].ServiceModuleName = histories[i].Name
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
for j := range activities {
|
|
for i := range services {
|
|
if activities[j].Id == services[i].ActivityId {
|
|
activities[j].Services = append(activities[j].Services, services[i])
|
|
}
|
|
}
|
|
}
|
|
return activities, nil
|
|
}
|
|
|
|
func GetActivityById(id int64) (*models.Activity, bool, error) {
|
|
activity := new(models.Activity)
|
|
exist, err := models.Get(activity, id)
|
|
if err != nil || !exist {
|
|
return nil, exist, err
|
|
}
|
|
services := make([]*models.ActivityModuleService, 0)
|
|
err = core.GetXormAuto().Where("is_delete=0 and activity_id=? and service_module_status=?", id, define.StatusOpen).
|
|
Find(&services)
|
|
if err != nil {
|
|
return nil, false, err
|
|
}
|
|
|
|
hids := make([]int64, 0)
|
|
for _, service := range services {
|
|
hids = append(hids, service.ServiceModuleHistoryId)
|
|
}
|
|
histories := make([]*models.ModuleServiceHistory, 0)
|
|
err = core.GetXormAuto().Where("is_delete=0").In("id", hids).Find(&histories)
|
|
if err != nil {
|
|
return nil, false, err
|
|
}
|
|
|
|
for j := range services {
|
|
for i := range histories {
|
|
if histories[i].Id == services[j].ServiceModuleHistoryId {
|
|
services[j].ServiceModuleName = histories[i].Name
|
|
break
|
|
}
|
|
}
|
|
}
|
|
activity.Services = services
|
|
|
|
// 增加对上墙 霸屏 弹幕 打赏
|
|
mServer := new(models.MsgWallServer)
|
|
exist, err = mServer.GetByActivityId(id)
|
|
if err != nil {
|
|
return nil, false, err
|
|
}
|
|
if !exist {
|
|
activity.UpperWallStatus = define.StatusClose
|
|
} else {
|
|
activity.UpperWallStatus = mServer.UpWallStatus
|
|
}
|
|
|
|
rServer := new(models.RewardServer)
|
|
exist, err = rServer.GetByActivityId(id)
|
|
if err != nil {
|
|
return nil, false, err
|
|
}
|
|
if !exist {
|
|
activity.RewardStatus = define.StatusClose
|
|
} else {
|
|
activity.RewardStatus = rServer.ServerStart
|
|
}
|
|
|
|
dServer := new(models.DanMuServer)
|
|
exist, err = dServer.GetByActivityId(id)
|
|
if err != nil {
|
|
return nil, false, err
|
|
}
|
|
if !exist {
|
|
activity.BarrageStatus = define.StatusClose
|
|
} else {
|
|
activity.BarrageStatus = dServer.DanmuSwitch
|
|
}
|
|
|
|
bServer := new(models.BullyScreenServer)
|
|
exist, err = bServer.GetByActivityId(id)
|
|
if err != nil {
|
|
return nil, false, err
|
|
}
|
|
if !exist {
|
|
activity.BullyScreenStatus = define.StatusClose
|
|
} else {
|
|
activity.BullyScreenStatus = bServer.Start
|
|
}
|
|
return activity, true, nil
|
|
}
|
|
|
|
func ExistModuleByActivityId(aid int64, module string) (bool, error) {
|
|
switch module {
|
|
case define.MODULE_TUGWAR: // 拔河
|
|
bahe := new(models.TugOfWar)
|
|
return bahe.GetCurrent(aid)
|
|
case define.MODULE_ORDER: //下订单
|
|
option := new(models.CustomerOrderOption)
|
|
return option.GetOpen(aid)
|
|
case define.MODULE_SHAKRB: //摇红包
|
|
rule := new(models.ShakeRedEnvelopeRule)
|
|
return rule.GetCurrent(aid)
|
|
case define.MODULE_AUCTION: // 竞拍
|
|
auction := new(models.NewAuctionActivity)
|
|
return auction.GetCurrent(aid)
|
|
case define.MODULE_VOTE:
|
|
vote := new(models.NewVoteActivity)
|
|
return vote.GetCurrent(aid)
|
|
case define.MODULE_CALORIE:
|
|
calorie := new(models.Calorie)
|
|
return calorie.GetCurrent(aid)
|
|
case define.MODULE_BARRAGE:
|
|
fallthrough
|
|
case define.MODULE_BULLYS:
|
|
fallthrough
|
|
case define.MODULE_REWARD:
|
|
fallthrough
|
|
case define.MODULE_UPPERW:
|
|
return true, nil
|
|
|
|
default:
|
|
return false, fmt.Errorf("不存在该活动模块")
|
|
}
|
|
}
|