diff --git a/controllers/pc/order_draw.go b/controllers/pc/order_draw.go index 660f1e2..bc0e541 100644 --- a/controllers/pc/order_draw.go +++ b/controllers/pc/order_draw.go @@ -295,9 +295,6 @@ func (t *OrderDrawCtl) Draw() { t.CheckErr(err) t.Assert(exist, code.MSG_ORDER_RULE_NOT_EXIST, "订单抽奖规则不存在") - //count, err := core.GetXormAuto().Where("order_draw_rule_id=? and order_draw_rule_ladder_id=? "+ - // "and rehearsal_id=? and arch_id=? and is_delete=0", ruleId, ladderId, activity.RehearsalId, activity.ArchId). - // Count(&models.OrderDrawRecord{}) count, err := (&models.OrderDrawRecord{}).Count(ladder.Id, activity.RehearsalId, activity.ArchId) t.CheckErr(err) prizeNum := ladder.PrizeNumber - int(count) diff --git a/controllers/pc/order_draw_special.go b/controllers/pc/order_draw_special.go new file mode 100644 index 0000000..4656125 --- /dev/null +++ b/controllers/pc/order_draw_special.go @@ -0,0 +1,468 @@ +package pc + +import ( + "fmt" + "hudongzhuanjia/controllers" + "hudongzhuanjia/models" + activity_service "hudongzhuanjia/services/activity" + lottery_service "hudongzhuanjia/services/lottery" + "hudongzhuanjia/utils/code" + "hudongzhuanjia/utils/define" + "time" + + "github.com/ouxuanserver/osmanthuswine/src/core" +) + +// 订单 +type OrderDrawSpecialCtl struct { + controllers.AuthorCtl +} + +// 屏蔽 +func (t *OrderDrawSpecialCtl) Block() { + activityId := t.MustGetInt("activity_id") + status := t.MustGet("status") + + module, exist, err := activity_service.GetModuleService(define.MODULE_ORDERLY, activityId) + t.CheckErr(err) + t.Assert(exist, code.MSG_MODULE_NOT_EXIST, "模块不存在") + module.BesideRepeat = status + _, err = models.Update(module.Id, module, "beside_repeat") + t.CheckErr(err) + t.SUCCESS("操作成功") +} + +// 开启订单活动 +func (t *OrderDrawSpecialCtl) Switch() { + activityId := t.MustGetInt("activity_id") + status := t.MustGetInt("status") + + activity := models.Activity{} + exist, err := models.Get(&activity, activityId) + t.CheckErr(err) + t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在") + + option := &models.CustomerOrderOption{} + exist, err = option.GetByActivityId(activityId) + t.CheckErr(err) + t.Assert(exist, code.MSG_MODULE_NOT_EXIST, "订单活动不存在") + + if option.Status == status { + t.SUCCESS("操作成功") + return + } + + option.Status = status + _, err = models.Update(option.Id, option, "status") + t.CheckErr(err) + t.SUCCESS("操作成功") +} + +// ===================== 订单抽奖 + +// 开始抽奖 +func (t *OrderDrawSpecialCtl) Start() { + ladderId := t.MustGetInt("order_draw_ladder_id") + + ladder := new(models.OrderDrawRuleLadder) + exist, err := models.Get(ladder, ladderId) + t.CheckErr(err) + t.Assert(exist, code.MSG_ORDER_RULE_NOT_EXIST, "订单抽奖规则不存在") + + if ladder.Status != define.StatusNotBegin { + t.ERROR(fmt.Sprintf("该活动%s", ladder.Status), code.MSG_ERR) + } + ladder.Status = define.StatusRunning + ladder.UpdatedAt = time.Now() + err = models.Save(map[string]interface{}{ + "id=": ladder.Id, + "is_delete=": 0, + }, ladder, "status", "updated_at") + t.CheckErr(err) + t.SUCCESS("操作成功") +} + +// 开始抽奖 +func (t *OrderDrawSpecialCtl) Stop() { + ladderId := t.MustGetInt("order_draw_ladder_id") + + ladder := new(models.OrderDrawRuleLadder) + exist, err := models.Get(ladder, ladderId) + t.CheckErr(err) + t.Assert(exist, code.MSG_ORDER_RULE_NOT_EXIST, "订单抽奖规则不存在") + + if ladder.Status != define.StatusRunning { + t.ERROR(fmt.Sprintf("该活动%s", ladder.Status), code.MSG_ERR) + } + + ladder.Status = define.StatusEnding + ladder.UpdatedAt = time.Now() + err = models.Save(map[string]interface{}{ + "id=": ladder.Id, + "is_delete=": 0, + }, ladder, "status", "updated_at") + t.CheckErr(err) + t.SUCCESS("操作成功") +} + +type SpecialOrderLadderResult struct { + OrderDrawRuleId int `json:"order_draw_rule_id"` + OrderDrawLadderId int `json:"order_draw_ladder_id"` + PrizeName string `json:"prize_name"` + Status string `json:"status"` + PrizeImg string `json:"prize_img"` + PrizeNumber int `json:"prize_number"` +} + +type SpecialOrderListResult struct { + OrderDrawActivityId int `json:"order_draw_activity_id"` + OrderDrawRuleId int `json:"order_draw_rule_id"` + OrderDrawActivityName string `json:"order_draw_activity_name"` + OrderDrawLadders []*OrderLadderResult `json:"order_draw_ladders"` + PrizeNumber int `json:"prize_number"` +} + +//获取所有订单奖品 +func (t *OrderDrawSpecialCtl) List() { + activityId := t.MustGetInt("activity_id") + customerId := t.GetAccountId() + // + area := &models.AreaStore{} + exist, err := area.GetByCustomerId(customerId, activityId) + t.CheckErr(err) + t.Assert(exist, code.MSG_AREASTORE_NOT_EXIST, "地区信息异常") + + activity := models.Activity{} + exist, err = models.Get(&activity, activityId) + t.CheckErr(err) + t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动信息异常") + + // 订单的开启或关闭 + option := &models.CustomerOrderOption{} + exist, err = option.GetByActivityId(activityId) + t.CheckErr(err) + t.Assert(exist, code.MSG_DATA_NOT_EXIST, "订单信息异常") + + result := make([]*OrderListResult, 0) + core.GetXormAuto().Table(&models.OrderDrawActivity{}).Alias("a"). + Select("a.id as order_draw_activity_id, r.id as order_draw_rule_id, a.order_draw_activity_name"). + Join("LEFT", (&models.OrderDrawRule{}).Alias("r"), + "a.id=r.order_draw_activity_id and r.is_delete=0"). + Where("a.is_delete=0 and a.activity_id=?", activityId).Find(&result) + + ruleIds := make([]int, 0) + for _, v := range result { + ruleIds = append(ruleIds, v.OrderDrawRuleId) + } + + ladders := make([]*OrderLadderResult, 0) + err = core.GetXormAuto().Table(&models.OrderDrawRuleLadder{}).Alias("l"). + Select("id as order_draw_ladder_id, status, prize_name, prize_img, prize_number, order_draw_rule_id"). + Where("is_delete=0").In("order_draw_rule_id", ruleIds).Find(&ladders) + t.CheckErr(err) + + ladderIds := make([]int, 0) + for _, ladder := range ladders { + ladderIds = append(ladderIds, ladder.OrderDrawLadderId) + } + + records := make([]map[string]int, 0) + err = core.GetXormAuto().Table(&models.OrderDrawRecord{}).Alias("r"). + Select("r.order_draw_rule_ladder_id as ladder_id, count(id) as num"). + Where("is_delete=0 and rehearsal_id=? and arch_id=? and area_id=?", + activity.RehearsalId, activity.ArchId, area.Id). + In("r.order_draw_rule_ladder_id", ladderIds).GroupBy("ladder_id").Find(&records) + t.CheckErr(err) + + for i := range ladders { + for j := range records { + if ladders[i].OrderDrawLadderId == records[j]["ladder_id"] { + ladders[i].PrizeNumber = ladders[i].PrizeNumber - records[j]["num"] + } + } + } + + for i := range result { + for j := range ladders { + if result[i].OrderDrawRuleId == ladders[j].OrderDrawRuleId { + result[i].PrizeNumber += ladders[j].PrizeNumber + result[i].OrderDrawLadders = append(result[i].OrderDrawLadders, ladders[j]) + } + } + } + + t.JSON(map[string]interface{}{ + "total": len(result), + "list": result, + "status": option.Status, + }) +} + +//抽奖奖品 +func (t *OrderDrawSpecialCtl) Prize() { + ruleId := t.MustGetInt("order_draw_rule_id") + + //list := make([]*models.OrderDrawRuleLadder, 0) + //err := core.GetXormAuto().Where("is_delete=0 and order_draw_rule_id=?", ruleId).Find(&list) + list, err := models.GetOrderDrawRuleLaddersByRuleId(ruleId) + t.CheckErr(err) + + for index := range list { + list[index].Des = "在该活动的所有订单用户中随机抽奖品数量的用户" + } + t.JSON(map[string]interface{}{ + "total": len(list), + "lise": list, + }) +} + +type SpecialOrderUsersResult struct { + UserId int `json:"user_id"` + Username string `json:"username"` + Avatar string `json:"avatar"` +} + +//统计人数和订单数量 +func (t *OrderDrawSpecialCtl) Users() { + activityId := t.MustGetInt("activity_id") + ruleId := t.MustGetInt("order_draw_rule_id") + + activity := models.Activity{} + exist, err := models.Get(&activity, activityId) + t.CheckErr(err) + t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在") + + result := make([]*SpecialOrderUsersResult, 0) + session := core.GetXormAuto().Table(&models.CustomerOrder{}).Alias("o"). + Select("o.buyer_id as user_id, u.nickname as username, u.avatar").Distinct("o.buyer_id"). + Join("LEFT", (&models.User{}).Alias("u"), "o.buyer_id=u.id and u.is_delete=0"). + Where("o.activity_id=? and o.is_delete=0 and o.rehearsal_id=? and o.arch_id=?", activityId, + activity.RehearsalId, activity.ArchId) + + moduleService, exist, err := activity_service.GetModuleService(define.MODULE_ORDERLY, activity.Id) + t.CheckErr(err) + t.Assert(exist, code.MSG_MODULE_NOT_EXIST, "模块服务不存在") + if moduleService.BesideRepeat == define.MODULE_BESIDE_REPEAT { + recordIds := make([]int, 0) + err = core.GetXormAuto().Table(&models.OrderDrawRecord{}).Select("user_id"). + Where("order_draw_rule_id=? and rehearsal_id=? and arch_id=? and is_delete=0", + ruleId, activity.RehearsalId, activity.ArchId).Find(&recordIds) + t.CheckErr(err) + session = session.NotIn("o.buyer_id", recordIds) + } + err = session.Find(&result) + t.CheckErr(err) + + t.JSON(map[string]interface{}{ + "total": len(result), + "list": result, + }) +} + +// 订单抽奖动作 +func (t *OrderDrawSpecialCtl) Draw() { + activityId := t.MustGetInt("activity_id") + ladderId := t.MustGetInt("order_draw_rule_ladder_id") + number := t.MustGetInt("number") + customerId := t.GetAccountId() + + customer := models.Customer{} + exist, err := models.Get(&customer, customerId) + t.CheckErr(err) + t.Assert(exist, code.MSG_CUSTOMER_NOT_EXIST, "客户不存在") + + activity := models.Activity{} + exist, err = models.Get(&activity, activityId) + t.CheckErr(err) + t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在") + t.CheckRunning(activity.Status) + + area := &models.AreaStore{} + exist, err = area.GetByCustomerId(customerId, activityId) + t.CheckErr(err) + t.Assert(exist, code.MSG_DATA_NOT_EXIST, "地区不存在") + + // 查询奖品 + ladder := models.OrderDrawRuleLadder{} + exist, err = models.Get(&ladder, ladderId) + t.CheckErr(err) + t.Assert(exist, code.MSG_ORDER_LADDER_NOT_EXIST, "订单抽奖等级不存在") + t.CheckRunning(ladder.Status) + + rule := models.OrderDrawRule{} + exist, err = models.Get(&rule, ladder.OrderDrawRuleId) + t.CheckErr(err) + t.Assert(exist, code.MSG_ORDER_RULE_NOT_EXIST, "订单抽奖规则不存在") + + count, err := (&models.OrderDrawRecord{}).Count(ladder.Id, activity.RehearsalId, activity.ArchId) + t.CheckErr(err) + prizeNum := ladder.PrizeNumber - int(count) + if prizeNum <= 0 || prizeNum < number { + t.ERROR("奖品数量不足", code.MSG_LOTTERY_PRIZE_NOT_ENOUGH) + } + + module, exist, err := activity_service.GetModuleService(define.MODULE_ORDERLY, activity.Id) + t.CheckErr(err) + t.Assert(exist, code.MSG_MODULE_NOT_EXIST, "模块服务不存在") + orders, err := lottery_service.GetSpecialOrderLottery(module.BesideRepeat, activity.Id, rule.Id, ladder.Id, activity.RehearsalId, area.Id, activity.ArchId) + if len(orders) < number { + t.ERROR("抽奖订单数量不足", code.MSG_LOTTERY_PEOPLE_NOT_ENOUGH) + } + + lottery_service.RandSpecialOrderLottery(orders) + winnerOrders := orders[:number] + userIds := make([]int, 0) + for _, v := range winnerOrders { + userIds = append(userIds, v.BuyerId) + } + users, err := models.GetUsersByIds(userIds) + t.CheckErr(err) + + winners := make([]*lottery_service.SpecialOrderLotteryUser, 0) + t.CheckErr(err) + for _, o := range winnerOrders { + for _, u := range users { + if u.Id == o.BuyerId { + winners = append(winners, &lottery_service.SpecialOrderLotteryUser{ + UserId: u.Id, + Username: o.Receiver, + UserPhone: o.Phone, + Avatar: u.Avatar, + PrizeName: ladder.PrizeName, + LadderId: ladder.Id, + PrizeImg: ladder.PrizeImg, + EntryPersonName: o.OrderEntryPersonName, + }) + } + } + prize := models.UserPrize{} + prize.ActivityId = activityId + prize.RehearsalId = activity.RehearsalId + prize.ActivityName = activity.Name + prize.UserId = o.BuyerId + prize.CustomerOrderId = o.Id + prize.PrizeImg = ladder.PrizeImg + prize.PrizeName = ladder.PrizeName + prize.ArchId = activity.ArchId + prize.PrizeType = 2 + _, err = models.Add(&prize) + t.CheckErr(err) + + record := models.OrderDrawRecord{} + record.UserPrizeId = prize.Id + record.ActivityId = activityId + record.RehearsalId = activity.RehearsalId + record.ArchId = activity.ArchId + record.OrderDrawActivityId = rule.OrderDrawActivityId + record.OrderDrawRuleId = rule.Id + record.UserId = o.BuyerId + record.CustomerOrderId = o.BuyerId + record.OrderDrawRuleLadderId = ladder.Id + record.PrizeName = ladder.PrizeName + record.AreaId = area.Id + record.AreaName = area.Name + _, err = models.Add(&record) + t.CheckErr(err) + } + t.JSON(winners) +} + +func (t *OrderDrawSpecialCtl) ListOfWinners() { + ruleId := t.MustGetInt("order_draw_rule_id") + + rule := &models.OrderDrawRule{} + exist, err := models.Get(rule, ruleId) + t.CheckErr(err) + t.Assert(exist, code.MSG_ORDER_RULE_NOT_EXIST, "订单抽奖规则不存在") + + lottery := &models.OrderDrawActivity{} + exist, err = models.Get(lottery, rule.OrderDrawActivityId) + t.CheckErr(err) + t.Assert(exist, code.MSG_ORDER_RULE_NOT_EXIST, "订单抽奖规则不存在") + + activity := &models.Activity{} + exist, err = models.Get(activity, lottery.ActivityId) + t.CheckErr(err) + t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在") + + result, err := lottery_service.GetSpecialOrderWinnersResult(rule.Id, activity.RehearsalId, activity.ArchId) + t.CheckErr(err) + t.JSON(map[string]interface{}{ + "total": len(result), + "list": result, + }) +} + +// 获取所有订单 +type SpecialOrdersResult struct { + Id int `json:"id"` + UserId int `json:"user_id"` + AreaName string `json:"area_name"` + EntryPersonName string `json:"entry_person_name"` + Username string `json:"username"` + Phone string `json:"phone"` + Address string `json:"address"` + Goods []map[string]string `json:"goods"` +} + +func (t *OrderDrawSpecialCtl) Orders() { + activityId := t.MustGetInt("activity_id") + + activity := models.Activity{} + exist, err := models.Get(&activity, activityId) + t.CheckErr(err) + t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在") + + orders := make([]*SpecialOrdersResult, 0) + err = core.GetXormAuto().Table(&models.CustomerOrder{}).Alias("o").Select("o.id as id, "+ + " o.area_name as area_name, o.order_entry_person_name as entry_person_name, o.buyer_id as user_id, "+ + " o.receiver as username, o.phone as phone, o.address as address, o.created_at"). + Where("o.is_delete=0 and o.activity_id=? and o.rehearsal_id=? and o.arch_id=?", + activityId, activity.RehearsalId, activity.ArchId).Asc("o.created_at").Find(&orders) + t.CheckErr(err) + + orderIds := make([]int, 0) + for _, o := range orders { + orderIds = append(orderIds, o.Id) + } + subs, err := models.GetCustomerOrderSubsByOrderIds(orderIds) + t.CheckErr(err) + for i := range orders { + for j := range subs { + if fmt.Sprint(orders[i].Id) == subs[j]["order_id"] { + orders[i].Goods = append(orders[i].Goods, subs[j]) + } + } + } + + // 下订单人数 + buyerCount, err := (&models.CustomerOrder{}).CountCustomerOrder(activity.Id, activity.RehearsalId, activity.ArchId) + t.CheckErr(err) + + t.JSON(map[string]interface{}{ + "orders": orders, + "total": len(orders), + "buyer_count": buyerCount, + }) +} + +// 录入人员排行榜 +func (t *OrderDrawSpecialCtl) OrderRank() { + activityId := t.MustGetInt("activity_id") + limit := t.MustGetInt("limit") + + activity := models.Activity{} + exist, err := models.Get(&activity, activityId) + t.CheckErr(err) + t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在") + + order := &models.CustomerOrder{} + res, err := order.SumCustomerOrder(activity.Id, activity.RehearsalId, activity.ArchId, limit) + t.CheckErr(err) + total, err := order.TotalCustomerOrderGoodsNum(activity.Id, activity.RehearsalId, activity.ArchId) + t.CheckErr(err) + t.JSON(map[string]interface{}{ + "list": res, + "total": total, + }) +} diff --git a/main.go b/main.go index c4ebc05..911a3fa 100644 --- a/main.go +++ b/main.go @@ -30,6 +30,7 @@ func main() { core.GetInstanceRouterManage().Registered(new(pc.TugOfWarCtl)) // 拔河 core.GetInstanceRouterManage().Registered(new(pc.OrderDrawCtl)) // 订单抽奖 core.GetInstanceRouterManage().Registered(new(pc.CalorieCtl)) // 卡路里 + core.GetInstanceRouterManage().Registered(new(pc.OrderDrawSpecialCtl)) // // client core.GetInstanceRouterManage().Registered(new(client.ActivityCtl)) // 互动 diff --git a/models/order_draw_record.go b/models/order_draw_record.go index cd6f968..5b098e7 100644 --- a/models/order_draw_record.go +++ b/models/order_draw_record.go @@ -16,6 +16,7 @@ type OrderDrawRecord struct { OrderDrawRuleId int `json:"order_draw_rule_id" xorm:"not null comment('订单抽奖规则id')"` OrderDrawRuleLadderId int `json:"order_draw_rule_ladder_id" xorm:"not null comment('订单规则阶梯id')"` OrderDrawRuleLadder *OrderDrawRuleLadder `json:"order_draw_rule_ladder" xorm:"-"` + CustomerOrderId int `json:"customer_order_id" xorm:"not null default 0 comment('订单号') INT(11)"` UserId int `json:"user_id" xorm:"not null comment('用户id')"` ArchId int `json:"arch_id" xorm:"not null default 0 comment('归档id') INT(11)"` User *User `json:"user" xorm:"-"` diff --git a/services/lottery/lottery.go b/services/lottery/lottery.go index a25e2ba..30f9794 100644 --- a/services/lottery/lottery.go +++ b/services/lottery/lottery.go @@ -176,12 +176,11 @@ func GetLotteryUsersResult(areaId, activityId, rehearsalId, archId interface{}, } type WinnersResult struct { - UserId int `json:"user_id"` - UserName string `json:"user_name"` - UserPhone string `json:"user_phone"` - Avatar string `json:"avatar"` - PrizeName string `json:"prize_name"` - EntryPersonName string `json:"entry_person_name"` + UserId int `json:"user_id"` + UserName string `json:"user_name"` + UserPhone string `json:"user_phone"` + Avatar string `json:"avatar"` + PrizeName string `json:"prize_name"` } func GetWinnersResult(ruleId, rehearsalId, archId interface{}) ([]*WinnersResult, error) { diff --git a/services/lottery/order.go b/services/lottery/order.go index a35dd07..d8d23ef 100644 --- a/services/lottery/order.go +++ b/services/lottery/order.go @@ -38,15 +38,19 @@ func GetOrderLotteryUserIds(repeat string, activityId, ruleId, ladderId, rehears } -func GetOrderWinnersResult(ruleId, rehearsalId, archId interface{}) ([]*WinnersResult, error) { - result := make([]*WinnersResult, 0) - err := core.GetXormAuto().Table(&models.OrderDrawRecord{}).Alias("r"). +type OrderWinnersResult struct { + UserId int `json:"user_id"` + UserName string `json:"user_name"` + UserPhone string `json:"user_phone"` + Avatar string `json:"avatar"` + PrizeName string `json:"prize_name"` +} + +func GetOrderWinnersResult(ruleId, rehearsalId, archId interface{}) (result []*OrderWinnersResult, err error) { + err = core.GetXormAuto().Table(&models.OrderDrawRecord{}).Alias("r"). Select("r.user_id, u.nickname as username, u.phone as user_phone, u.avatar, r.prize_name"). Join("LEFT", (&models.User{}).Alias("u"), "u.id=r.user_id and u.is_delete=0"). Where("r.is_delete=0 and r.order_draw_rule_id=? and r.rehearsal_id=? and r.arch_id=?", ruleId, rehearsalId, archId).Find(&result) - if err != nil { - return nil, err - } - return result, nil + return } diff --git a/services/lottery/order_special.go b/services/lottery/order_special.go new file mode 100644 index 0000000..f342b2e --- /dev/null +++ b/services/lottery/order_special.go @@ -0,0 +1,82 @@ +package lottery_service + +import ( + "hudongzhuanjia/models" + "hudongzhuanjia/utils/define" + "math/rand" + "time" + + "github.com/ouxuanserver/osmanthuswine/src/core" +) + +type SpecialOrderLotteryUser struct { + UserId int + Username string + UserPhone string + Avatar string + PrizeName string + LadderId int + PrizeImg string + EntryPersonName string +} + +func RandSpecialOrderLottery(orders []*models.CustomerOrder) { + if len(orders) <= 0 { + return + } + r := rand.New(rand.NewSource(time.Now().Unix())) + for i := len(orders) - 1; i > 0; i-- { + num := r.Intn(i + 1) + orders[i], orders[num] = orders[num], orders[i] + } +} + +// 排除order_id +func GetSpecialOrderLottery(repeat string, activityId, ruleId, ladderId, rehearsalId, areaId, archId interface{}) ([]*models.CustomerOrder, error) { + var err error + //var userIds = make([]int, 0) + var orders = make([]*models.CustomerOrder, 0) + var recordIds = make([]int, 0) + if repeat == define.MODULE_BESIDE_REPEAT { + //查询已经中奖的用户,剔除已经中奖的用户 + err = core.GetXormAuto().Table(&models.OrderDrawRecord{}).Select("customer_order_id"). + Where("order_draw_rule_id=? and rehearsal_id=? and arch_id=? and is_delete=0", + ruleId, rehearsalId, archId).Find(&recordIds) + } else { + // 不去除 + err = core.GetXormAuto().Table(&models.OrderDrawRecord{}).Select("customer_order_id"). + Where("order_draw_rule_ladder_id=? and rehearsal_id=? and arch_id=? and is_delete=0", + ladderId, rehearsalId, archId).Find(&recordIds) + } + if err != nil { + return nil, err + } + + err = core.GetXormAuto().NoAutoCondition().Where("activity_id=? and rehearsal_id=? and area_id=? "+ + " and arch_id=? and is_delete=0", activityId, rehearsalId, areaId, archId). + NotIn("id", recordIds).Find(&orders) + if err != nil { + return nil, err + } + return orders, nil + +} + +type SpecialOrderWinnersResult struct { + UserId int `json:"user_id"` + UserName string `json:"user_name"` + UserPhone string `json:"user_phone"` + Avatar string `json:"avatar"` + PrizeName string `json:"prize_name"` + EntryPersonName string `json:"entry_person_name"` +} + +func GetSpecialOrderWinnersResult(ruleId, rehearsalId, archId interface{}) (result []*SpecialOrderWinnersResult, err error) { + err = core.GetXormAuto().Table(&models.OrderDrawRecord{}).Alias("r"). + Select("r.order_entry_person_name as entry_person_name, r.user_id, u.nickname as username, "+ + " u.phone as user_phone, u.avatar, r.prize_name").Join("LEFT", + (&models.User{}).Alias("u"), "u.id=r.user_id and u.is_delete=0"). + Where("r.is_delete=0 and r.order_draw_rule_id=? and r.rehearsal_id=? and r.arch_id=?", + ruleId, rehearsalId, archId).Find(&result) + return +}